はじめに
mysqlのdumpをやったことがなく、前からやってみたいと思っていたので、今回試してみることにしました。
環境
簡単に環境は以下です。webコンテナとdbコンテナをdocker-compose.ymlで作成しています。
- docker
- rails7
- mysql 8.0
dumpのやり方
userテーブルの作成とseedでデータを入れる
userテーブルを作成し、以下のようにseedでデータを入れます。
100.times do |n|
User.create!(
name: "テスト太郎#{n + 1}",
email: "test#{n + 1}@test.com",
age: n + 1
)
end
テーブルデータの確認
dbコンテナに入ります。
$ docker compose exec db bash
mysqlにpasswordを入力してログインします。
bash-5.1# mysql -u root -p
Enter password:
app_developmentデータベースを使用し、usersテーブルを表示します。
100件のレコードが表示されるはずです。
mysql> use app_development;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> SELECT * FROM users;
+-----+----------+------------------+------+----------------------------+----------------------------+
| id | name | email | age | created_at | updated_at |
+-----+----------+------------------+------+----------------------------+----------------------------+
| 1 | ?????1 | test1@test.com | 1 | 2024-07-08 13:20:59.774423 | 2024-07-08 13:20:59.774423 |
| 2 | ?????2 | test2@test.com | 2 | 2024-07-08 13:20:59.786474 | 2024-07-08 13:20:59.786474 |
| 3 | ?????3 | test3@test.com | 3 | 2024-07-08 13:20:59.792206 | 2024-07-08 13:20:59.792206 |
| 4 | ?????4 | test4@test.com | 4 | 2024-07-08 13:20:59.797279 | 2024-07-08 13:20:59.797279 |
...省略
dumpファイルの作成
それでは、データの準備が終わったのでdumpをやっていきたいと思います。
データベースを指定して、mysqlのdumpファイルを作成します。
dbはデータベースのコンテナ名、app_developmentはデータベース名です。
dump.sqlというファイルを作成します。
コマンドを実行すると、passwordが求められるので、入力しファイルを作成します。
$ docker compose exec db mysqldump -u root -p --databases app_development > dump.sql;
Enter password: password
dumpファイルが作成されていることを確認
以下のように、現在のディレクトリの配下に、dump.sqlファイルが作成されています。
データベースを削除
コンテナに入り、mysqlにログインし、データベースをdropして削除します。
$ docker compose exec db bash
bash-5.1# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 43
Server version: 8.0.37 MySQL Community Server - GPL
Copyright (c) 2000, 2024, 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> drop database app_development;
Query OK, 3 rows affected (0.03 sec)
データベースが削除されていることを確認
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| app_test |
| information_schema |
| mydatabase |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.02 sec)
dumpファイルをコピー
dumpファイルをdbコンテナにコピーします。
$ docker compose cp dump.sql db:/tmp/dump.sql
dumpをインポートする
dumpのインポートを行うために、dbコンテナに入ります。
mysql -u root -p < /tmp/dump.sql;
コマンドを実行し、tmpは以下にあるdump.sqlをインポートします。
この際、dump.sqlにはデータベースを作成するSQLも含まれるので、データベースを作成、usersテーブルを作成、データをインポートしてくれます。
$ docker compose exec db bash
bash-5.1# mysql -u root -p < /tmp/dump.sql;
Enter password:
データができているか確認
mysqlにログインし、show databases;
でデータベースを確認します。
app_developmentがインポートされています。
実際に、usersテーブルの中身も確認するとデータが入っていることが確認できると思います。
bash-5.1# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 48
Server version: 8.0.37 MySQL Community Server - GPL
Copyright (c) 2000, 2024, 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> show databases;
+--------------------+
| Database |
+--------------------+
| app_development |
| app_test |
| information_schema |
| mydatabase |
| mysql |
| performance_schema |
| sys |
+--------------------+
7 rows in set (0.00 sec)
終わりに
dumpはやったことがなかったので、実際にやれてよかったです。
意外と簡単な手順でできるので、良かったらやってみてください。