1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

mysqlのdumpをやったことがなく、前からやってみたいと思っていたので、今回試してみることにしました。

環境

簡単に環境は以下です。webコンテナとdbコンテナをdocker-compose.ymlで作成しています。

  • docker
  • rails7
  • mysql 8.0

dumpのやり方

userテーブルの作成とseedでデータを入れる

userテーブルを作成し、以下のようにseedでデータを入れます。

db > seeds.rb
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ファイルが作成されています。
image.png

中身はこんな感じのが記載されています。
image.png

データベースを削除

コンテナに入り、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はやったことがなかったので、実際にやれてよかったです。
意外と簡単な手順でできるので、良かったらやってみてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?