Всем привет. Когда-то писал программу, работающую с БД mysql. Класс-обертка коннектится к локальному серверу mysql по адресу 127.0.0.1 и получает данные из БД. Возникла необходимость, чтобы программка работала в локальной сети. Сервер mysql расположен на компе, имеющем в сети адрес 192.168.0.3. Вопрос в том, как коннектиться из программы, находящейся на другом компе сети, к серверу БД? Просто в лоб замена 127.0.0.1 на 192.168.0.3 ничего не даёт.
cresta Читай о таблицах mysql.db, mysql.user и mysql.host. Например Код (Text): INSERT INTO user VALUES ('%', 'uname', PASSWORD('upassword'),...); FLUSH PRIVILEGES; разрешит пользователю uname с паролем upassword заходить с любого (т.к. '%') компьютера. Многоточие, потому что число/тип остальных полей зависит от версии сервера. Можно заменить в таблице mysql.user для какого-нибудь пользователя localhost на '%' и посмотреть что получилось. Если работать на уровне повыше, то читай о команде GRANT. Например Код (Text): GRANT ALL PRIVILEGES ON *.* TO uname@"%" IDENTIFIED BY 'upassword' WITH ALL PRIVILEGES; обрати внимание - опять '%'. ps синтаксис sql-команд может незначительно отличаться, в любом случае перед изменениями необходимо сделать дамп.
Дело не в привилегиях и правах доступа. Это я уже проверял. Если блокирован доступ для юзера с другого хоста, то возникает ошибка access denied for user@host. У меня же другая ошибка: Can't connect to MySQL server on '192.168.0.3' (10061) Дело не доходит до проверки прав пользователя. Облом наступает на стадии коннекта к серверу.
cresta ты телнетом попробуй на её порт подключиться и тогда будеш точно знать, что точно коннекта нет, или всётаки настройки мускла не дают это сделать
Для начала неплохо бы посмотреть на сервере результат Код (Text): netstat -an Возможно, сервер слушает только 127.0.0.1
netstat выполненый на компе с адресом 192.168.0.3 (там, где установлен сервер mysql) дает такие адреса: Код (Text): Имя Локальный адрес Внешний адрес Состояние TCP 0.0.0.0:135 0.0.0.0:0 LISTENING TCP 0.0.0.0:445 0.0.0.0:0 LISTENING TCP 0.0.0.0:2869 0.0.0.0:0 LISTENING TCP 127.0.0.1:1028 0.0.0.0:0 LISTENING TCP 127.0.0.1:1039 127.0.0.1:1040 ESTABLISHED TCP 127.0.0.1:1040 127.0.0.1:1039 ESTABLISHED TCP 127.0.0.1:1041 127.0.0.1:1042 ESTABLISHED TCP 127.0.0.1:1042 127.0.0.1:1041 ESTABLISHED TCP 127.0.0.1:7999 0.0.0.0:0 LISTENING TCP 127.0.0.1:8080 0.0.0.0:0 LISTENING TCP 127.0.0.1:8080 127.0.0.1:1088 TIME_WAIT TCP 127.0.0.1:8080 127.0.0.1:1090 TIME_WAIT TCP 192.168.0.3:139 0.0.0.0:0 LISTENING UDP 0.0.0.0:445 *:* UDP 0.0.0.0:500 *:* UDP 0.0.0.0:1047 *:* UDP 0.0.0.0:1048 *:* UDP 0.0.0.0:1049 *:* UDP 0.0.0.0:4500 *:* UDP 127.0.0.1:123 *:* UDP 127.0.0.1:1036 *:* UDP 127.0.0.1:1900 *:* UDP 192.168.0.3:123 *:* UDP 192.168.0.3:137 *:* UDP 192.168.0.3:138 *:* UDP 192.168.0.3:1900 *:* Состояние для адресов 192.х.х.х не указано. телнетом удается подключиться только к 127.0.0.1 на порт 1028
Сервер естественно запущен. Какой там порт, я не интересовался. Внесу некоторую ясность: программа коннектится к серверу mysql и работает с ним через libmysql.dll, которая входит в комплект пакета денвер. Я написал класс-обертку для этой dll и пользуюсь этим классом. По какому порту коннектиться, решает сама dll. Я порт не указываю. Только задаю адрес хоста, где расположен сервер: 127.0.0.1 Как я понимаю, раз на локалхосте dll может разрулить, какой порт использовать, то и при коннекте на другой хост она должна суметь выбрать нужный порт. Т.к. если я перенесу и прогу и сервер на другой комп, то программа коннектится нормально.
cresta она разруливает дефулт порт на твоём сервере дефулт порт не открыт! или мускл не запущен или дефулт порт изменён кстати у мускл коннектор цпп чем не нравиться?
два вопроса: 1. при установке проги на том же компе, где и сервер, через какой порт конкретно идет соединение проги с сервером? Через 3306? 2.если так, то как открыть порт 3306 с другой машины сети? Пусть даже не программно, вручную. что-то там были какие-то проблемы аннонсированы с этим коннектором, поэтому написал свой. Да и прога уже сделана, переделывать всё как-то неохота.
cresta 1. 3306 2. сервер это по дефулту клиент сам понимаеш как я давно с мускл не работал, но по нему(администрирование и прог) хорошая справка была на великом и могучем ps и действительно, как сказал nester7, он может быть сконфигурирован на прослушку только локалхост, т.е. работает но сеть банит! ИМХО какой нафиг денвер! это поделка для андеграудной крутизны пхп верстальшиков, они вооще балдеют от слова андеграунд! ложаться на бочок и мурлыкают! андеграунд - пхп верстальшики )))) ставь нормальный дистрюбъютив и работай с ним!
cresta коннектится к серверу mysql и работает с ним через libmysql.dll, которая входит в комплект пакета денвер Afaik она входит в состав собственно сервера. Я проверял так. Два компьютера соединены витой парой. На одном поднят сервер (порт стандартный 3306). На другой копирую mysql.exe и libmysql.dll. Набираю в консоли Код (Text): mysql.exe --host=comp2 --user=root --password=... mysql (вместо comp2 можно указать ip-адрес, вместо многоточия разумеется пароль) если сервер не поднят, то получаю Код (Text): ERROR 2003 (HY000): Can't connect to MySQL server on 'comp2' (10061) если нет прав, то Код (Text): ERROR 1130 (00000): Host 'COMP1' is not allowed to connect to this MySQL server если поставлю % для root'а, то Код (Text): Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is ... to server version: 5.0.16-nt Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> Покажи содержимое полей host и user таблицы mysql.user.
q_q а ты не заметил что дефулт 3306 порт там не открыт? я не думаю что mysql.exe будет сканировать весь доступный диапозон портов, для точного коннекта
wsd а ты не заметил что дефулт 3306 порт там не открыт? Там это где? я не думаю что mysql.exe будет сканировать весь доступный Он(а) понимает Код (Text): -P, --port=# Port number to use for connection.
q_q хватит ругаться! 1. постами выше криста показывал открытые порты на сервере 2. при чём тут "--port" если он может быть не открыт, или открыт не понятно где!!! типа руками по диапазону "0..65536" брутить
значит так: порт 3306 открывается сервером mysql. Если сервер запущен, то telnet'ом я могу зайти на 127.0.0.1 3306 (выводит версию сервера и ещё какую-то хрень). Если сервер выключить, то коннект к порту 3306 не проходит. Пробовал с другой машины сделать open 192.168.0.3 3306 - не открывается сервер при этом запущен. Почему?
cresta это всё настройки сервера, про которые толкал nester7 т.е. вариант с прослушиванием именно только локалхост лезем на мускл.сом и качаем русские доки по настройке, оформлены они хорошо