|
|
|
| Привет всем. Одинаковый скрипт коннекта к MySQL
$dblocation = "10.66.1.0";
$dbname = "name";
$dbuser = "user";
$dbpasswd = "passw";
$dbcnx = mysql_connect($dblocation,$dbuser,$dbpasswd);
if (!$dbcnx) {
exit( "<P>В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.</P>" );
}
|
так вот с Denwer, что ставил год назад все работает (на старом сервере)- идет коннект к этому IP-адресу, а с Denwer что ставил в прошлом месяце - не идет. Пишет бяку
******************
Warning: mysql_connect() [function.mysql-connect]: OK packet 6 bytes shorter than expected in W:\home\localhost\www\sqltest.php on line 7
Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 4.1+ using old authentication in W:\home\localhost\www\sqltest.php on line 7
*******************
Подскажите в чем проблема ? Спасибо ! | |
|
|
|
|
|
|
|
для: larush2
(08.02.2011 в 13:09)
| | Какую версию имеет сервер, с которым вы устанавливаете соединение? | |
|
|
|
|
|
|
|
для: cheops
(08.02.2011 в 13:14)
| | автор утверждает что 4, но на сайте Denwer'a ее еще нету :-) Как можно проверить ? | |
|
|
|
|
|
|
|
для: larush2
(08.02.2011 в 13:20)
| | Дело в том, что начиная с версии MySQL 4.1 изменился порядок аутентификации, если на удаленном сервере используется MySQL 4.0, то у вас может не получиться установить соединение при помощи новой библиотеки, нужна более старая библиотека для работы с MySQL.
>автор утверждает что 4, но на сайте Denwer'a ее еще нету
Вероятно уже нет, так как MySQL 4 - это очень старая версия MySQL, она уже практически нигде не используется.
Проверить версию сервера можно при помощи запроса SELECT VERSION(). | |
|
|
|
|
|
|
|
для: cheops
(08.02.2011 в 13:24)
| | mysql
MySQL Supportenabled
Active Persistent Links0
Active Links1
Client API version3.23.49
Я так понял что 3.23 ? | |
|
|
|
|
|
|
|
для: larush2
(08.02.2011 в 14:44)
| | Cheops, а какова методика коннекта к старому MySQL ? | |
|
|
|
|
|
|
|
для: larush2
(08.02.2011 в 14:48)
| | Нужно найти старую библиотеку libmysql.dll (вернее, если соединение осуществляется через PHP, он должен быть скомпилирован с ней). | |
|
|
|
|
|
|
|
для: larush2
(08.02.2011 в 14:44)
| | Да, вернее библиотека, ответсвенная за соединение с клиентом версии 3.23, т.е. поэтому сервер ожидает старый способ соединения. В конфигурационном файле my.ini имеется опция old-passwords, которая переводит новые сервера в режим работы старых (в плане аутентификации). Однако, для клиентов такого режима вроде нет, т.е. нужно просто использовать старые библиотеки. | |
|
|
|
|
|
|
|
для: cheops
(08.02.2011 в 14:51)
| | библиотека у меня есть на старом серваке, я работаю под Виндой, так что не проблема перекинуть... Больше ничего не нарушится, ведь есть приложения уже рботающие, не хотелось бы их ломать | |
|
|
|
|
|
|
|
для: larush2
(08.02.2011 в 13:09)
| | Фактически сервер Вам ненавязчиво предлагает обновить клиентские библиотеки и записи аутентификации в системных таблицах
При установке Денвера php 5.3.1, столкнувшись с данной проблемой, мне пришлось поставить
клиентскую библиотеку mysqlnd . В фиолетовых страницах она выглядит как
Client API version: mysqlnd 5.0.5 -dev - 081106 - $Revision: 289630 $
Не возьмусь утверждать, что PHP 5.3 в принципе не запустить в режиме old-passwords.
Помню лишь, что хотел, и долго пытался, но проще оказалось все ж таки обновить клиента и несколько записей Mysql-логинов.
( У меня несколько - у Вас вполне может оказаться одна.)
Каких то проблем совместимости мне это пока не доставило. | |
|
|
|
|
|
|
|
для: Trianon
(08.02.2011 в 15:49)
| | Хозяин не хочет обновлять весь комлект Denwer, боится что не подхватятся все приложения. Я его понимаю, не он автор проекта. Как сделать так (что куда поставить), чтобы обновить либо MySQL, либо какую-то из его библиотек не затрагивая ни конфигураций ни базы данных ?
Я у себя на сервере где расположен скрипт для коннекта к удаленной БД поставил библиотеку libmysql.dll со старого сервера- не помогло, не подключаюсь к удаленному серверу. | |
|
|
|
|
|
|
|
для: larush2
(09.02.2011 в 09:11)
| | Пардон, а при чем здесь денвер?
Он для тестирования на локальной машине предназначен, а не чтобы в интернет выходить (и неважно, в роли клиента или сервера). | |
|
|
|
|
|
|
|
для: Trianon
(09.02.2011 в 10:41)
| | на 2-х машинах в разных городах (А и Б) развернуты пакет Денвера под Виндой. На одной (Старый пакет, MySQL 3 версии, город А) собирается информация и рисуются какие-то графики загрузки. Поставлена задача- на второй (другой владелец, новый пакет Денвера, MySQL 5 версии, более мощный сервер, город Б) сделать сайт, часть информации которого будет браться с первого сервака. Так вот, при загрузке странички, размещенной на втором сервере (Б), производится коннект к БД, размещнной на первом сервере (А). К слову, рядом со вторым сервером есть еще один, на котором развернут старый пакет Денвера (тоже в городе Б), так вот скрипт коннекта к БД города А на старом пакете Денвера работает нормально. А тот-же скрипт, расположенный на новом пакете в городе Б выдает ошибку, что приводил выше.
Вот подробно описал... Что посоветуете ? | |
|
|
|
|
|
|
|
для: larush2
(09.02.2011 в 10:48)
| | 1. получать данные не по mysql-client-server-протоколу, как-то по-другому. По http, например.
2. убрать денверы с production-машин, заменив их честно развернутыми серверами.
3. сменить платформу с windows на более устойчивую. | |
|
|
|
|
|
|
|
для: Trianon
(09.02.2011 в 10:58)
| | 1 это не коммерческие сайты, руководство напрягло, создали... нет выделенных админов, знающих более устойчивые системы.
2 я прошу совета как моему скрипту получить информацию из БД, лежащей удаленно, при условии что не идет коннект. Если есть другой вариант-подтолкните, пойду читать. Но мне не нужна скачивать всю БД, а только обновления за 30 минут, это же логичнее...
3 Может подскажет кому из понимающих- с запозданием, но я посмотрел какя версия MySQL стоит на старом серваке, оказалось что не такая уж и старая - 5,0,45 , и скрипт с него работает ! Только там нет блока mysqlnd... На "новом" mysqlnd 5.0.5-dev - 081106 - $Revision: 289630 $ и скрипт не срабатывает.... | |
|
|
|
|
|
|
|
для: larush2
(09.02.2011 в 11:07)
| | 1. а как оказалось, что версия сервера внезапно выросла с 3-й до 5-й?
Там все же апгрейд провели?
2. что мешает обращаться к серверу А по http-протоколу?
К отдельному скрипту, на нем для этой цели специально размещенному? | |
|
|
|
|
|
|
|
для: Trianon
(09.02.2011 в 11:18)
| | 1) про версии... на сервере А стоит 3 версия, мне прислали вывод phpinfo, а вот на "старом" в городе Б- 5,0,45 (я ее не смотрел раньше, видать эта версия была уже давно, а на удаленном еонце лет 5 как не меняли ничего) а на "новом" в городе Б 5,0,5.
2) обратиться по http - имеется в виду получить страничку и распарсить ее ? Мне кажется это совсем уж "на коленке" и к тому же, на страничке рисутся графики, а мне нужны циферьки, не думаю что там будут заморачиваться и делать для меня новые страницы. | |
|
|
|
|
|
|
|
для: larush2
(09.02.2011 в 11:36)
| | 1. phpinfo() не показывает про MySQL-сервер вообще ничего. Эта функция и коннектиться-то к нему не пытается. Она пишет только про клиентские библиотеки.
Вам необходимо выяснить версию сервера.
Версия сервера определяется SQL-запросом SELECT VERSION();
2. имелось в виду запрашивать не страничку с графиками, а отдельный скрипт, который бы выдавал данные в удобном (приемлемом) для Вашей стороны виде.
Естественно некий минимальный анализ (я не люблю затасканного слова парсинг, под которым кто что подразумевает) отклика на Вашей стороне потребуется. Но это, в сущности, не так трудно, если подобрать подходящий формат обмена.
3. Я сейчас проверил у себя (php5.3.1, клиент mysqlnd 5.0.5 , сервер MySQL 5.0.45-community-nt)
Временно включил OLD-PASSWORDS в конфиге.
Коннект из php скрипта проходит. SELECT-запросы выполняются.
Так что полагаю довольно вероятным, что если у Вас коннект не идет, и на удаленной стороне действительно пятый сервер со включенным OLD-PASSWORDS-режимом, а не третий)
то не идет он (коннект) не столько из-за разницы версий, сколько из-за того, что Вы пытаетесь подключиться через эккаунт (учетную запись) старого (old-password) формата.
Уж коль скоро для Вашего взаимодействия учетную запись на сервере A все равно придется держать отдельную - нужно сделать её с паролем в новом формате.
см http://dev.mysql.com/doc/refman/5.0/en/set-password.html
и http://dev.mysql.com/doc/refman/5.0/en/password-hashing.html
На взаимодействии удаленного сервера с его основными старыми клиентами это не скажется никак - тамошний администратор может не опасаться. Ну если только лишних прав на Ваш эккаунт не навешает.
Не убежден в повторяемости результата впрочем. | |
|
|
|
|
|
|
|
для: Trianon
(09.02.2011 в 11:52)
| | Уточнение:
город А имеет БД на MySQL 4.1.16
город Б имеет 2 сервера
-MySQL 5.0.45, PHP 5.2.4, Appache 2.2.4 - коннект идет
-MySQL 5.1.40, PHP 5.3.1, Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8k - коннект не идет
Мне нужно закоонектиться к удаленной БД со второго сервера города Б.
Ничего не подсказывает направление поиска ?
Временно мы сняли пароль с юзера- работает. | |
|
|
|
|
|
|
|
для: larush2
(10.02.2011 в 12:27)
| | Вы не указали версии SQL-клиентов. Это те данные, которые печатаются в фиолетовой таблице phpinfo() для каждого php, в разделе MySQL.
По-моему, как я предложил в п.3 (09.02.2011 в 11:52) , достаточно создать
на сервере A эккаунт для входа клиентом Б2 - эккаунт с паролем в новом (позже 4.1.1) формате.
Как я понимаю, сервер 4.1.16 вполне позволяет сделать это.
Сейчас попытки подключиться клиентом Б2 к серверу А делаются через тот же эккаунт, через который идет успешное подключение внутри рамок машины А, или через какой-то другой?
Если что-то непонятно в моих фразах, не стесняйтесь переспросить.
Я всё поясню. | |
|
|
|