В старых версиях MySQL, если вы забыли или потеряли пароль root для MySQL, вы можете просмотреть текущий пароль в файле my.cnf.
В современных версиях MySQL и MariaDB этот трюк не сработает.
Давайте посмотрим, как сбросить пароль root в MySQL и MariaDB в дистрибутивах Linux (в этом примере используется CentOS 7).
Способ сброса пароля root в MySQL довольно прост:
- Вам необходим доступ оболочки к консоли сервера Linux и привилегии root (или учетная запись sudo);
- Вам нужно остановить демон MySQL и запустить его с помощью специального ключа;
- Сбросьте пароль root из командной строки MySQL;
- Перезапустите службу MySQL.
Подключитесь к консоли сервера Linux (например, через SSH) и отобразите номер текущей версии MySQL:
$mysql –version
Система отобразит сообщение с номером версии БД. Например,
mysql Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper
mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
Теперь вам нужно остановить демон базы данных. Для MySQL:
$sudo systemctl stop mysql
Для MaridDB
$sudo systemctl stop mariadb
Убедитесь, что процесс mysql (mariadb) остановлен:
$ps aux | grep mysql
Если все еще запущены процессы mysql, вам нужно заставить их прекратить использовать командой:
$sudo killall mysqld
Теперь вам нужно запустить MySQL в безопасном режиме без загрузки таблиц грантов и с отключенным доступом к сети (по соображениям безопасности):
$mysqld_safe --skip-grant-tables --skip-networking
Теперь вы можете подключиться к серверу с помощью MySQL-клиента без пароля:
$mysql -u root
В современных версиях MySQL команда ALTER USER используется для изменения пароля.
Но это не работает, если таблица привилегий отключена. Перезагрузите таблицу привилегий:
mysql> FLUSH PRIVILEGES;
Теперь вам нужно сбросить пароль root. В MySQL 5.7.6 и MariaDB 10.1.20 и более новых версиях используйте следующую команду:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewP@ssw0rd';
В предыдущих версиях MySQL и MariaDB использовалась команда:
mysql>SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewP@ssw0rd');
Вы также можете сбросить пароль root с помощью следующих команд:
mysql> use mysql; mysql> update user set password=PASSWORD("NewP@ssw0rd") where User='root'; mysql> flush privileges; mysql> quit
mysql -u root Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 39 MariaDB [(none)]> use mysql; Database changed MariaDB [mysql]> update user set password=PASSWORD("NewP@ssw0rd") where User='root'; Query OK, 3 rows affected (0.00 sec) Rows matched: 3 Changed: 3 Warnings: 0 MariaDB [mysql]> flush privileges; Query OK, 0 rows affected (0.00 sec) MariaDB [mysql]> quit Bye
Осталось перезапустить сервер MySQL в обычном режиме с помощью команд:
$sudo killall mysqld $sudo service mysqld start
Теперь вы можете подключиться к MySQL с новым паролем:
$mysql -u root -p Enter password: Welcome to the MySQL monitor