「MySQLにログインできない!」
MySQL5.6以前のバージョンを使っていた方は、少し戸惑うかもしれません。
実はMySQL5.7以降では、rootユーザーでログインする手順が少し変わっています。
これは、セキュリティに対してより厳しくなったことによる変更らしいです。
mysql5系でパスワードを変更する記事は多くありますが、mysql8系だとあまり見かけませんでしたので備忘録としてメモ
目的
mysql8系でパスワードを変更できるようになる
対象者
mysql8系で、
・パスワードを忘れて困っている人
・パスワードを変更したい人
参考
mysqlについては記事が多いですが、随時参考にすべき資料をアップデートしていきます。
何故5系と違うか→関数が違うから
5系での記事を試して見るも
PASSWORD() 関数は、MySQL version 5.67 までで廃止されているらしいです。8系だとガラッと色々変わってますね
//失敗例1
mysql > update mysql.user set password=password('hogehoge') where user = 'root';
//失敗例2
mysql > SET PASSWORD FOR root@localhost=PASSWORD('hoge');
//結果
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('root')' at line 1
ログイン
mysql -u ユーザー名 -D データベース名 -p
-u オプションでは MySQL に接続するユーザー名を指定します。
-D オプションでは接続先のデータベース名を指定します。
-p オプションはパスワードを送信する場合に指定します。
例えば、root ユーザーで test というデータベースに接続する場合、下記のようにコマンドを実行します。
尚、root ユーザーにはパスワードを設定している場合は、-p オプションも付加します。
mysql -u root -D test -p
パスワードリセット流れ
1 MySQLを止めます
$ mysql.server stop
2 MySQLをセーフモードで起動します。
$ mysqld_safe --skip-grant-tables &
3 別のターミナルを開き、rootユーザのパスワード無し状態でログインします。
$ mysql -u root
4 rootユーザーのパスワードを空に設定します。
mysql > UPDATE mysql.user SET authentication_string=null WHERE User='root';
5 セーフモードで開いたMySQLを閉じます
mysql > exit
6 killします
セーフモードでMySQLを起動させたターミナル(コマンド$ mysqld_safe --skip-grant-tables &を実行したターミナルで)が終了しない時(コマンドが打てるようにならない)は下記コマンドを実行して動いているMySQLをkillします。
※XXXXXは同じ数字が入りますので注意してください
※ . を忘れると、違うコマンドになりますので注意です
$ mysql.server status
>SUCCESS! MySQL running (XXXXX)
$ kill XXXXX
grepすると、grepした時のと併せて2つ以上になると思います。
$ ps aux | grep mysqld
taiga 28278 0.0 0.0 4277512 704 s003 S+ 1:21PM 0:00.00 grep mysqld
taiga XXXXX 0.0 0.0 4283208 1272 s003 S 1:14PM 0:00.02 /bin/sh /usr/local/Cellar/mysql/8.0.18_1/bin/mysqld_safe --datadir=/usr/local/var/mysql --pid-file=/usr/local/var/mysql/Taiga.local.pid
$ kill -9 XXXXX
8 今度は通常モードでMySQLを起動します
(aliasで msr で設定すると簡略化できていいですよ)
$ mysql.server restart
8 何も入力せずEnterを押下します。
$ mysql -u root -p
9 パスワードを再設定する。※重要
mysql > use mysql;
mysql > ALTER USER 'root'@'localhost' identified BY '任意のパスワード';
何も設定したくない場合(空)は、空欄にします。
mysql > ALTER USER 'root'@'localhost' identified BY '';
10 一度MySQLから出ます。
mysql > exit
11 再設定した任意のパスワードを入力してEnterを押下しログインできるか確認します。
$ mysql -u root -p
ターミナルが下記のようになれば成功です!
mysql >
mysqlのパスワードを変えたりして、1~10を繰り返せば結構なれますので是非。