Home » Linux » Смена (забытого) пароля пользователя MySQL в командной строке Linux

Смена (забытого) пароля пользователя MySQL в командной строке Linux

Задача вполне ясна и десятки раз описана в других источниках, но я решил сделать руководство для себя на примере Ubuntu 14.04. Начну с наиболее сложного случая — смены забытого пароля root.

Случай 1. Нужно восстановить забытый пароль root.

Входим в систему с правами root. Останавливаем сервер MySQL, если он запущен. Это можно сделать либо командой service:

# service mysql stop

либо командой stop:

# stop mysql

Последняя команда удобна тем, что по двойному табу после stop можно увидеть список запущенных в настоящий момент серверов: если запись mysql среди них отсутствует, то это значит, что сервер MySQL не запущен и останавливать нечего.

Теперь запустим MySQL-сервер в safe-режиме с опцией --skip-grant-tables:

# mysqld_safe --skip-grant-tables &
[1] 2515
# 151111 13:31:50 mysqld_safe Can't log to error log and syslog at the same time. Remove all --log-error configuration options for --syslog to take effect.
151111 13:31:50 mysqld_safe Logging to '/var/log/mysql/error.log'.
151111 13:31:51 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

После нажатия на Enter и появления результатов выполнения команды мы перейдём в режим ожидания, выйти из которого можно повторным нажатием на Enter. Тем самым мы запустим сервер в фоновом режиме (знак амперсанда & в конце строки) и вернёмся в консоль.

В приведённом выше примере сервер ругается, что не может одновременно писать в собственный error.log и syslog. На это можно не обращать внимания, либо указать при запуске опцию --skip-syslog.

Если вы забыли поставить амперсанд в конец строки, то сервер запустится в режиме foreground и повторным нажатием на Enter вы не сможете вернуться в консоль. Для перевода сервера в фоновый режим (background) и возвращения в консоль необходимо нажать Ctrl-Z.

Проверим состояние сервера:

# pgrep -l mysql
2515 mysqld_safe
2875 mysqld

Здесь демон mysqld запущен как дочерний процесс mysqld_safe.

Теперь мы можем подключиться к серверу MySQL под root-ом без пароля:

# mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or \g.
...
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

Переходим в базу под названием «mysql», где хранятся данные о всех пользователях:

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql>

Устанавливаем новый пароль для root, обновляем полномочия и выходим из сеанса:

mysql> update user set password=PASSWORD("xxxxxxxxx") where User='root';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye

Теперь необходимо выйти из режима safe и перезапустить сервер MySQL в обычном режиме. Мне не удалось это сделать традиционными средствами Ubuntu с помощью команд service и stop, поэтому я убивал процессы с помощью терминальных сигналов:

# killall -9 mysqld_safe mysqld
[1]+ Убито mysqld_safe --skip-grant-tables
# start mysql

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

Случай 2. Пароль пользователя MySQL известен, но его нужно поменять.

Это самый простой случай, для которого, в частности, предусмотрена утилита mysqladmin. Синтаксис однострочной команды по смене текущего пароля пользователя anton следующий:

# mysqladmin -u anton -p current_pass password new_pass

где current_pass — это текущий пароль, а new_pass — новый. При этом пробелы между параметрами авторизации -u/-p и их значениями допускается не ставить, хотя это понижает читабельность:

# mysqladmin -uanton -pcurrent_pass password new_pass

Обратите внимание на то, что принцип работы утилиты mysqladmin построен сперва на аутентификации и авторизации того, кто её вводит (параметры -u и -p), а затем выполнении необходимого действия, в нашем случае password. К сожалению, в интернете много ошибочных примеров её использования именно для смены паролей.

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Do NOT follow this link or you will be banned from the site!