Сброс, а затем восстановить пароль MySQL
У меня есть пароль root для Linux. На этой машине есть сервер MySQL. Один из ini сайта был переписан, и теперь он не может получить доступ к базе данных mysql. У меня нет mysql root для смены пароля пользователя базы данных. Владелец сервера сейчас в отпуске, поэтому я не могу попросить его дать мне корень mysql. Я могу сбросить пароль root MySQL, но я не хочу.
Я нуждаюсь:
- Сохраните где-нибудь текущий хеш пароля mysql
- Сбросить это
- Делайте вещи как root mysql (сбросьте пользователя базы данных pw)
- Восстановите старый пароль root
Как сделать пункты 1 и 4?
3 ответа
Процедура сброса общего пароля выполняется путем создания файла инициализации, который сбрасывает пароль root. Затем перезапустите сервер с параметром, заставляющим его запускать этот сценарий с привилегиями root как пользователь root.
Пример сценария показывает, как вы сбрасываете пароль root, но нет причины, по которой вы не могли просто заставить сценарий сбросить пароль пользователя, которого вы хотите сбросить.
Так что, если у вас есть возможность перезапустить сервер mysql и указать файл инициализации, вы можете пропустить шаги 1, 2 и 4 и просто запустить скрипт от имени пользователя root. На самом деле нет никаких причин, по которым вам вообще нужно трогать учетную запись root.
ВНИМАНИЕ: Требуется перезапуск MySQL для шагов 1-3
Это можно сделать без...
- использование другого my.cnf
- редактирование текущего my.cnf
- СУПЕР привилегия
После входа в Linux Box, чтобы создать себе временный рут с паролем t3mpp@assw0rd
выполните следующие шаги
ШАГ 01) service mysql restart --skip-networking --skip-grant-tables
ШАГ 02) В командной строке Linux введите mysql
и нажмите ввод
ШАГ 03) Запустите эту команду SQL
SELECT COUNT(1) RootLocalhostExists FROM mysql.user
WHERE user='root' AND host='localhost';
- Если
RootLocalhostExists
0, остановитесь здесь. Оставьте комментарий в моем ответе. - Если
RootLocalhostExists
1, перейдите к ШАГУ 04.
ШАГ 04) Выполните эти команды SQL
CREATE TABLE mysql.user2 LIKE mysql.user;
INSERT INTO mysql.user2 SELECT * FROM mysql.user
WHERE user='root' AND host='localhost';
UPDATE mysql.user SET PASSWORD=PASSWORD('t3mpp@assw0rd')
WHERE user='root' AND host='localhost';
ШАГ 05) service mysql restart
Это сделает ваши шаги 1-3.
ВОССТАНОВЛЕНИЕ ПАРОЛЯ
Чтобы вернуть исходный корень mysql, сделайте это (MySQL Restart Not Needed):
ШАГ 01) В командной строке Linux введите mysql -uroot -pt3mpp@assw0rd
и нажмите ввод
ШАГ 02) Выполнить следующий SQL
DELETE FROM mysql.user WHERE user='root' AND host='localhost';
INSERT INTO mysql.user SELECT * FROM mysql.user2;
DROP TABLE mysql.user2;
FLUSH PRIVILEGES;
EXIT
Вот и все.
Попробуйте!
Если ваш сервер MySQL работает на Debian (или Ubuntu или аналогичный), вы можете использовать debian-sys-maint
пользователь, а не пользователь root. Смотреть в /etc/mysql/debian.cnf
Он имеет SUPER Privs и может изменить пароль пользователя.