Привычка хранить пароли в каком-нибудь удобном, защищенном от света посторонних глаз месте приходит не сразу. Чаще всего это происходит тогда, когда приходится усердно вспоминать забытый пароль к чему-нибудь важному. Например, пароль учетной записи пользователя root на каком-нибудь сервере, даунтайм которого недопустим.
Впрочем, есть одно решение для таких случаев. Оно, конечно, не рекомендуемое (а при отсутствии должного внимания так и совсем противопоказано), но все же оно есть.
1) Запускаем второй экземпляр mysql-сервера. Как это сделать, я писал ранее здесь. Разница только в том, что сейчас не надо копировать базу mysql. Необходимо подготовить конфиги и запустить команду
mysql_install_db --datadir=/dbdata/datadir/ --user=mysql
2) Логинимся на новый сервер под учеткой root.
3) Копируем таблицу user из базы данных mysql старого сервера на новый.
4) Заставляем сервер переоткрыть таблицы командой
flush tables;
5) Меняем пароль для пользователя root:
update mysql.user set password=PASSWORD('I-will-never-forget-root-password') where user like 'root';
6) Выполняем еще раз команду flush privileges.
7) Пробуем залогиниться повторно с новым паролем.
8) Если все ок, то останавливаем второй сервер (не основной!) и копируем файлы таблицы user из базы данных в обратном направлении (т.е. на основной сервер).
9) Осталось заставить сервер перечитать таблицу с пользователями. Это можно сделать, послав процессу сигнал SIGHUP. Делается это командой
kill -1 12345
где, 12345 — pid процесса mysqld.
Вот и всё, пароль изменен, сервер не выключался. Но все же, храните пароли где-нибудь в хорошо зашифрованном месте…