【MySQL 5.7】パスワードを忘れてしまった時のパスワード再設定手順(復旧手順)

MySQLでパスワードを忘れてしまった場合のパスワード再設定手順です。

 

 

環境の確認

CentOS:7.4

MySQL:5.7

 

[root@cent07 web]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

 

 

mysql> select version();
+-----------+
| version() |
+-----------+
5.7.19    |
+-----------+
1 row in set (0.00 sec)

mysql>

 

 

CentOS7には「mysqld_safe」がなかった

CentOS6 では、MySQL のパスワードを忘れてしまったり、紛失してしまったりした場合(非常によくないですが)、MySQL のパスワードを再設定する際に「mysqld_safe」コマンドを使用していました。

 

しかし CentOS7 で作業をしていた時に、下図のエラーが出力されました。

[root@cent07 web]# mysqld_safe --skip-grant-tables &
[1] 1446
[root@cent07 web]# -bash: mysqld_safe: コマンドが見つかりません

 

mysqld_safeコマンドについて調べたところ、「CentOS7」から「systemd」で MySQL を管理するように仕様が変更されたため無くなったことが分かりました。

 

 

【参考サイト】

2.5.10 Managing MySQL Server with systemd

https://dev.mysql.com/doc/refman/5.7/en/using-systemd.html

 

 

 

上記URLのページを確認すると、「If you install MySQL using an RPM or Debian package on the following Linux platforms, server startup and shutdown is managed by systemd:」とあり、「CentOS7」も対象になっていることが分かります。

【MySQL 5.7】パスワードを忘れてしまった時のパスワード再設定手順(復旧手順)

 

 

 

CentOS7 の場合、MySQL Server の起動と停止は「systemd」によって管理されます。

mysqld_safe コマンドや System V 初期化スクリプトなどは不要になり、そもそもインストールされません。

 

 

mysqld_safeの代わりに「MYSQLD_OPTS」変数を使用する

CentOS7 の環境で MySQL Server のパスワードを紛失した、パスワードを忘れたなどトラブルが発生した場合は「MYSQL_OPTS」変数を利用して、システム構成ファイルを直接変更せずに MySQL Server を起動することができます。

 

ノーパスワードで MySQL Server(mysqld)を起動してパスワードを再設定する

以下、ノーパスワードで MySQL Server(mysqld)を起動してパスワードを再設定する手順です。

 

 

「skip-grant-tables」のオプションを設定します。

[root@cent07 ~]# systemctl set-environment MYSQLD_OPTS="--skip-grant-tables" ← 「skip-grant-tables」のオプションを設定します。

 

オプションを設定したら MySQL Server を起動します。

[root@cent07 ~]# systemctl start mysqld ← オプションを設定したら mysqld を起動します。
[root@cent07 ~]# systemctl status mysqld ← mysqldが起動していることを確認します。
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since 月 2017-10-23 20:37:02 JST; 4s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 1654 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
  Process: 1637 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 1659 (mysqld)
   CGroup: /system.slice/mysqld.service
           mq1659 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tab...

10月 23 20:37:00 cent07.localdomain systemd[1]: Starting MySQL Server...
10月 23 20:37:02 cent07.localdomain systemd[1]: Started MySQL Server.

 

 

MySQL に「ノーパスワード(no password)」でログインします。

[root@cent07 ~]# mysql -u root ← 「skip-grant-tables」のオプションで起動したのでノーパスワードでログインができます。
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 20
Server version: 5.7.19 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, 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> UPDATE mysql.user SET authentication_string = PASSWORD('xxxxxxxx') WHERE User = 'root' AND Ho st = 'localhost'; ← rootのパスワードを設定します。
Query OK, 1 row affected, 1 warning (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql>  FLUSH PRIVILEGES; ← パスワード変更を反映します。
Query OK, 0 rows affected (0.04 sec)

mysql> quit
Bye

 

 

一旦 MySQL Server を停止して、「MYSQLD_OPTS」オプションを外します。

[root@cent07 ~]# systemctl stop mysqld ← オプションを元に戻すために一度 mysqld を停止します。
[root@cent07 ~]# systemctl status mysqld ← mysqld が停止していることを確認します。
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since 月 2017-10-23 20:38:57 JST; 3s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 1654 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
  Process: 1637 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 1659 (code=exited, status=0/SUCCESS)

10月 23 20:37:00 cent07.localdomain systemd[1]: Starting MySQL Server...
10月 23 20:37:02 cent07.localdomain systemd[1]: Started MySQL Server.
10月 23 20:38:54 cent07.localdomain systemd[1]: Stopping MySQL Server...
10月 23 20:38:57 cent07.localdomain systemd[1]: Stopped MySQL Server.
[root@cent07 ~]# systemctl unset-environment MYSQLD_OPTS ← unset-environment でオプションを外します。

 

 

オプションを外したら、再度 MySQL Server を起動します。

[root@cent07 ~]# systemctl start mysqld ← mysqldを起動します。
[root@cent07 ~]# systemctl status mysqld ← mysqldの起動を確認します。
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since 月 2017-10-23 20:39:14 JST; 3s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 1848 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
  Process: 1831 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 1852 (mysqld)
   CGroup: /system.slice/mysqld.service
           mq1852 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

10月 23 20:39:13 cent07.localdomain systemd[1]: Starting MySQL Server...
10月 23 20:39:14 cent07.localdomain systemd[1]: Started MySQL Server.

 

 

mysqlコマンドで、設定したパスワードでログインできることを確認します。

[root@cent07 ~]# mysql -u root -p
Enter password:  ← パスワードを入力します。
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.7.19 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, 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> 

 

 

 

以上でパスワードを変更できました。

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人

コメントを残す

メールアドレスが公開されることはありません。