Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: новый Denwer (последний из 3). Нет коннекта к удаленному хосту
 
 автор: larush2   (08.02.2011 в 13:09)   письмо автору
 
 

Привет всем. Одинаковый скрипт коннекта к 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
*******************

Подскажите в чем проблема ? Спасибо !

  Ответить  
 
 автор: cheops   (08.02.2011 в 13:14)   письмо автору
 
   для: larush2   (08.02.2011 в 13:09)
 

Какую версию имеет сервер, с которым вы устанавливаете соединение?

  Ответить  
 
 автор: larush2   (08.02.2011 в 13:20)   письмо автору
 
   для: cheops   (08.02.2011 в 13:14)
 

автор утверждает что 4, но на сайте Denwer'a ее еще нету :-) Как можно проверить ?

  Ответить  
 
 автор: cheops   (08.02.2011 в 13:24)   письмо автору
 
   для: larush2   (08.02.2011 в 13:20)
 

Дело в том, что начиная с версии MySQL 4.1 изменился порядок аутентификации, если на удаленном сервере используется MySQL 4.0, то у вас может не получиться установить соединение при помощи новой библиотеки, нужна более старая библиотека для работы с MySQL.

>автор утверждает что 4, но на сайте Denwer'a ее еще нету
Вероятно уже нет, так как MySQL 4 - это очень старая версия MySQL, она уже практически нигде не используется.

Проверить версию сервера можно при помощи запроса SELECT VERSION().

  Ответить  
 
 автор: larush2   (08.02.2011 в 14:44)   письмо автору
 
   для: 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:48)   письмо автору
 
   для: larush2   (08.02.2011 в 14:44)
 

Cheops, а какова методика коннекта к старому MySQL ?

  Ответить  
 
 автор: cheops   (08.02.2011 в 14:52)   письмо автору
 
   для: larush2   (08.02.2011 в 14:48)
 

Нужно найти старую библиотеку libmysql.dll (вернее, если соединение осуществляется через PHP, он должен быть скомпилирован с ней).

  Ответить  
 
 автор: cheops   (08.02.2011 в 14:51)   письмо автору
 
   для: larush2   (08.02.2011 в 14:44)
 

Да, вернее библиотека, ответсвенная за соединение с клиентом версии 3.23, т.е. поэтому сервер ожидает старый способ соединения. В конфигурационном файле my.ini имеется опция old-passwords, которая переводит новые сервера в режим работы старых (в плане аутентификации). Однако, для клиентов такого режима вроде нет, т.е. нужно просто использовать старые библиотеки.

  Ответить  
 
 автор: larush2   (08.02.2011 в 15:14)   письмо автору
 
   для: cheops   (08.02.2011 в 14:51)
 

библиотека у меня есть на старом серваке, я работаю под Виндой, так что не проблема перекинуть... Больше ничего не нарушится, ведь есть приложения уже рботающие, не хотелось бы их ломать

  Ответить  
 
 автор: Trianon   (08.02.2011 в 15:49)   письмо автору
 
   для: 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-логинов.
( У меня несколько - у Вас вполне может оказаться одна.)
Каких то проблем совместимости мне это пока не доставило.

  Ответить  
 
 автор: larush2   (09.02.2011 в 09:11)   письмо автору
 
   для: Trianon   (08.02.2011 в 15:49)
 

Хозяин не хочет обновлять весь комлект Denwer, боится что не подхватятся все приложения. Я его понимаю, не он автор проекта. Как сделать так (что куда поставить), чтобы обновить либо MySQL, либо какую-то из его библиотек не затрагивая ни конфигураций ни базы данных ?

Я у себя на сервере где расположен скрипт для коннекта к удаленной БД поставил библиотеку libmysql.dll со старого сервера- не помогло, не подключаюсь к удаленному серверу.

  Ответить  
 
 автор: Trianon   (09.02.2011 в 10:41)   письмо автору
 
   для: larush2   (09.02.2011 в 09:11)
 

Пардон, а при чем здесь денвер?

Он для тестирования на локальной машине предназначен, а не чтобы в интернет выходить (и неважно, в роли клиента или сервера).

  Ответить  
 
 автор: larush2   (09.02.2011 в 10:48)   письмо автору
 
   для: Trianon   (09.02.2011 в 10:41)
 

