备份主库原有数据
使用已经主从部署好的主库master作为本次测试的主库
-
创建好数据卷文件
mkdir /home/lxj/hedisql/data/slave3
-
创建并运行slave3容器
docker run --name slave3 -e MYSQL_ROOT_PASSWORD=123456 -v /home/lxj/heidisql/data/slave3:/var/lib/mysql -p 53306:3306 --restart always -d mariadb
-
拷贝一份MySQL配置文件
sudo docker cp slave3:/etc/mysql/my.cnf /home/lxj/hedisql/data/slave3_my.cnf
- 修改slave1_my.cnf,在 [mysqld] 节点下添加
[mysqld]
server-id=4
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
relay_log_recovery=1
- 复制slave3_my.cnf并覆盖slave3中的my.cnf
docker cp /home/lxj/heidisql/data/slave3_my.cnf slave3:/etc/mysql/my.cnf
- 重启slave1容器
docker restart slave3
- 锁定主数据库
锁定主数据库,只允许读取不允许写入,这样做的目的是防止备份过程中或备份完成之后有新数据插入,导致备份数据和主数据数据不一致。
docker exec -it master /bin/bash
mysql -uroot -p123456
flush tables with read lock;
查询主数据库状态,并记下File及Position的值
show master status;
+------------------------------+
| File | Position |
+-------------------+----------+
| master-bin.000009 | 343 |
+-------------------+----------+
执行docker mariadb备份(如果备份所有数据库里的信息edslxj改为–all-databases既可)命令
docker exec master /usr/bin/mysqldump -p123456 edslxj > backup.sql
需要先在从数据库建立一个同名数据库,才能导入主数据库备份数据。切换到从数据库执行
CREATE DATABASE edslxj;
然后再导入主数据备份数据。
cat backup.sql | docker exec -i slave3 /usr/bin/mysql -p123456 edslxj
此时备份数据导入已完成。
只要像正常配置从库操作即可(具体操作可以查看文档MariaDB的主从复制部署)。
- 解锁主数据库
从库配置完成之后,切换回主数据库的终端,进行表解锁操作。
unlock tables;