Как поменять пароль root в mysql
Перейти к содержимому

Как поменять пароль root в mysql

  • автор:

Как сбросить root-пароль в MySQL

Если вы забыли или потеряли пароль от сервера баз данных, его можно сбросить. Для этого вам понадобится root-доступ к серверу по SSH. Инструкция подойдет для следующих версий ПО:

  • MySQL 8.0 и более ранние версии;
  • Ubuntu 16.04, 18.04, 20.04.

В статье мы расскажем, как в MySQL сбросить пароль root.

В более поздних дистрибутивах к MySQL можно подключиться без ввода пароля. Такую возможность дает плагин auth_socket. Доступ без пароля зависит от того, какой пользователь ОС подключается к MySQL. По умолчанию доступ имеет только root-пользователь.

Чтобы проверить, какой у вас доступ, подключитесь к серверу и выполните команду:

mysql

Если настроен доступ без пароля, на экране вы увидите примерно следующее:

Подключение к MySQL без пароля

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

Ошибка при подключении к базе данных через терминал

Доступ для пользователя root без использования пароля запрещён

Если доступ без пароля не настроен, а пароль утерян, воспользуйтесь нашей инструкцией.

Как сбросить root-пароль MySQL

Чтобы выполнить сброс пароля MySQL, подключитесь к вашему серверу по SSH и следуйте инструкции:

Откройте файл параметров MySQL командой:

nano /etc/mysql/my.cnf

Добавьте в конец файла три параметра:

[mysqld] skip-grant-tables skip-networking

Конфигурационный файл MySQL - my.cnf

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

Довольно часто происходит такая ситуация, что пароль для учетной записи 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@localhostdovecot@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

На этом процесс восстановления пароля завершен.

Примечания
  1. ↑Пароль 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

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

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