MySQL (Root User Password №2)

Теги

 В этой заметке описаны шаги по сбросу пароля (Password) root пользователя MySQL в операционных системах Linux. 

Мы уже публиковали заметки по сбросу пароля (Password) пользователя root (администратора) в других версиях MySQL. Этот метод будет работать независимо от используемой вами операционной системы. Предупреждаю, что это менее безопасный способ, потому что мы собираемся запустить сервер MySQL с опцией --skip-grant-tables. Это даст любому пользователю, кто имеет доступ к серверу, неограниченный доступ ко всем базам данных.

Сначала остановите службу MySQL с помощью команды:

$ sudo systemctl stop mysql

Вы можете проверить, действительно ли MySQL остановлен, с помощью команды:

$ sudo systemctl status mysql

Теперь перезапустите сервер MySQL без проверки разрешений, выполнив следующую команду:

$ sudo mysqld_safe --skip-grant-tables --skip-networking &

Здесь опция --skip-grant-tables позволяет подключаться к серверу баз данных mysql без пароля и со всеми привилегиями. Опция --skip-networking используется для предотвращения подключения других клиентов к серверу баз данных. Символ амперсанда (&) используется для запуска команды в фоновом режиме, чтобы вы могли набирать другие команды, приведенные в последующих шагах. Пожалуйста, имейте в виду, что вышеуказанная команда опасна, и ваш сервер баз данных станет небезопасным и уязвимым для угроз безопасности. Вы должны выполнять эту команду только в течение короткого периода времени для сброса пароля.

Вы можете увидеть следующую ошибку:

2021-06-11T12:00:19.991826Z mysqld_safe Logging to '/var/log/mysql/error.log'.

2021-06-11T12: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.

Поскольку мы вошли в систему без загрузки таблиц грантов (потому что мы использовали опцию --skip-grant-tables), мы не можем использовать команду ALTER USER для сброса пароля. Поэтому давайте загрузим таблицы грантов с помощью команды:

mysql> FLUSH PRIVILEGES;

Теперь выполните следующую команду, чтобы обновить пароль пользователя mysql root:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123_fsb_otdel_k_vasilich_123';

В приведенной выше команде замените 123_fsb_otdel_k_vasilich_123 на свой собственный пароль. Обратите внимание, что если включен компонент Validate Password, вы должны использовать надежный пароль.

Наконец, выйдите из mysql:

mysql> exit

Наконец, выключите работающий сервер базы данных, который вы запустили ранее с опцией --skip-grant-tables. Для этого выполните:

$ sudo mysqladmin -u root -p shutdown

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

Если приведенная выше команда не работает, найдите файл .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`

Пожалуйста, используйте обратную галочку, чтобы указать путь к файлу. Мы также можем найти MySQL pid с помощью команд ps и grep, как показано ниже:

$ ps ax | grep mysql

Отключите его вручную, как показано ниже:

$ sudo kill <PID>
$ sudo  killall mysql

Теперь запустите службу MySQL с помощью команды:

$ sudo systemctl start mysql

Теперь войдите на сервер MySQL с новым паролем:

$ mysql -u root -p

Другой способ сбросить пароль mysql root - использовать системную переменную init_file.

$ sudo systemctl stop mysql

Создайте текстовый файл, например, reset_karro.txt:

$ vi reset_karro.txt:

Добавьте в него следующую строку:

ALTER USER 'root'@'localhost' IDENTIFIED BY '123_fsb_otdel_k_vasilich_123';

Замените 123_fsb_otdel_k_vasilich_123 на свой собственный пароль в строке выше. Если у вас включен плагин Validate Password, вам следует указать надежный пароль. Сохраните и закройте файл.

Теперь запустите сервер MySQL с системной переменной init_file, которая указывает на файл reset_karro.txt:

$ sudo mysqld --init-file=/home/sk/reset_karro.txt &

Эта команда выполнит содержимое файла reset_karro.txt и обновит пароль учетной записи root на новый пароль, указанный в файле reset_karro.txt, и, наконец, запустит сервер mysql.

Теперь остановите и перезапустите сервер mysql в нормальном режиме:

$ sudo systemctl stop mysql
$ sudo systemctl start mysql

Наконец, удалите файл c паролем, т.е. reset_karro.txt.

$ rm /home/sk/reset_karro.txt

Теперь вы сможете войти на сервер mysql с новым паролем с помощью команды:

$ mysql -u root -p

Мы также опубликовали немного другой метод сброса пароля MySQL root. Ознакомьтесь со следующим руководством для получения подробной информации.

В этой заметке мы рассмотрели два различных способа сброса забытого пароля root пользователя MySQL в операционных системах Linux. Если вы потеряли пароль пользователя административной учетной записи базы данных, вы можете легко сбросить его за пару минут.


Суперпользователь UNIX-систем имеет логин «root» только по умолчанию и легко переименовывается при необходимости.

 

Последние материалы