понедельник, 27 ноября 2017 г.

mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: YES) when trying to connect

Во время настройки резервного копирования на новом сервере столкнулся с ошибкой, которая и является темой сообщения.
FreeBSD 11.1, MySQL 5.7, валидный пользователь, конструкция

mysqldump -uroot -p моя_база > backup.sql

работает, как проложено,

mysqldump -uroot -pмой_пароль моя_база > backup.sql

говорит:
mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: YES) when trying to connect.
Запускаю от имени рута чтоб не возникало вопросов с правами.
Конструкция

mysqldump -uroot --password=мой_пароль моя_база > backup.sql

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

mysqldump -uroot --password='мой_пароль' моя_база > backup.sql

сработало!
Проверяю

mysqldump -uroot -p'мой_пароль' моя_база > backup.sql

тоже работает!
Одним словом похоже это новая баго-фича в сборке MySQL5.7 for FreeBSD.

PS. И да, напоминаю, что правильный путь, это проковырять исходники и пересобрать мускул!

PS2. По зрелому размышлению, пришел к выводу, что возможно это никакой не баг:
начиная с версии MySQL 5.7 политика паролей по умолчанию требует пароля с минимум 8 символов, из них минимум 1 буква верхнего регистра, 1 цифра и 1 спецсимвол, именно наличие спецсимвола и требует экранирования пароля кавычками. Я не стал переопределять политику паролей, а перегенерировал с подгонкой под требования, поэтому столкнулся с данной проблемой, но судя по поиску в гугле я не одинок, потому надеюсь, что кому то будет полезно.

1 комментарий:

  1. Это - бережно хранимая на протяжении многих лет багофича. Спасибо за подсказку, оан выручила меня при бэкапепоследней вресии MySQL из докер-контейнера

    ОтветитьУдалить