「MySQLにrootでログインできない!」
MySQL5.6以前のバージョンを使っていた方は、少し戸惑うかもしれません。
実はMySQL5.7以降では、rootユーザーでログインする手順が少し変わっています。
これは、セキュリティに対してより厳しくなったことによる変更です。
最新のMySQLにログインするためには、以下のどちらかの設定をする必要があります。
- ログインパスワードの初期設定(コマンド実行)
- パスワードなしログインの設定(設定ファイル変更)
今回は、MySQL8.0をインストールした方に向けて、この2つの方法を詳しく解説していきます。
もくじ
MySQLのログインとパスワード初期設定
MySQL8.0にrootユーザーでログインするためには、パスワードの初期設定が必要です。
パスワードを設定するためには、以下のステップを踏んでいきます。
- MySQLを起動
- ログファイルから初期パスワードを取得
- 初期パスワードを使ってログイン
- パスワードの再設定
ログファイルに記述された初期パスワードでログインしたあと、パスワードを再設定することでパスワード設定が完了します。
では、実際の手順を見ていきましょう。
MySQLの起動
まずは、MySQLを起動しましょう。
MySQLを起動することで、ログファイルにrootユーザーの初期パスワードが追記されます。
すでに起動している方は、スキップしてくださいね。
$ sudo systemctl start mysqld

初期パスワードの確認
MySQLにrootユーザーでログインするための初期パスワードは、以下のコマンドで簡単に調べることができます。
$ grep password /var/log/mysqld.log
2019-04-13T02:52:17.816864Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: xxxxxxxxxxxx
最後の「xxxxxxxxxxxx」の部分がパスワードになりますので、コピーしておきましょう。
「grep」コマンドについては、以下の記事をお読みください。

初期パスワードでログイン
さきほどの初期パスワードを使って、ログインしてみましょう。
$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.15
Copyright (c) 2000, 2019, 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>
上のような表示になれば、ログインは成功です。
パスワード再設定
初期パスワードでログインしたrootユーザーでは、ほかのMySQLコマンドを実行することができません。
試しにデータベースを作ろうとすると、以下のようにエラーになります。
mysql> CREATE DATABASES test_db;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
エラーに出ているとおり、パスワードを再設定する必要があります。
以下のコマンドで、初期パスワードから新しいパスワードに変更することができます。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Test@1234';
Query OK, 0 rows affected (0.05 sec)
「Test@1234」の部分は、自分の好きなパスワードに変えて大丈夫です。
ただし、「8文字以上、英字の大文字小文字、数字、記号」を含んだパスワードに変更する必要がありますので注意してください。
ちなみに、MySQL8.0では以下のパスワード変更コマンドが使えなくなっています。
mysql> SET PASSWORD FOR root@localhost=PASSWORD('Test@1234');
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PASSWORD('Test@1234')' at line 1
新しいパスワードでログイン
新しいパスワードでログインしてみます。
$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.15
Copyright (c) 2000, 2019, 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>

MySQLの設定ファイル変更
ログインするたびに、毎回パスワードを入力するのが面倒な人は、パスワード入力をスキップさせることも可能です。
そのためには、MySQLの設定ファイルである「my.cnf」を変更する必要があります。
変更といっても、1行追記するだけなので難しくありません。
パスワードなしでログイン(エラー)
通常、パスワードを入力せずにrootユーザーでログインをしようとすると、以下のようなエラーがでると思います。
$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
これは、rootユーザーの「パスワードを指定してない」と怒っているのです。
rootユーザーには、必ずパスワードを設定しなければいけない仕様になっているからです。
MySQLの設定ファイルを変更
パスワードなしでログインするためには、MySQLの設定を変更する必要があります。
「my.cnf」ファイルを「vi」コマンドで開いてみましょう。
$ sudo vi /etc/my.cnf
「my.cnf」ファイルが開いたら、「skip-grant-tables」を追記してください。
my.cnf
[mysqld]
:
:
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
skip-grant-tables
「vi」の操作がわからない方は、以下の記事を見ながらやってみてください。

再起動
my.cnfの設定が終わったら、設定ファイルを再度読み込ませるためにMySQLを再起動します。
$ sudo systemctl restart mysqld
パスワードなしでログイン(成功)
これで、パスワードなしでもログインすることが可能になります。
$ mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.15 MySQL Community Server - GPL
Copyright (c) 2000, 2019, 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にログインできない問題を解決できたと思います。
ただし、パスワードをスキップする設定については、本番環境では絶対にやらないようにしてください。
あくまで自分の開発環境で、「パスワード入力が面倒だな」ってときに設定するようにしましょう。
次回は「MySQLコマンドの使い方」を覚えて、実際にMySQLを動かしてみたいと思います。
またね、キツネ(@kitaaaa_kitsune)でした!
