вторник, 2 августа 2016 г.

Решение проблемы подключения к старой версии MySQL из новой версии PHP
(old insecure authentication)

На новом сервере CentOS7 я использую PHP 5.6.
За данными необходимо обращаться к старому серверу с базой данных MySQL 5.1
При попытке установить соединение с сервером получаем ошибку:
mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. 
Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD('your_existing_password'). 
This will store a new, and more secure, hash value in mysql.user. 
If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file

Для решения проблемы на сервере MySQL со старой версией авторизации нужно сделать следующее:
1) Зайти на сервер со старой версией MySQL через phpmyadmin
2) Убедиться, что кеш пароля в этой базе имеет всего 16 бит. Для этого выполнить команду:
SELECT LENGTH(PASSWORD('youpasswd'));
В ответ должны получить 16.
3) Зайти в базу mysql, в таблицу user.
Найти здесь нашего пользователя.
4)Заменить кеш пароля пользователя (поле Password)
Стандартный пароль этой старой базы к примеру имеет вид:
0a622cbe0ef52f17
Новый кеш пароль с большим кешем должен иметь например такой вид:
*0FDBA6287D54E65C05D50D6D3E792A1B8FEBD9DB
Новый длинный кеш пароля можно узнать создав нового пользователя в новой версии MySQL 5.5 на другом сервере.
А потом скопировав этот кеш с нового сервера в старый.
5) Выполнить команду SQL
flush privileges;