それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Ubuntuでmysql(/var/lib/mysql)を初期化して初期パスワード生成

mysql をリセットする

apt でインストールしたmysql のデータを全消しして、初期化し直す。

mysql を消したくなるとき。

何らかの作業をしていて、いったんmysql をサクッと削除して作り直したい時がある。

しかし、apt はしたくない。

sudo apt purge mysql.server
sudo apt purge mysql

コンテナを使っていると、消去して再インストールしたいが、aptからやり直すと不便。たとえば、次のようなとき。

docker でボリュームを設定したとき

たとえば、docker ubuntumysql を apt インストールしたものを ボリュームで外部と共有するとき。

VOLUME ['/var/lib/mysql']

このとき、docker run -v ./mysql:/var/lib/mysql などととやると、MySQLの初期データが完全に消えて起動しなくなる。

ubuntu をそのままに、mysql を消したいとき

apt で再インストールすればいいのだろうが。バージョンはそのままで管理ファイルをまっさらにしたいとき。 インストールスクリプトを作っているときなど

ネット接続無しで初期化したい。

パスワードがわからないので初期化したい。でもインターネットに接続できない(接続設定してない)のでapt で再インストール出来ない

apt remove / apt install は事情により出来ない。このときにmysqlのデータフォルダだけを再初期化してrootパスワードを再発行できる。

mysql を初期化する、

次のコマンドを使えば、インストールされているMySQLはそのままに、データの格納ディレクトリを再初期化できる。

mysqld --initialize

mysql を /var/lib/mysqlに入れた場合は、次のコマンドで再初期化ができる。

sudo systemctl stop mysql
sudo rm -rf /var/lib/mysql/*
sudo mysqld --initialize
sudo systemctl start mysql

この手順は、apt install mysql されたものをデータベースの保存ディレクトリだけを初期化し直すに使える。

初期化後の作業:パスワード再設定。

初期化コマンド mysqld --initialize は、root@localhostmysql パスワードも初期化されているので、パスワードを再設定する。

先程の初期化コマンド mysqld --initialize実行後に、ランダムなパスワードで初期化されている。ランダムパスワードが生成されているんで注意する。

初期化後の初回パスワードの確認

初期化パスワードを確認する。ログに書かれている。

# cat /var/log/mysql/error.log  | grep -i pass

実際にやった例

root@1626170b71af:/# cat /var/log/mysql/error.log  | grep -i pass
2021-06-22T08:34:32.575385Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
2021-06-22T08:34:40.773077Z 0 [Note] Shutting down plugin 'sha256_password'
2021-06-22T08:34:40.773089Z 0 [Note] Shutting down plugin 'mysql_native_password'
2021-06-22T08:34:43.290236Z 0 [Note] Shutting down plugin 'sha256_password'
2021-06-22T08:34:43.290244Z 0 [Note] Shutting down plugin 'mysql_native_password'
2021-07-12T08:39:58.067661Z 1 [Note] A temporary password is generated for root@localhost: mGUTPx0fyXSx

パスワードを再設定

初期パスワードはそのままでは使えません。

実行時に You must reset your password と言われて怒られます。

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

実際に怒られている例。

root@1626170b71af:/# mysql -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.34-0ubuntu0.18.04.1

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

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>  use mysql;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

パスワード再設定

rootユーザーでログインしたあと

mysql -p 

パスワードを再設定のALTER TABLEを発行する。

ALTER USER 'root'@'localhost' IDENTIFIED  BY 'MYSQL_ROOT_PASSWORD';
flush privileges;

password を指定するときは、identified by 'XXX' で指定。その後、権限を反映する。

まとめ

  • MySQLのデータフォルダ削除 rm /var/lib/mysql
  • 初期化コマンド mysqld --initialize
  • 生成パスワード確認 cat /var/log/mysql/error.log | grep -i pass
  • 初期パスワード変更 ` ALTER USER 'root'@'localhost' IDENTIFIED BY 'MYSQL_ROOT_PASSWORD'| mysql -p '

これで、いつでもMySQLを初期化してサクッとつくって使い潰せる。

docker-compose で mysql だけのインスタンスを立ち上げなくても、全部入りdocker を作って開発環境を無精できる。

追記

  • 2022/03/18

参考資料

https://stackoverflow.com/questions/8911115/how-to-recover-recreate-mysqls-default-mysql-database https://serverok.in/you-must-reset-your-password-using-alter-user