【リニューアル記念】未経験からブロガーへのSTEPを続々更新!

MySQL8.0にログインできない!パスワード確認とファイルの設定手順

Mysqlにログインできない

「MySQLにログインできない!」

MySQL5.6以前のバージョンを使っていた方は、少し戸惑うかもしれません。

実はMySQL5.7以降では、rootユーザーでログインする手順が少し変わっています。

これは、セキュリティに対してより厳しくなったことによる変更です。

最新のMySQLにログインするためには、以下のどちらかの設定をする必要があります。

  1. ログインパスワードを再設定(コマンド)
  2. パスワードなしでログイン(設定ファイル変更)

今回は、MySQL8.0をインストールした方に向けて、この2つの方法を詳しく解説していきます。

ログインパスワードを設定

MySQL8.0にrootユーザーでログインするためには、パスワードが必要です。

パスワードを設定するためには、以下のステップを踏んでいきます。

  1. MySQLを起動
  2. ログファイルから初期パスワードを取得
  3. 初期パスワードを使ってログイン
  4. パスワードの再設定

ログファイルに記述された初期パスワードでログインしたあと、パスワードを再設定することでパスワード設定が完了します。

では、実際の手順を紹介します。

MySQLの起動

まずは、MySQLを起動しましょう。

MySQLを起動することで、ログファイルにrootユーザーの初期パスワードが追記されます。

すでに起動している方はスキップしてください。

MySQLを起動
$ 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にログイン
$ 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にログイン
$ 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」コマンドで開いてみましょう。

my.cnfをviで開く
$ sudo vi /etc/my.cnf

「my.cnf」ファイルが開いたら、「skip-grant-tables」を追記してください。

my.cnf
my.cnf
[mysqld]
   :
   :
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
skip-grant-tables

「vi」の操作がわからない方は、以下の記事を見ながらやってみてください。

再起動

my.cnfの設定が終わったら、設定ファイルを再度読み込ませるためにMySQLを再起動します。

MySQLを再起動
$ sudo systemctl restart mysqld

パスワードなしでログイン(成功)

これで、パスワードなしでもログインすることが可能になります。

MySQLにログイン(パスワードなし)
$ 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コマンドの使い方!LinuxからSQLを使おう!」を読みながら、実際にMySQLコマンドを使ってみます。

テキストのコピーはできません。