Ubuntu 16.04 LTS で MySQL のデータを初期化する

MySQL のデータを初期化

MySQL のデータを全てリセットする、いわゆる工場出荷時の状態に戻す(ファクトリーリセット)的なことを行う方法です。

概要

以下の手順を踏みます。

  1. MySQL サーバを停止する
  2. MySQL のデータが入っているディレクトリを削除する(リネームする)
  3. 新しく MySQL のデータを入れるディレクトリを作る
  4. 「3.」で作ったディレクトリの所有者をmysqlに変更する
  5. $ sudo mysqld --initializeを実行して「3.」で作ったディレクトリ内を初期化する
  6. /etc/mysql/mysql.conf.d/mysqld.cnfを編集してrootのログインパスワードを無効にする
  7. MySQL サーバを再起動する
  8. root でログインしてユーザの作成や設定を行う

具体的手順

一つ一つ順番を追ってやっていきます。

1. MySQL サーバを停止する

$ sudo service mysql stop

2. MySQL のデータが入っているディレクトリを削除する(リネームする)

$ sudo mv /var/lib/mysql /var/lib/mysql_old

3. 新しく MySQL のデータを入れるディレクトリを作る

$ sudo mkdir /var/lib/mysql

4. 「3.」で作ったディレクトリの所有者をmysqlに変更する

「3.」ではsudoで作っていて所有者がrootになってしまっているので、正しい所有者であるmysqlに所有者を変更します。

$ sudo chown mysql:mysql /var/lib/mysql

5. 「3.」で作ったディレクトリ内を初期化する

mysqld --initializeというコマンドを使います*1

$ sudo mysqld --initialize

6. rootのログインパスワードを無効にする

このままですと MySQL にログインができないので、rootのパスワードを一時的に無効化します。こちらのQiitaの記事を参考にさせていただきました。

  • /etc/mysql/mysql.conf.d/mysqld.cnfをエディタで開く
  • [mysqld]の部分にskip-grant-tablesと書く*2

7. MySQL サーバを再起動する

$ sudo service mysql restart

8. rootでログインしてrootのパスワードの設定とユーザの作成を行う

rootでパス無しでログインできるはずです。ユーザの確認やデータベースの確認も行ってみてください。

$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
...
...
...
mysql> SELECT Host, User FROM mysql.user;
+-----------+---------------+
| Host      | User          |
+-----------+---------------+
| localhost | mysql.session |
| localhost | mysql.sys     |
| localhost | root          |
+-----------+---------------+
3 rows in set (0.02 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

まずはrootのパスワードを設定しましょう。skip-grant-tablesで起動しているためSET PASSWORDではだめですので、先ほどのQiitaの記事を参考にします。設定ができたら「6.」の記述を削除して MySQL のサーバを再起動することを忘れないようにします。

あとはユーザを作成すればまっさらな状態で MySQL を使いはじめることができます。

補足

パスワードを変更してもうまくログインできない場合は以下も参考にしてみてください。

*1:最近まで知りませんでした……

*2:たいていは最後の行に貼り付けるだけでいいと思います

Powered by はてなブログ