MySQL skip-grant-tables


Опция skip-grant-tables позволяет запустить сервер баз данных MySQL и затем авторизоваться без запроса пароля пользователя root.

Пароль пользователя root задается при установке сервера баз данных. Сменить пароль root можно выполнив простой запрос UPDATE или ALTER c указанием пользователя и нового пароля к системной базе данных из консоли MySQL.


Пример

USE mysql

ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';


Если пароль root неизвестен, но есть доступ по ssh на сервер, пароль также можно сменить, для этого потребуется остановить MySQL



MySQL сменить пароль root через skip-grant-tables в Debian/Ubuntu


Все команды выполняются от имени системного пользователя root.


Останавливаем сервер баз данных.

/etc/init.d/mysql stop



Запускаем его в фоновом режиме и с опцией --skip-grant-tables, пароль при этом не запрашивается и изменения данных внесены быть не могут (такие как обновление значений или удаление таблиц)


mysqld_safe --skip-grant-tables &


Подключаемся к MySQL от имени root

mysql -u root



Оказавшись в консоли MySQL выполняем последовательно несколько команд.



Используем таблицу mysql

USE mysql;



Устанавливаем новый пароль заменяя необходимым значением password в кавычках.

UPDATE USER SET PASSWORD=PASSWORD('password') WHERE USER='root';



Обновляем данные о привилегиях:

FLUSH PRIVILEGES;



Выходим из консоли MySQL

EXIT;



MySQL сменить пароль root в CentOS


Для CentOS процедура абсолютно идентична, но для остановки сервера баз данных и его запуска используются команды для системы инициализации systemd

systemctl stop mysqld


mysqld_safe --skip-grant-tables &


mysql -u root



Далее в консоли сервера баз данных:

USE mysql;


UPDATE USER SET PASSWORD=PASSWORD('password') WHERE USER='root';


FLUSH PRIVILEGES;


EXIT;



Запускаем MySQL

systemctl start mysqld



Подключаемся указывая новый пароль когда MySQL его запросит

mysql -u root -p

skip-grant-tables


Пароль успешно сменен с использованием опции skip-grant-tables в MySQL. Авторизация выполнена.



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



В частности, это позволяет подключиться от имени root тогда когда для пользователя с меньшими привилегиями исчерпан лимит подключений (в таких случаях возникает ERROR 1040 (HY000): Too many connections).

Сказать спасибо