Как сбросить root-пароль в MySQL
Если вы забыли или потеряли пароль от сервера баз данных, его можно сбросить. Для этого вам понадобится root-доступ к серверу по SSH. Инструкция подойдет для следующих версий ПО:
- MySQL 8.0 и более ранние версии;
- Ubuntu 16.04, 18.04, 20.04.
В статье мы расскажем, как в MySQL сбросить пароль root.
В более поздних дистрибутивах к MySQL можно подключиться без ввода пароля. Такую возможность дает плагин auth_socket. Доступ без пароля зависит от того, какой пользователь ОС подключается к MySQL. По умолчанию доступ имеет только root-пользователь.
Чтобы проверить, какой у вас доступ, подключитесь к серверу и выполните команду:
mysql
Если настроен доступ без пароля, на экране вы увидите примерно следующее:

Если на MySQL настроен доступ по паролю, вы столкнётесь с ошибкой:

Доступ для пользователя root без использования пароля запрещён
Если доступ без пароля не настроен, а пароль утерян, воспользуйтесь нашей инструкцией.
Как сбросить root-пароль MySQL
Чтобы выполнить сброс пароля MySQL, подключитесь к вашему серверу по SSH и следуйте инструкции:
Откройте файл параметров MySQL командой:
nano /etc/mysql/my.cnf
Добавьте в конец файла три параметра:
[mysqld] skip-grant-tables skip-networking

MySQL reset root password Если директива [mysqld] уже прописана в файле, добавьте только skip-grant-tables и skip-networking:
- skip-grant-tables — параметр, который пропускает проверку прав. Это позволит подключиться к MySQL без пароля любому пользователю.
- skip-networking — параметр, который запретит удалённые подключения к серверу БД на время сброса пароля.
Чтобы сохранить изменения, нажмите CTRL+S. Затем закройте редактор сочетанием клавиш CTRL+X.
Чтобы запустить MySQL с нужными параметрами, перезапустите сервер БД командой:
systemctl restart mysql.service
Как изменить (сбросить) root пароль в MySQL

