somemo programming etc.

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【MySQL】rootユーザでアクセスできなくなった時の対処法

mysqlのrootユーザでアクセスできるホスト名を間違えて変更してしまったときの解決法をメモしておきます。

セーフモード

まず、mysqlのプロセスを削除します。suで削除できる権限になり、psやtopなどでプロセス(mysqld)を特定し削除します。killallで削除する方法もあります。

次にmysqlをセーフモードで起動します。ユーザにrootを指定し、誰でもログインできるように権限テーブルを無視するようにしています。バックグラウンドで起動し、mysqlの引数を2つ追加しています(よくわかっていない…)。

# /usr/local/mysql/bin/safe_mysqld --user=root --skip-grant-tables & mysql mysql

mysql関連のプロセスを見てみると、以下のようになっています。

# ps aux | grep mysql
root      4369  0.3  0.4   5524  1172 pts/1    S    06:28   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --user=root --skip-grant-tables
root      4624  0.9 12.5 326236 31896 pts/1    Sl   06:28   0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=root --skip-grant-tables --log-error=/usr/local/mysql/data/localhost2.localdomain2.err --pid-file=/usr/local/mysql/data/localhost2.localdomain2.pid --socket=/tmp/mysql.sock --port=3306

mysqlにログインできるようになりました。

パスワードの初期化

セーフモードでなくても、mysqlにログインできるようにパスワードの初期化をします。

use mysql
mysql> update user set Password=null where User='root';

パスワードの設定

セーフモードのmysqlを停止後、通常起動します。

service mysqld restart

rootでログインしてにパスワードを再設定します。

# mysql -u root
mysql> set password for root@localhost=password('rootパスワード');

パスワードは暗号化しています。以上です。