Страница 1 из 2

Настройка внешнего доступ вызывает ошибку mysql

Добавлено: 03 мар 2015, 19:56
sway
Это относится к версиям сервера начиная с одной из 4х версий

Мне нужно открыть доступ к серверу для локальный сети.
Ставлю адрес сервера 192.168.0.17
Запускаю сайт и вижу вот это:
Warning: mysql_connect() [function.mysql-connect]: [2002] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение. (trying to connect via tcp://localhost:3306) in C:\web_site\casely\store\system\database\mysql.php on line 6

По умолчанию конекты к БД выставлены на loсalhost. Но он магически испарился куда-то. Переделывать все сайты на левый ip не вариант

Пробовал:
1. Прописать домен localhost (не запускается сервер с ошибкой Несовместимость конфигурации: домен/алиас localhost можно использовать только с IP-адресом 127.0.0.1)
2. Прописать алиас для localhost (то же самое что и в п.1)
3. Пробовал разные варианты с доменами, алиасами, ip адресом и hosts - либо
сервер не запускается вообще (не может проверить сам себя, в 4й версии сервера), либо ошибка остается.

Что странно - postgresql сервер, который живет отдельно от openserver'а прекрасно продолжает работать с localhost.

В чем проблема?

[upd=1425403026][/upd]
Проблему решил костылем: нужно вручную прописать в hosts
192.168.0.17 localhost

Внимание вопрос: почему я должен это делать вручную?

При попытке сделать из настроек open server домен lcoalhost всегда получаю при запуске ошибку "Несовместимость конфигурации: домен/алиас localhost можно использовать только с IP-адресом 127.0.0.1".

Добавлено: 04 мар 2015, 00:32
Asmodey
sway писал(а):Внимание вопрос: почему я должен это делать вручную?
Это делать нельзя. https://ru.wikipedia.org/wiki/Localhost

Когда Вы ставите ОС слушать другой (не локалхост) ip, то он его и слушает. А локалхост не слушает.
Если выставите - слушать все адреса, то мускул будет доступен в том числе и на локалхосте.

НО! Смотрите это выставит все на все адреса. Надо бы прикрыть фаерволом лишнее. И внимательно к разрешённым хостам для подключения к тому же мускулу.

Добавлено: 04 мар 2015, 00:44
Максим
В последней версии Open Server пользователи MySQL (которые созданы по умолчанию) могут подключаться к базе только с localhost. Для подключения с других IP доступ нужно разрешить согласно того, как это принято в MySQL (% в качестве хоста). Боюсь предположить, но может человек этого не сделал и пришел сюда жаловаться?

Добавлено: 04 мар 2015, 01:13
sway
И это я тоже проверил. Выставлял и %, и localhost. И рутом пытался зайти. В любом случае ничего не заработает пока явно не прописать "ip localhost" в hosts.

Соединение tcp://localhost:3306 не работает если сервер находится по адресу, отличному от localhost или 127.0.0.1. И только прямое задание локалхосту ip адреса спасает ситуацию.

На сколько я понял настройки mysql - там явно указывается с какого ip разрешать соединение. Open Server выставляет его = ip адресу web сервера. Поэтому все, что приходит не с этого ip будет отклонено. Если заменить эту настройку на другой ip или localhost - open server перестает запускаться т.к. не может протестить успешность запуска (присоединится он пытается по другому ip). Замкнутый круг.
Я не проверял, может если убрать эту настройку, то все заработает с любого ip, но тут явно тогда проблемка с настройками open server по умолчанию.

[upd=1425420939][/upd]
Уточню: mysql 5.5, другие не проверял

Добавлено: 04 мар 2015, 01:22
Asmodey
Примерно так.
Вижу такой выход - ставить слушать все интерфейса. Ненужное, например, мускул на нелокалхосте, прикрывать файерволом.
От версии пыха то не зависит.

Добавлено: 04 мар 2015, 01:24
Максим
sway, если вы прописываете в скриптах адрес MySQL сервера как localhost, то какие претензии к Open Server? Это ваши проблемы. В руководстве пользователя указано как правильно нужно делать - использовать имя домена. Естественно, что когда вы запускаете сервер на другом IP адресе, то localhost становится недоступным, т.к. он работает только на 127.0.0.1. Использование домена localhost допускается, но при этом подразумевается что вы будете использовать сервер только локально по адресу 127.0.0.1.

Что касается настройки MySQL, то не понял о чём вы. В настройках (в конфиге) MySQL никакие IP откуда разрешается доступ не указываются. Все эти настройки хранятся в базе данных, а не в конфиге. Всё же я советую вам еще раз убедится, что вы настроили MySQL сервер на доступ извне как это требуется по правилам и что вы сделали это для каждого пользователя БД.

Добавлено: 04 мар 2015, 02:29
sway
Смотрим конфиг mysql, видим
bind-address = %ip%
Смотрим описание в официальной документации:
If the address is a “regular” IPv4 address (such as 127.0.0.1), the server accepts TCP/IP connections only for that particular IPv4 address.
Чешем репу. Понимаем что это и есть то самое ограничение, о котором я писал.
Поэтому все, что приходит не с этого ip будет отклонено
. Работает оно наоборот, тут я ошибся в формулировке.

Что получаем в результате: mysql пашет на доступ извне по ip адресу, но больше не пашет при доступе через localhost (который по факту является самым общим случаем). Вообще-то многие хостинги закрывают такую дырку чтобы не повадно было. Вполне достаточно только phpmyadmin открыть. Зачем БД-то открывать так беспощадно? Кому нужен доступ к БД напрямую? По опыту скажу - ни разу не пользовался за много лет работы. Тем более на локальном сервере.

Вообще тут нужно добавить в настройки что-то типа "ip для входящих соединений к базам данных", отделив его от "ip сервера". Тот, кто знает что конкретно ему нужно - поймет что нужно там выставить. Остальные же не будут заморачиваться с заданием имени домена в настройках бд.

Добавлено: 04 мар 2015, 02:39
Asmodey
ИМХО. ОС - отличный портабельный набор инструментов для разработки. Ну чуток на поиграться с разными версиями. Совсем не предназначен для продакшена. Посему, разведение по ip усложнит настройку. Возможность менять дефолтные порты менять - ну вот кто реально воспользовался этой возможностью? :)