Довольно часто происходит такая ситуация, что пароль для учетной записи root в MySQL необходимо восстановить, поменять или сбросить. Хорошо, если он известен, но бывают случаи, когда пароль был утерян или неизвестен с самого начала. В данной статье пойдет речь о том, как этот пароль восстановить, имея доступ к серверу, на котором запущен mysql-server для обоих случаев, когда пароль о учетной записи root ИЗВЕСТЕН и НЕ ИЗВЕСТЕН.
Как поменять пароль root в MySQL
Если пароль root ИЗВЕСТЕН
Возьмем самую простую ситуацию, когда пароль от учетной записи root вам известен и все что нужно сделать, это просто его поменять. Чтобы задать новый пароль для учетной записи root, необходимо проделать следующие действия:
В том случае, если вы пользуетесь каким-либо веб-интерфейсом, например, phpMyAdmin, то тогда вы можете пропустить пункт 1 и сразу же выполнить запрос для нужной версии MySQL (пункт 2) прямо из интерфейса phpMyAdmin (вкладка SQL).
1) Подключаемся в консоль MySQL сервера с правами root (не забываем ввести пароль, после появления соответствующего запроса):
mysql -u root -p
2) Меняем пароль для пользователя root: Для MySQL версий 5.7.6 и новее (5.7.7, 5.7.8. )
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NEW_PASSWORD';
Для MySQL версий 5.7.5 и старее (5.7.4, 5.7.3. )
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NEW_PASSWORD');
NEW_PASSWORD — это пароль, который вам необходимо поменять на свой собственный.
В результате выполнения данной команды, мы должны получить вот такой вывод в консоли:
Query OK, 0 rows affected (0.01 sec)
В том случае, если указанные выше команды по какой то причине не сработали, вы можете воспользоваться следующим запросом:
UPDATE mysql.user SET authentication_string=PASSWORD('NEW_PASSWORD'), plugin='mysql_native_password' WHERE User='root';
В результате выполнения данной команды, мы должны получить вот такой вывод в консоли:
Query OK, 1 row affected, 1 warning (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 1
3) Перезагружаем привилегии, чтобы изменения вступили в силу:
flush privileges;
4) Для выхода из консоли MySQL сервера выполняем команду выхода:
exit;
После этого, пароль должен поменяться.
Если пароль root НЕ ИЗВЕСТЕН
Если вы не знаете текущий пароль root (потеряли, забыли) в MySQL, то придется пойти чуть более сложным путем, чем описанные действия выше: 1) Останавливаем mysqld:
sudo service mysql stop
2) Проверяем, что нет запущенных процессов mysqld:
ps -eaf|grep mysqld
Если все нормально, то вывод команды должен состоять лишь из одной строки, примерно такого содержания:
root 24902 1530 0 11:41 pts/0 00:00:00 grep --color=auto mysqld
3) Создаем каталог /var/run/mysqld для запуска mysqld в safe режиме из консоли
sudo mkdir /var/run/mysqld
4) Делаем владельцем данного каталога пользователя mysql (чтобы не было проблем с правами)
sudo chown mysql /var/run/mysqld
5) Запускаем MySQL в ручном режиме из консоли, пропуская проверку прав (опция —skip-grant-tables). А также отключаем доступ к серверу через TCP/IP (с помощью опци и —skip-networking), чтобы злоумышленник не мог воспользоваться тем, что мы отключили проверку прав пользователей. При использовании данной опции, доступ к серверу становится возможным только через localhost.
sudo mysqld_safe --skip-grant-tables --skip-networking &
В случае успешного запуска, вывод в консоли должен быть примерно таким:
# sudo mysqld_safe --skip-grant-tables --skip-networking & [1] 26152 2019-05-02T14:17:14.807620Z mysqld_safe Logging to syslog. 2019-05-02T14:17:14.815041Z mysqld_safe Logging to '/var/log/mysql/error.log'. 2019-05-02T14:17:14.856418Z mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
6) Подключаемся из консоли к серверу mysqld и выбираем базу данных mysql:
mysql -u root mysql
7) Используем плагин mysql_native_password, иначе в некоторых случаях будем получать ошибку «ERROR 1524 (HY000): Plugin ‘auth_socket’ is not loaded«, а нам это не нужно:
update user set plugin="mysql_native_password";
Вывод в результате выполнения данной команды должен быть примерно таким:
Query OK, 0 rows affected (0.00 sec) Rows matched: 4 Changed: 0 Warnings: 0
8) Перезагружаем привилегии:
flush privileges;
9) Меняем пароль для нужного пользователя, в нашем случае это root: Для MySQL версий 5.7.6 и новее (5.7.7, 5.7.8. )
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NEW_PASSWORD';
Для MySQL версий 5.7.5 и старее (5.7.4, 5.7.3. )
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NEW_PASSWORD');
NEW_PASSWORD — это пароль, который вам необходимо поменять на свой собственный.
В результате выполнения данной команды, мы должны получить вот такой вывод в консоли:
Query OK, 0 rows affected (0.01 sec)
В том случае, если указанные выше команды по какой то причине не сработали, вы можете воспользоваться следующим запросом:
UPDATE mysql.user SET authentication_string=PASSWORD('NEW_PASSWORD'), plugin='mysql_native_password' WHERE User='root';
В результате выполнения данной команды, мы должны получить вот такой вывод в консоли:
Query OK, 1 row affected, 1 warning (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 1
9) После чего, вводим команду exit для отключения:
exit;
10) Выключаем запущенный в ручном режиме Mysqld сервер:
sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown
Если все пройдет успешно, то вывод должен быть примерно таким:
2019-05-02T14:30:03.404615Z mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended [1]+ Done sudo mysqld_safe --skip-grant-tables --skip-networking
Если же команда не сработала и вы получаете вот такую (или любую другую) ошибку:
mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'root'@'localhost' (using password: NO)'
То можно принудительно завершить процесс с помощью следующей команды:
sudo kill `cat /var/run/mysqld/mysqld.pid`
11) Проверяем, что нет запущенных процессов mysqld:
ps -eaf|grep mysqld
Если все нормально, то вывод команды должен состоять лишь из одной строки, примерно такого содержания:
root 24902 1530 0 11:41 pts/0 00:00:00 grep --color=auto mysqld
12) Запускаем Mysql-server в нормальном режиме:
sudo service mysql start
Как изменить root пароль для MySQL
После того, как пароль root пользователя [1] MySQL установлен, его можно изменить. Наиболее простой способ следующий:
- Подключиться по SSH к виртуальному серверу;
- Подключиться к MySQL как пользователь root при помощи команды:
mysql –u root –p
- Затем нажать Enter, указать пароль и снова нажать Enter;
- Выполнить следующие команды:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass'); quit
После этого пароль будет изменён на newpass.
Данный способ также подходит и для изменений паролей других MySQL пользователей. Для этого в вышеуказанной команде необходимо указать пользователя, для которого меняется пароль (например, вместо root@localhost – dovecot@localhost) и новый пароль.
Сброс root-пароля в случае его утери
Если mysql root-пароль был утерян, его можно сбросить следующим образом:
- Подключаемся к VPS с правами root.
- Останавливаем mysql-сервер.
На Debian/Ubuntu для остановки mysql-сервера используется команда
/etc/init.d/mysql stop
service mysql stop
На CentOS/Fedora
/etc/init.d/mysqld stop
service mysqld stop
На CentOS 7
systemctl stop mariadb
- Далее выполняем команду:
mysqld_safe --skip-grant-tables &
- Результат выполнения команды будет примерно следующим:
[1] 5988 Starting mysqld daemon with databases from /var/lib/mysql mysqld_safe[6025]: started
- Подключаемся к mysql с правами root. Поскольку mysql запушен в безопасном режиме, пароль для входа не требуется:
mysql -u root
- Выбираем базу данных mysql:
use mysql;
- Устанавливаем новый mysql root-пароль командой:
update user set password=PASSWORD("новый_root_пароль") where User='root';
- Перезагружаем привилегии:
flush privileges;
- Отключаемся от mysql:
quit;
- Останавливаем и затем вновь запускаем сервер MySQL командами:
Debian/Ubuntu:
/etc/init.d/mysql stop /etc/init.d/mysql start
CentOS/Fedora
/etc/init.d/mysqld stop /etc/init.d/mysqld start
systemctl stop mariadb systemctl start mariadb
- Пробуем подключиться к mysql с новым установленным паролем:
mysql -u root –p
На этом процесс восстановления пароля завершен.
Примечания
- ↑Пароль root пользователя сервера и MySQL могут отличаться друг от друга
Сброс пароля root в MySQL
Доступы к серверам и сервисам нужно тщательно хранить, никому их не передавать и не терять. Но иногда случаются ситуации, когда пароли все-таки теряются или после смены их забывают записать, восстановить такой пароль тоже нет возможности. Если вы забыли пароль от root-пользователя MySQL — не отчаивайтесь, пароль root в MySQL легко сменить.
Важно понимать, что у вас должны быть права администратора на том сервере, где установлен MySQL-сервер. Это может быть либо root-пользователь напрямую, либо доступ через sudo.
Все описанные ниже действия нужно выполнять именно на этом сервере, то есть удаленно сменить пароль от root-пользователя не удастся.
Возможности MySQL в «Облачных базах данных»
Самый простой способ для последних версий
В версиях MySQL, начиная с 5.7, можно логиниться в MySQL от root-пользователя без пароля, если системный пользователь тоже root. Это позволяет подключиться к MySQL как root-пользователь без ввода пароля, а потом изменить его. Это возможно если для пользователя root используется плагин аутентификации auth_socket.
sudo mysql
Вы подключитесь к MySQL-серверу как root-пользователь. Теперь можно сбросить пароль одной командой. Вместо 12345 укажите свой пароль:
ALTER USER 'root'@'localhost' IDENTIFIED BY '12345';
Это самый простой способ, доступный в последних версиях MySQL при использовании плагина аутентификации auth_socket.
Сбросить пароль root в MySQL с помощью SKIP-GRANT-TABLES
В этом способе мы отключим проверку полномочий при запуске MySQL-сервера, и тогда подключиться сможет вообще любой пользователь без указания пароля. Важно, чтобы на это время сервер не был доступен по сети для внешних запросов, иначе к нему сможет подключиться любой желающий.
Для начала нужно остановить сервер:
sudo systemctl stop mysql
Теперь отредактируем service-файл, который запускает MySQL. Выполним команду:
sudo systemctl edit mysql
Откроется текстовый редактор, в котором мы можем переопределить дефолтный файл запуска. Вставим в него следующую конфигурацию:
[Service] ExecStart= ExecStart=/usr/sbin/mysqld --skip-grant-tables --skip-networking
Мы указываем, что сервер нужно запустить без проверки grant-таблиц, а также ограничить подключения по сети. Сохраните файл и выйдите из текстового редактора. Теперь нужно обновить конфигурацию systemd, чтобы он учитывал наш новый конфиг, а затем можно запустить сервер:
sudo systemctl daemon-reload sudo systemctl start mysql
Теперь мы можем залогиниться под учетной записью root без ввода пароля. Для этого нам даже не нужно быть root или использовать sudo:
mysql -u root
Так как мы запустили сервер без проверки полномочий, сначала нам нужно применить таблицу привилегий, чтобы мы могли записать в нее новый пароль. Вместо 12345 укажите свой пароль:
FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY '12345';
Выходим из MySQL и возвращаем настройки запуска по умолчанию. Для этого нам нужно удалить service-файл для systemd, перечитать конфигурацию и снова запустить сервер БД:
sudo systemctl revert mysql sudo systemctl daemon-reload sudo systemctl restart mysql
Все, мы перезапустили MySQL-сервер и теперь можем залогиниться с новым паролем.
Сбросить пароль с помощью init-file
Еще один способ — написать init-файл. Это файл, который MySQL считывает перед запуском. В нем можно указать различные команды, в том числе установить пароль любого пользователя.
Создайте простой текстовый файл, например в вашей домашней директории. Назвать его можно как угодно. Вставьте в этот файл команду для смены пароля. Вместо 12345 укажите свой настоящий пароль:
ALTER USER 'root'@'localhost' IDENTIFIED BY '12345';
Теперь нужно остановить MySQL-сервер, чтобы при следующем запуске ему можно было указать путь к нашему init-файлу. Выполните команду:
sudo systemctl stop mysql
Теперь снова запустим сервер, при этом указав путь к созданному нами файлу:
sudo mysqld --user=mysql --init-file=/path/to/init-file &
После запуска этой команды в консоли отобразится PID этого процесса, например 7508. Значит все прошло успешно, MySQL-сервер запустился и выполнил нашу команду. Теперь нам нужно его остановить, удалить init-файл и запустить сервер обычным способом:
sudo kill -15 7508 rm /path/to/init-file sudo systemctl start mysql
Заключение
Мы рассмотрели три разных способа сброса пароля для root-пользователя. Теперь MySQL-сервер работает в стандартном режиме, а у вас есть root-доступ к базе данных.
Создание нового пользователя и настройка прав в MySQL
ALTER TABLE — изменение таблицы в SQL
Зарегистрируйтесь в панели управления
И уже через пару минут сможете арендовать сервер, развернуть базы данных или обеспечить быструю доставку контента.
Читайте также:
Инструкция
Как создать 100 серверов в облаке за минуту? Работа с OpenStack клиентом
Инструкция
Как создать веб-приложение на базе Telegram Mini Apps
Инструкция
Что делает команда chmod и как ее использовать в Linux