MySQL: Восстановление пароля root
Взято: http://housecomputer.ru/programs/mysql/password_recovery_mysql.html
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!