mysql数据同步
快速开始
- 核心流程
- 拉取xtrabackup镜像文件,并导入到本机服务器
docker load < xtrabackup.tar.gz
- 启动服务:
docker run -ti -e TZ=Asia/Shanghai -name=xtrabackup -v /opt/homology/mysql3306/:/data xtrabackup:latest
- 拉取xtrabackup镜像文件,并导入到本机服务器
- 核心流程
- 导出数据
- 进入容器内:
docker exec -ti xtrabackup /bin/bash
- 导出数据库文件:
innobackupex --user=xxx --password=xxx --port=3306 --host=x.x.x.x --socket=/data/socket/mysqld.sock --datadir=/data/data /data/backup/
- 退出容器并将mysql压缩包拷贝到从服务器:
scp -r /opt/homology/mysql3306/backup/2022-10-31_14-32-28 root@IP:/opt/homology/mysql3306/backup/
- 进入容器内:
- 导出数据
- 导入数据
- 进入从机器初始化环境并参照主节点启动xtrabackup容器,并且进入到xtrabackup容器中。
- 在从库节点上apply redo log到数据文件(Apply过程中会同时根据backup-my.cnf创建ib_logfile、ibtmp):
innobackupex --apply-log /data/backup/2022-10-31_14-32-28/ --user=xxx --password=xxx --port=3306 --host=x.x.x.x --socket=/data/socket/mysqld.sock
- 开始导入数据:
innobackupex --copy-back /data/backup/2022-10-31_14-32-28/ --user=xxx --password=xxx --port=3306 --host=x.x.x.x --socket=/data/socket/mysqld.sock
- 启动从库实例
配置主从实时同步
- 导入数据
- 清理从库本地binlog
- 进入到从库数据库容器中
mysql> RESET MASTER;
mysql> RESET SLAVE ALL;
- 进入到从库数据库容器中
- 清理从库本地binlog
- 在从库上建立与主库的主从同步关系
- 首先,查看xtrabackup数据备份中的xtrabackup_binlog_info文件,备份主库时binlog文件名—下图中红色框内标记的值,备份主库时最后一个事务ID—下图中黄色框内标记的值,备份主库时最后一个事务的GTID—下图中蓝色框内标记的值
cat backup/2022-10-31_14-32-28/xtrabackup_binlog_info
- 首先,查看xtrabackup数据备份中的xtrabackup_binlog_info文件,备份主库时binlog文件名—下图中红色框内标记的值,备份主库时最后一个事务ID—下图中黄色框内标记的值,备份主库时最后一个事务的GTID—下图中蓝色框内标记的值
- 在从库上建立与主库的主从同步关系
- 在从库执行
mysql> CHANGE MASTER TO MASTER_HOST='x.x.x.x',MASTER_USER='xxx',MASTER_PASSWORD='xxx',MASTER_LOG_FILE='mysql-bin.0000xx',MASTER_LOG_POS=xxx;
- 在从库执行
- 开启同步并查看状态
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G;
- 查看 Slave_IO_Running和Slave_SQL_Running是否为Yes
- 开启同步并查看状态
- 停止对外提供服务,并关闭相关服务
- 检查两个数据库数据是否已经一致
- 分别进入主从数据库容器内,执行以下命令校验是否相同
mysqldump -uroot --skip-dump-date | md5sum
- 分别进入主从数据库容器内,执行以下命令校验是否相同
- 检查两个数据库数据是否已经一致
- 在从库执行:
stop slave
- 在从库执行:
- 在主库执行:
reset slave all
- 在主库执行:
- 记录从库的二进制日志坐标:
show master status
- 记录从库的二进制日志坐标:
- 检查从库是否可写(设置可读写set global read_only=0;):
show global variables like "%read_only%";
- 检查从库是否可写(设置可读写set global read_only=0;):
- 重新启动服务并指向新的数据库地址
文档更新时间: 2022-11-17 05:56 作者:admin