Главная | Контакты



Главная > Программы > MySQL

MySQL: Восстановление пароля root

В процессе перенос этого блога на другой сервер. Бекап с файлами залит, архив распакован. Осталось всего чуть-чуть: создать базу на MySQL и скормить ей дамп.

- Ага: Не тут то было. Я кажется не помню root пароль к базе - пришло в голову: Пароль я действительно забыл (ну с кем не бывает?), а тот человечек, который его вероятнее всего помнит, уже скорее всего отдыхает и звонить ему в столь поздний час как-то невежливо.

Когда-то давно, когда я только только узнал, что такое сервер базы данных MySQL приключилась аналогичная история. Тогда я проблему решил достаточно быстро. Я просто прибил полностью папку с системной базой mysql:

# rm -rf /var/db/mysql/mysql

и заново создал системные базы. Но этот способ однозначно жестокий, а главное, глупый. Есть решение куда более аккуратное и красивое.

Итак:

Останавливаем сервер MySQL:

# /usr/local/etc/rc.d/mysql-server.sh stop
Stopping mysql.
Waiting for PIDS: 83119, 83119.

Запускаем mysqld с параметром -skip-grant-tables, указав стартовать от имени пользователя mysql (или от другого непривелигерованного юзера - но никак не от root'а), иначе mysql сославшись на пункт Security в мануале, пошлет Вас в сад:

# /usr/local/libexec/mysqld -user mysql -skip-grant-tables
080114 21:55:24 InnoDB: Started; log sequence number 0 94091855
080114 21:55:24 [Note] /usr/local/libexec/mysqld: ready for connections.
Version: '5.1.22-rc' socket: '/tmp/mysql.sock' port: 3306 FreeBSD port: mysql-server-5.1.22

Все. Дальше подключаемся к серверу, говорим use mysql, и рихтуем таблицу user, очищая в ней поле Password для пользователя root@localhost. Пароль снесли. Перезапускайте mysql сервер (у меня иначе как через killall -9 mysqld перезапуститься не получилось:) и входите пользователем root@localhost, устанавливайте такой пароль, который Вы больше не забудете.

Материал взят с сайта: http://live.daemony.org

Как в MySQL поменять утерянный пароль root

Останавливаем MySQL:

/usr/local/etc/rc.d/mysql-server.sh stop

Запускаем с параметром:

mysqld --skip-grant-tables

Отправляем в фон. Для этого нажимаем Ctrl-z и выполняем команду bg

Заходим без пароля делаем команды:

use mysql;
UPDATE user SET Password=PASSWORD('mynewpassword') WHERE User='root';
FLUSH PRIVILEGES;

Останавлием mysql и запускаем нормально:

kill %1
/usr/local/etc/rc.d/mysql-server.sh start

1. Делаем DROP DATABASE `mysql`; тем самым убив всех юзеров и все права. Можно наверное и без этого, но второй шаг у меня с уже готовой таблицей не заработал (наверное из-за разных версий mysql до и после переноса БД mysql).
2. Запускаем из консоли mysql_install_db который эту самую табличку создаёт.
3. Заходим mysql -u root и выполняем
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'new_pass' WITH GRANT OPTION;
FLUSH PRIVILEGES;

4. Рестартуем: service mysql restart (если не получается, то killall mysqld && service mysql start)
5. PROFIT!
Главная > Программы > MySQL