概要
コンテナを使うことでローカル環境を汚さず
使い終わったらコンテナごと削除されます。
ダンプファイルはMySQLが提供しているサンプルを使用しています。
Other MySQL Documentation - Example Databases
使用しているダンプファイル: world database
環境
- Docker version 19.03
- MySQL 5.7
MySQLのコンテナを実行する
# コンテナを実行する
$ docker container run --rm --name some-mysql -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7
27b05b9a3337d930941c24e6a4ae507d206619de879e7067ef3855f6bc9710b5
# コンテナが実行されていることを確認する
$ docker container ls --filter "name=some-mysql"
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
27b05b9a3337 mysql:5.7 "docker-entrypoint.s…" 51 seconds ago Up 49 seconds 3306/tcp, 33060/tcp some-mysql
ダンプファイルからデータを復元する
# ホストにあるダンプファイルからコンテナにあるMySQLにデータを流し込む
$ docker container exec -i some-mysql /bin/bash -c 'mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /file/to/path/world.sql
データが復元されているか確認する
# コンテナに接続
$ docker container exec -it some-mysql /bin/bash
# MySQLに接続
root@container_id /# mysql -uroot -p$MYSQL_ROOT_PASSWORD -Dworld
# データーベースの確認
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| world |
+--------------------+
5 rows in set (0.00 sec)
# テーブルの確認
mysql> show tables;
+-----------------+
| Tables_in_world |
+-----------------+
| city |
| country |
| countrylanguage |
+-----------------+
# レコードの確認
mysql> select * from city;
+----+----------+-------------+----------+------------+
| ID | Name | CountryCode | District | Population |
+----+----------+-------------+----------+------------+
| 1 | Kabul | AFG | Kabol | 1780000 |
| 2 | Qandahar | AFG | Qandahar | 237500 |
...
| 4078 | Nablus | PSE | Nablus | 100231 |
| 4079 | Rafah | PSE | Rafah | 92020 |
+------+--------+-------------+----------+------------+
4079 rows in set (0.00 sec)
実行したコンテナを削除する
# コンテナを停止する
$ docker container stop some-mysql
some-mysql
# コンテナが削除されていることを確認する
$ docker container ls --filter "name=some-mysql"
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES