ハックライフノート

技術的な話とか、覚え書き

[MySQL]CentOSへのMySQLインストール後mysql_secure_installationで躓いた話

新しくサーバ用のPCを買ったので、どうせならMySQLでもインストールしておこうと思いたったのが事の発端

環境はCentOS 7.5-1804のMySQL 5.7.22です。

MySQLは普通にyumするとMariaDBがインストールされるので、MySQLの公式からレポジトリを追加してyum install mysqlしてます。

さて、通常のやり方としては上記の通り本体をインストール後

sudo cat /var/log/mysqld.log | grep password

で初期パスワードをまず取得してから

mysql_secure_installation

をすると思いますが・・・ここで躓いた。

Access denied for user 'root'@'localhost'

rootパスワードを求められる所で、先程取得した文字列をちゃんと入れてもこの通り、ログインできません。

実はこの現象、RaspberryPiにMySQLを入れた際にも同様のエラーが起こったので、元々のバグなのか何なのか正直わかってません。

んで本題、これの解決法。

まずMySQLのサービスを停止します。

sudo systemctl stop mysqld.service

因みに、CentOS7からはsystemctlコマンドを使ってサービス(デーモン)の起動や停止を行います。

次に、/etc/my.cnfの[mysqld]の最後列にskip-grant-tablesを追記。

vi /etc/my.cnf
[mysqld]
skip-grant-tables

んで、MySQL起動。

sudo systemctl start mysqld.service

補足ですが、MySQLは停止しないままmy.cnfを編集後

sudo systemctl restart mysqld.service

でも行けると思います。

そしたら、MySQLに普通にログインします。

mysql -u root

パス無しで入れるので、後はmysqlスキーマのuserテーブルにあるauthentication_stringカラムがrootのpasswordを更新してあげてください。

UPDATE mysql.user
SET authentication_string=password('新しいrootパスをここに入れる')
WHERE user='root';

んで、MySQLをログアウト後、再度停止後my.cnfの追加した行を削除しmysqlを起動するか、編集後に再起動してください。

mysql -u root -p

で先程UPDATEしたパスワードを入力すれば、きっとログインができる喜びを味わえるでしょう。

もう既に2回も遭遇し2回対処しているので、手順を覚えそうです。覚えたくないけど。