Поиск по сайту:

Как сбросить пароль 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.

Подключитесь к серверу 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