TL; DR: чтобы получить доступ к более новым версиям mysql / mariadb после того, как вы являетесь пользователем root, после новой установки вам необходимо находиться в корневой оболочке (т.е. sudo mysql -u root
или mysql -u root
внутри оболочки, запущенной su -
или sudo -i
первой)
Только что выполнив такое же обновление на Ubuntu, у меня была такая же проблема.
Что было странно
sudo /usr/bin/mysql_secure_installation
Примет мой пароль и позволит мне его установить, но я не могу войти в систему как root
через mysql
клиента
Мне пришлось начать мариадб с
sudo mysqld_safe --skip-grant-tables
чтобы получить доступ как root, в то время как все остальные пользователи могут получить доступ нормально.
Глядя на mysql.user
таблицу, я заметил, что для root plugin
столбец установлен на, unix_socket
тогда как для всех других пользователей он установлен на mysql_native_password. Беглый взгляд на эту страницу: https://mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin/ объясняет, что Unix Socket позволяет входить в систему путем сопоставления uid
процесса, запускающего клиента, с процессом пользователя вmysql.user
стол. Другими словами, чтобы получить доступ к mariadb, root
вы должны войти в систему как root.
Разумеется, перезапуск моего демона mariadb с требуемой аутентификацией я могу войти в систему как root с
sudo mysql -u root -p
или
sudo su -
mysql -u root -p
Сделав это, я подумал о том, как получить доступ без необходимости выполнять sudo, а это просто вопрос выполнения этих запросов mysql.
GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;
(замена <password>
желаемый пароль root mysql). Это позволяет использовать пароль для входа в систему для пользователя root.
В качестве альтернативы запустите запрос mysql:
UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin = 'unix_socket';
FLUSH PRIVILEGES;
Изменит учетную запись root на использование пароля для входа без изменения пароля, но это может оставить вас с установкой mysql / mariadb без пароля root.
После любого из этих действий вам необходимо перезапустить mysql / mariadb:
sudo service mysql restart
И вуаля у меня был доступ из личного кабинета через mysql -u root -p
ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ, ЧТО ЭТО УМЕНЬШАЕТ БЕЗОПАСНОСТЬ. Предположительно, разработчики MariaDB выбрали такую работу с корневым доступом по уважительной причине.
Думая об этом, я вполне счастлив, что это произошло, sudo mysql -u root -p
поэтому я возвращаюсь к этому, но я решил опубликовать свое решение, так как я не мог найти его в другом месте.