Уловка 22 при переходе от старых паролей и mysql_upgrade [duplicate]

У меня есть древняя база данных MySQL, которую я держал очень долгое время, вероятно, около 14 лет.
По-видимому, я пропустил запуск mysql_upgrade на нем давно назад, возможно, во время обновления с 4.x до 5.x (и с тех пор).
Теперь, после вчерашнего обновления до 5.6.22 (с 5.5.x), я больше не могу войти в систему и, похоже, не могу решить проблему.
Судя по всему, хэши паролей старого образца устарели уже более 10 лет, но я никогда не видел никаких предупреждений об этом, пока они не перестали работать только сейчас.

Первым признаком того, что что-то не так, было следующее:

mysqldump: Got error: 2049: Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled) when trying to connect

Я получаю ту же ошибку, используя mysql -u root -p .
Я справился с этим, используя параметр - skip-secure-auth для команды mysql. После этого в документации говорится, что вам следует обновить свой пароль :

SET old_passwords = 0;
UPDATE mysql.user SET plugin = 'mysql_native_password',
Password = PASSWORD('DBA-chosen-password')
WHERE (User, Host) = ('user1', 'localhost');
FLUSH PRIVILEGES;

Это не удается:

ERROR 1054 (42S22): Unknown column 'plugin' in 'field list'

Решение этой ошибки , похоже, заключается в запуске mysql_upgrade , который обновляет таблицу mysql.user, добавляя столбец плагина.Однако , который также не работает , с этой замечательной ошибкой:

# mysql_upgrade -u root -p
Enter password: 
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
FATAL ERROR: Upgrade failed

Я предполагаю, что это потому, что нет опции - skip-secure-auth для mysql_upgrade , поэтому он не может войти в систему.
Я пытался отключить безопасную аутентификацию для сервера, но, если я сделал это правильно, это не помогло. (Возможно, потому что mysql_upgrade, поставляемый с 5.6.x, использует его по умолчанию и не позволяет вам его отключить?)

Есть ли у кого-нибудь решение этой проблемы? Я не против таких вещей, как временное отключение паролей и т. Д. При решении этой проблемы; сервер доступен только с localhost, и я единственный локальный пользователь.

3
задан 11 February 2015 в 10:56
1 ответ

Тема, на которую Ян ссылался в комментариях, решила проблему.

Выполнив эти инструкции, я перезапустил сервер и попытался войти в систему как обычно (без - skip-secure-auth ), что сработало.
Затем я запустил mysql_upgrade -u root -p , который также сработал.После этого и перезапуска mysqld все, кажется, работает так, как должно, и мой пользователь root имеет "новый" пароль (длинный хэш из 41 символа, а не из 16).

После исправления пользователя root вы сможете для миграции других пользователей, как описано в документации MySQL , в которой изложены шаги как для определения паролей, которые вам нужно обновить, так и того, как это сделать.

1
ответ дан 3 December 2019 в 07:27

Теги

Похожие вопросы