на 2-х машинах в разных городах (А и Б) развернуты пакет Денвера под Виндой. На одной (Старый пакет, MySQL 3 версии, город А) собирается информация и рисуются какие-то графики загрузки. Поставлена задача- на второй (другой владелец, новый пакет Денвера, MySQL 5 версии, более мощный сервер, город Б) сделать сайт, часть информации которого будет браться с первого сервака. Так вот, при загрузке странички, размещенной на втором сервере (Б), производится коннект к БД, размещнной на первом сервере (А). К слову, рядом со вторым сервером есть еще один, на котором развернут старый пакет Денвера (тоже в городе Б), так вот скрипт коннекта к БД города А на старом пакете Денвера работает нормально. А тот-же скрипт, расположенный на новом пакете в городе Б выдает ошибку, что приводил выше.
Вот подробно описал... Что посоветуете ?

  Ответить  
 
 автор: Trianon   (09.02.2011 в 10:58)   письмо автору
 
   для: larush2   (09.02.2011 в 10:48)
 

1. получать данные не по mysql-client-server-протоколу, как-то по-другому. По http, например.
2. убрать денверы с production-машин, заменив их честно развернутыми серверами.
3. сменить платформу с windows на более устойчивую.

  Ответить  
 
 автор: larush2   (09.02.2011 в 11:07)   письмо автору
 
   для: Trianon   (09.02.2011 в 10:58)
 

1 это не коммерческие сайты, руководство напрягло, создали... нет выделенных админов, знающих более устойчивые системы.
2 я прошу совета как моему скрипту получить информацию из БД, лежащей удаленно, при условии что не идет коннект. Если есть другой вариант-подтолкните, пойду читать. Но мне не нужна скачивать всю БД, а только обновления за 30 минут, это же логичнее...
3 Может подскажет кому из понимающих- с запозданием, но я посмотрел какя версия MySQL стоит на старом серваке, оказалось что не такая уж и старая - 5,0,45 , и скрипт с него работает ! Только там нет блока mysqlnd... На "новом" mysqlnd 5.0.5-dev - 081106 - $Revision: 289630 $ и скрипт не срабатывает....

  Ответить  
 
 автор: Trianon   (09.02.2011 в 11:18)   письмо автору
 
   для: larush2   (09.02.2011 в 11:07)
 

1. а как оказалось, что версия сервера внезапно выросла с 3-й до 5-й?
Там все же апгрейд провели?

2. что мешает обращаться к серверу А по http-протоколу?
К отдельному скрипту, на нем для этой цели специально размещенному?

  Ответить  
 
 автор: larush2   (09.02.2011 в 11:36)   письмо автору
 
   для: Trianon   (09.02.2011 в 11:18)
 

1) про версии... на сервере А стоит 3 версия, мне прислали вывод phpinfo, а вот на "старом" в городе Б- 5,0,45 (я ее не смотрел раньше, видать эта версия была уже давно, а на удаленном еонце лет 5 как не меняли ничего) а на "новом" в городе Б 5,0,5.
2) обратиться по http - имеется в виду получить страничку и распарсить ее ? Мне кажется это совсем уж "на коленке" и к тому же, на страничке рисутся графики, а мне нужны циферьки, не думаю что там будут заморачиваться и делать для меня новые страницы.

  Ответить  
 
 автор: Trianon   (09.02.2011 в 11:52)   письмо автору
 
   для: 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
На взаимодействии удаленного сервера с его основными старыми клиентами это не скажется никак - тамошний администратор может не опасаться. Ну если только лишних прав на Ваш эккаунт не навешает.

Не убежден в повторяемости результата впрочем.

  Ответить  
 
 автор: larush2   (10.02.2011 в 12:27)   письмо автору
 
   для: 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 - коннект не идет
Мне нужно закоонектиться к удаленной БД со второго сервера города Б.
Ничего не подсказывает направление поиска ?

Временно мы сняли пароль с юзера- работает.

  Ответить  
 
 автор: Trianon   (10.02.2011 в 12:50)   письмо автору
 
   для: 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 к серверу А делаются через тот же эккаунт, через который идет успешное подключение внутри рамок машины А, или через какой-то другой?

Если что-то непонятно в моих фразах, не стесняйтесь переспросить.
Я всё поясню.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования