MySQL容器數據同步是將一個容器中的MySQL數據庫數據復制到另一個容器中的過程。常見的應用場景包括:
- 將生產環境的MySQL數據同步到測試環境的容器中,以便進行測試。
- 將一個容器中的MySQL數據備份到另一個容器中,以實現數據的冷備份。
- 將一個容器中的MySQL數據同步到另一個地理位置的容器中,以實現數據的熱備份。
下面我們演示一下如何使用docker-compose和mysqldump實現容器數據同步。
version: '3'
services:
db:
image: mysql:5.7
container_name: db
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
- /docker/mysql/data:/var/lib/mysql
db-copy:
image: mysql:5.7
container_name: db-copy
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
- /docker/mysql/data-copy:/var/lib/mysql
command:
- sh
- -c
- >mysqldump -u root -p${MYSQL_ROOT_PASSWORD} --databases db >/tmp/db.sql
&& mysql -u root -p${MYSQL_ROOT_PASSWORD}< /tmp/db.sql
在上述docker-compose文件中,我們定義了兩個MySQL容器,一個名為db,另一個是db-copy。這兩個容器都運行相同的MySQL 5.7的鏡像。其中db容器是源容器,存儲了我們的MySQL數據;db-copy容器是目標容器,我們將通過mysqldump將源容器中的數據轉儲到/tmp/db.sql文件中,并將這個文件導入到目標容器中,從而實現容器數據同步。
我們可以通過docker-compose up啟動這兩個容器:
$ docker-compose up -d
這時我們可以登錄到db容器中,往其中插入一些數據:
$ docker exec -it db mysql -uroot -ppassword
mysql>CREATE DATABASE db;
mysql>USE db;
mysql>CREATE TABLE users (id INT, name VARCHAR(20));
mysql>INSERT INTO users VALUES (1, 'John'), (2, 'Jane');
當我們確認數據已經在db容器中被創建后,我們可以執行mysqldump并將數據導入到db-copy容器中:
$ docker exec -it db-copy bash
root@db-copy:/# mysqldump -u root -ppassword --databases db >/tmp/db.sql
root@db-copy:/# mysql -u root -ppassword< /tmp/db.sql
現在我們可以登錄到db-copy容器中檢查數據是否被正確地導入了:
$ docker exec -it db-copy mysql -uroot -ppassword
mysql>USE db;
mysql>SELECT * FROM users;
+------+-------+
| id | name |
+------+-------+
| 1 | John |
| 2 | Jane |
+------+-------+
2 rows in set (0.00 sec)
這時我們已經成功地將db容器中的數據同步到了db-copy容器中。
上一篇mysql容器登錄
下一篇mysql 數據庫不存在