В данной статье можно найти информацию о том, как восстановить пароль суперпользователя root в mysql. Например, установил mysqld, настроил и благополучно забыл пароль, а через время он понадобился. Ну, или в погоне за безопасностью, добросовестный админ нашёл время сменить пароли, в том числе и от СУБД MySQL.
Ситуация, как известно, не новая: потерян пароль root'а от mysql. Естественно, восстановить его практически невозможно, а вот сменить - пара пустяков. Для этого нам потребуется, правда, перезапуск демона mysqld с опцией skip_grant-tables. Для начала выясним, с какими параметрами mysqld работает в штатном режиме.
# ps wwaux | grep mysqld
mysql 220 14,9 3,3 896748 552152 ?? SJ 16:08 38:19,55 /usr/local/libexec/mysqld --defaults-extra-file=/var/db/mysql/my.cnf --basedir=/usr/local --datadir=/var/db/mysql --plugin-dir=/usr/local/lib/mysql/plugin --user=mysql --log-error=/var/db/mysql/isp2.err --pid-file=/var/db/mysql/isp2.pid --socket=/tmp/mysql.sock --port=3306
Строка параметров запуска длинная, но для корректного и стопроцентного запуска необходимо запускать mysqld_safe c этими параметрами + опция skip_grant-tables, которая как раз и позволяет зайти в mysql под любым пользователем без пароля. Приступим.
Останавливаем основной процес mysql-server,
# /usr/local/etc/rc.d/mysql-server stop # mysqld_safe /usr/local/libexec/mysqld --defaults-extra-file=/var/db/mysql/my.cnf \ --basedir=/usr/local --datadir=/var/db/mysql --plugin-dir=/usr/local/lib/mysql/plugin \ --user=mysql --log-error=/var/db/mysql/isp2.err --pid-file=/var/db/mysql/isp2.pid \ --socket=/tmp/mysql.sock --port=3306 --skip_grant-tables & # mysql -u root -p
Enter password: <Enter>
Окей, мы в mysql. Используем основную базу данных «mysql», указываем новый пароль для root (your_password ниже), обновляем привилегии и выходим из СУБД.
mysql> use mysql; mysql> update user set password=password('your_password') where user='root'; mysql> flush privileges; mysql> quit
Дальше - убиваем процесс mysqld, запускаем штатный экземпляр mysqld из rc-скриптов и проверяем наличие работающего процесса mysqld.
# killall mysqld # /usr/local/etc/rc.d/mysql-server start # ps -waux | grep mysql
Ну и всё, логинимся в mysql с новый паролем.
# mysql -uroot -p
Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 150 to server version: 4.1.20-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>
Profit!