むらじゅん風呂具

ITエンジニアとたまに歌手と司会などで活動する村中淳のブログ

CentOS7 MySQL5.7でのrootパスワード強制変更

mysqlインストール、起動後に接続しようとした際に発生したエラー。

# mysql -u root -p
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

まずはいつものグーグル先生から辿る。

qiita.com

どうやら、mysql.sockファイルがないことが原因らしい。

# ls -lt /var/lib/mysql/mysql.sock
ls: /var/lib/mysql/mysql.sock にアクセスできません: そのようなファイルやディレクトリはありません

こやつを作る。

# touch /var/lib/mysql/mysql.sock

再度接続。

が!!ダメ!!!

# mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

うーん?パスワード入れろってこと?? 入れるわ。

# mysql -u root -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

なんでじゃ!? ちなみにパスワードは以下のコマンドで確認可能。

# grep -e 'A temporary password is generated for root@localhost' /var/log/mysqld.log

ここに関しては要わからんだったので、最終的にrootパスの強制変更に落ち着く。

www.rite.jp

mysqlを一旦停止して、–skip-grant-tablesオプションで起動するよう設定。

# systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"

このオプションは、

サーバーの権限システムをまったく使用せずに開始され、 サーバーへのアクセス権を持つすべてのユーザーに、 すべてのデータベースに対する無制限アクセス権が与えられます。

とのこと。 ※MySQL 5.6 リファレンスマニュアル参照

mysqlを停止して再度起動。

んで試すと入れた!やったぜ!

# mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.24 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

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>

んで、パスワードの設定はこうするらしい。

update user set authentication_string=password("設定するパスワード") where user='root';

やってみる。

mysql> update user set authentication_string=password("***") where user='root';
ERROR 1046 (3D000): No database selected

「自分、データベース選んでないやん」って怒られる。

データベースを選ぶ。

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> UPDATE user SET authentication_string=password("***") WHERE user='root';
ERROR 1054 (42S22): Unknown column `***` in 'field list'

うん?「カラムがないやん」って言われている。

ここも調べてみたら、なんてことはない。

入力した新しいパスワード(***の部分)は、

'(シングルクォート)で括らないとダメ。

直す。

mysql> update user set authentication_string=password('***') where user='root';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql>

できた!

テーブルの再読み込みを行う。

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql>

mysqlの再起動をする。 と同時に設定していた、–skip-grant-tablesオプションを解除する。

これ忘れるとmysqlいじっている時にエラーが出るので注意。

# systemctl stop mysqld
# systemctl set-environment MYSQLD_OPTS=""
# systemctl start mysqld

よし、接続する!!

# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.24

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

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> 

ミッションコンプリー。

さらっと書いたが結構時間がかかってしまった。

DBまわりもやりながら覚えないとなあ。

誰かの助けになれば幸いです。