Добавлено: 04 мар 2015, 03:19
sway
Вот и я о том же. По факту никто ж не будет использовать внешний доступ к mysql, но он принудительно выставлен, из-за чего нужно отказаться от localhost в настройках соединения.
Порты, кстати полезны если отдельно стоят еще какие-то версии БД, например.

Добавлено: 04 мар 2015, 11:02
Максим
sway, судя по тому, что вы написали, вы не знаете о пользователях MySQL, их привилегиях и настройке удалённого доступа к БД путем изменения этих самых привилегий.

bind-address = %ip% - это IP адрес на котором висит (работает) сам сервер. Эта настройка не имеет никакого отношения к IP адресам с которых пользователям разрешено подключаться к БД.
Зачем БД-то открывать так беспощадно? Кому нужен доступ к БД напрямую? По опыту скажу - ни разу не пользовался за много лет работы. Тем более на локальном сервере.
Open Server - это пакет для разработчиков, он создан для разработки и отладки. Здесь всё завязано на один единственный IP. Вы указываете IP в настройках - все модули запускаются на этом IP. В будущих версиях Open Server я планирую расширить возможность настройки, так что там да, будет возможность запускать модули на разных IP адресах.

Только вот в данном случае всё это не имеет отношения к вашей проблеме, как я уже отвечал вчера - уверен что либо вы не настроили доступ для MySQL пользователей путем настройки их привилегий, либо используете в скриптах адрес localhost в качестве адреса MySQL сервера.