MySQLでrootのパスワードを忘れたときに、リセットする方法です。
mysqldを起動する時に--skip-grant-tablesオプションを使うと一時的に認証機構をOFFに出来るので、この機能を利用します。
--skip-grant-tablesオプション付きでmysqldを起動しているときは、set passwordコマンドが使えないので、mysql.userテーブルのpassword列をupdate文で直接更新します。
# 起動中のMySQLを停止し、--skip-grant-tables付き(認証機構をスキップできる状態)で起動
/etc/init.d/mysqld stop
mysqld_safe --skip-grant-tables &
# rootユーザのパスワードをtest1に変更
mysql --user=root --database=mysql -e "update user set password=PASSWORD('test1') where User='root';"
mysql --user=root --database=mysql -e "flush privileges;"
# 通常モードでmysqlを再起動
/etc/init.d/mysqld stop
/etc/init.d/mysqld start
# パスワードなしで接続できなくなっていることを確認
mysql --user=root
# パスワード有りで接続できることを確認
mysql --user=root --password=test1
下記のコマンドだとmysqlの-eオプションでパスワードをセットしていますが、コマンドヒストリに生のパスワードが記録されます。ヒストリにパスワードが残るのを避けたい場合は、-eオプションなしでmysqlコマンドを実行し、対話的にupdate文を実行すればよいです。
こちらもおススメ