WordPressをいじるので、念の為データベースのバックアップを取ろうと思ったら・・・。
# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)
というつれない返事が。パスワード間違いでログインできていないらしいのですが、設定した(であろう)パスワードが間違っていると言うことは考えづらく。
そこでrootの初期パスワードを確認してログインを試みることに。初期パスワード(temporary password)は、/var/log/mysqld.logの中にあります。logファイルなので結構な分量の文字列が並びますが、必要なのは
2021-04-02T04:11:03.373779Z 1 [Note] A temporary password is generated for root@localhost: HOGEFOOBAR
という一文のみ(最後の文字列がパスワード)。
なので
# less /var/log/mysqld.log | grep temporary
などとして、目的の一文を抽出して探します(一行ずつ目視で確認してたら大変です)。
見つかったその一文の「HOGEFOOBAR」のところが初期パスワードなので、コピーしておき、再度mysqlにログインし、パスワードを入力。
# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)
が、結論から言うとこれでもパスワードが異なるようで、ログインからはじかれてしまいました。
こういう場合、mysqlを一度停止し、セーフモードで起動することでrootログインが可能になるそうなので、早速コマンド入力します。
# systemctl stop mysqld
# mysqld_safe –skip-grant-tables &
-bash: mysqld_safe: コマンドが見つかりません
Oops。
一応yumで検索してみたりしたのですが、独立したコマンドとしてはないみたいです(その後、systemctlコマンドにオプションとして渡すことで利用できるらしいことがわかりました)。
このままでは先に進めないのでさらに情報を探ると、mysqlの設定ファイルにこのオプションを指定することでログインできるようになるということがわかりました。
設定ファイルは/etc/my.cnfなのでこれを開いてオプションを加筆します。
# vi /etc/my.cnf
skip-grant-tables ← 最終行に加筆した
# systemctl restart mysqld.service
これでパスワードなしでmysqlにログインできるようになったはずなので、早速試してみます。
# mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 399
Server version: 5.7.37 MySQL Community Server (GPL)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql>
ということで、パスワードなしでログインできるようになりました。なお、これは危険な状態ですので、設定が完了次第/etc/my.cnfの先ほどの加筆部分をコメントアウトしておかなければなりません。手早く作業を終えましょう!
最初に使用するデータベース(テーブル)を変更します。
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql>
ついでrootのパスワードを変更します。
mysql> UPDATE user SET authentication_string=password(‘HOGEFOOBAR’) WHERE user=’root’;
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
mysql>
成功したらmysqlからログアウトし、/etc/my.cnfの加筆をコメントアウト、mysqldを再起動します。
mysqlが再起動したら、設定したパスワードでログインを行い、ログインできればOKです。
# mysql -u root
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO)
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 5.7.37 MySQL Community Server (GPL)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql>
パスワードなしではログインできなくなっており、設定したパスワードでログインできることが確認できました。
これでmysqldumpコマンドを使ってデータベースのバックアップを取得できますね!