Как сбросить пароль root-пользователя MySQL в Linux
Вы забыли свой пароль root-пользователя MySQL? Не беспокойся! В этом руководстве описаны шаги по сбросу пароля пользователя root MySQL в операционных системах Linux. Приведенные ниже шаги также должны помочь сбросить пароль root MariaDB.
Мы уже публиковали руководство по сбросу пароля пользователя root (администратора) в более старых версиях MySQL, например MySQL 5.7. Но этот метод не работал с новой версией MySQL 8. Если вы хотите сбросить пароль root в MySQL 8, воспользуйтесь любым из двух обходных путей, приведенных ниже.
Сброс пароля root-пользователя MySQL в Linux
Как я уже упоминал, мы можем сбросить пароль root MySQL двумя способами.
- Общий способ,
- Использование системной переменной
init_file
.
1. Общий способ сброса пароля root MySQL
Этот метод будет работать независимо от используемой вами операционной системы. Предупреждаю вас, что это менее безопасный способ, поскольку мы собираемся запустить сервер MySQL с помощью -- опция пропуска таблиц
. Это дает любому, у кого есть доступ к серверу, неограниченный доступ ко всем базам данных.
Сначала остановите службу MySQL с помощью команды:
sudo systemctl stop mysql
Вы можете проверить, действительно ли MySQL остановлен, с помощью команды:
sudo systemctl status mysql
Пример вывода:
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Sat 2021-05-29 11:53:08 UTC; 8s ago
Process: 560 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Process: 666 ExecStart=/usr/sbin/mysqld (code=exited, status=0/SUCCESS)
Main PID: 666 (code=exited, status=0/SUCCESS)
Status: "Server shutdown complete"
May 29 10:08:33 ubunt4.localdomain systemd[1]: Starting MySQL Community Server…
May 29 10:08:37 ubunt4.localdomain systemd[1]: Started MySQL Community Server.
May 29 11:53:07 ubunt4.localdomain systemd[1]: Stopping MySQL Community Server…
May 29 11:53:08 ubunt4.localdomain systemd[1]: mysql.service: Succeeded.
May 29 11:53:08 ubunt4.localdomain systemd[1]: Stopped MySQL Community Server.
Итак, служба MySQL не запущена.
Теперь перезапустите сервер MySQL без проверки разрешений, выполнив следующую команду:
sudo mysqld_safe --skip-grant-tables --skip-networking &
Здесь опция --skip-grant-tables
позволяет вам подключиться к серверу базы данных mysql без пароля и со всеми привилегиями. Параметр --skip-networking
используется для предотвращения подключения других клиентов к серверу базы данных. Символ амперсанда (&
) используется для запуска команды в фоновом режиме, поэтому вы можете вводить другие команды, указанные на последующих шагах. Помните, что приведенная выше команда опасна, и ваш сервер базы данных становится небезопасным и уязвимым для угроз безопасности. Вам следует выполнять эту команду только на короткий период времени, чтобы сбросить пароль.
Вы можете увидеть следующую ошибку:
2021-05-29T12:00:19.991826Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2021-05-29T12:00:19.996942Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
Если вы видите эту ошибку, создайте недостающий каталог (т. е. /var/run/mysqld
) и установите для него соответствующие разрешения, как показано ниже.
sudo mkdir -p /var/run/mysqld
sudo chown -R mysql:mysql /var/run/mysqld
Теперь попробуйте еще раз запустить сервер MySQL без пароля и с правами root:
sudo mysqld_safe --skip-grant-tables --skip-networking &
Затем подключитесь к серверу MySQL с помощью команды:
mysql
Вы попадете в приглашение оболочки MySQL.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 8.0.25-0ubuntu0.20.04.1 (Ubuntu)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
Поскольку мы вошли в систему без загрузки таблиц разрешений (поскольку мы использовали опцию --skip-grant-tables
), мы не можем использовать команду ALTER USER
для сброса пароля. Итак, давайте загрузим таблицы грантов с помощью команды:
mysql> FLUSH PRIVILEGES;
Теперь выполните следующую команду, чтобы обновить пароль пользователя root MySQL:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'P@ssw0rd123#@!';
В приведенной выше команде замените P@ssw0rd123#@!
своим собственным паролем. Обратите внимание: если включен компонент Проверка пароля
, вы должны использовать надежный пароль.
Наконец, выйдите из командной строки MySQL:
mysql> exit
Сброс пароля root-пользователя MySQL в Linux
Наконец, выключите работающий сервер базы данных, который вы запустили ранее, с помощью опции --skip-grant-tables
. Для этого запустите:
sudo mysqladmin -u root -p shutdown
Вам будет предложено ввести пароль sudo
, а затем пароль пользователя MySQL root
, который вы установили на предыдущем шаге.
[sudo] password for ostechnix:
Enter password:
2021-05-29T12:09:38.425737Z mysqld_safe mysqld from pid file /var/lib/mysql/ubunt4.localdomain.pid ended
[1]+ Done sudo mysqld_safe --skip-grant-tables --skip-networking
Если приведенная выше команда не работает, найдите файл .pid
, содержащий идентификатор процесса сервера. Файл PID обычно доступен в /var/lib/mysql/
или /var/run/mysqld/
. > или /usr/local/mysql/data/
в зависимости от вашего дистрибутива, имени хоста и конфигурации. Обычно имя файла имеет расширение .pid и начинается либо с mysqld
, либо с имени хоста вашей системы.
В моем случае это "/var/lib/mysql/ubuntuserver.pid"
.
Итак, я остановил экземпляр сервера базы данных командой:
sudo kill `/var/lib/mysql/ubuntuserver.pid`
Используйте обратную галочку, чтобы указать путь к файлу.
Мы также можем найти pid MySQL с помощью команд ps
и grep
, как показано ниже:
ps ax | grep mysql
Пример вывода:
1930 pts/0 S 0:00 sudo mysqld_safe --skip-grant-tables --skip-networking
1931 pts/0 S 0:00 /bin/sh /usr/bin/mysqld_safe --skip-grant-tables --skip-networking
2091 pts/0 Sl 0:28 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-grant-tables --skip-networking --log-error=/var/log/mysql/error.log --pid-file=ubuntuserver.pid
Вручную убейте его, как показано ниже:
sudo kill <PID>
Или убейте все службы MySQL:
sudo killall mysql
Теперь запустите службу MySQL в обычном режиме, используя команду:
sudo systemctl start mysql
Теперь войдите на сервер MySQL с новым паролем:
mysql -u root -p
Пример вывода:
Подключитесь к серверу MySQL с новым паролем root.
2. Сброс пароля root MySQL с помощью файла паролей.
Другой способ сбросить пароль root MySQL — использовать системную переменную init_file
.
Остановить службу MySQL:
sudo systemctl stop mysql
Создайте текстовый файл, например ostechnix.txt
:
vi ostechnix.txt
Добавьте в него следующую строку:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'P@ssw0rd123#@!';
Замените P@ssw0rd123#@!
на свой пароль в строке выше. Если вы включили плагин Проверка пароля
, вам следует указать надежный пароль. Сохраните и закройте файл.
Теперь запустите сервер MySQL с системной переменной init_file
, которая указывает на файл ostechnix.txt
:
sudo mysqld --init-file=/home/sk/ostechnix.txt &
Эта команда выполнит содержимое файла ostechnix.txt
и обновит пароль учетной записи root@localhost
новым паролем, указанным в файле ostechnix.txt
. и, наконец, запустите сервер MySQL.
Теперь остановите и перезапустите сервер MySQL в обычном режиме:
sudo systemctl stop mysql
sudo systemctl start mysql
Наконец, удалите файл паролей, то есть ostechnix.txt
.
rm /home/sk/ostechnix.txt
Теперь вы можете войти на сервер MySQL с новым паролем, используя команду:
mysql -u root -p
Мы также опубликовали немного другой метод сброса пароля root MySQL. Дополнительные сведения см. в следующем руководстве:
>> How To Reset Root Password In MySQL 8 On Ubuntu Linux
Заключение
В этом руководстве мы узнали два разных способа сброса забытого пароля пользователя root MySQL в операционных системах Linux. Если вы потеряли пароль пользователя учетной записи администратора базы данных, вы можете легко сбросить его за пару минут.
Ресурс:
- Справочное руководство по MySQL 8.0