mysql数据同步

快速开始

    1. 核心流程
      • 拉取xtrabackup镜像文件,并导入到本机服务器
        1. docker load < xtrabackup.tar.gz
      • 启动服务:
        1. docker run -ti -e TZ=Asia/Shanghai -name=xtrabackup -v /opt/homology/mysql3306/:/data xtrabackup:latest
    1. 导出数据
      • 进入容器内:
        1. docker exec -ti xtrabackup /bin/bash
      • 导出数据库文件:
        1. innobackupex --user=xxx --password=xxx --port=3306 --host=x.x.x.x --socket=/data/socket/mysqld.sock --datadir=/data/data /data/backup/
      • 退出容器并将mysql压缩包拷贝到从服务器:
        1. scp -r /opt/homology/mysql3306/backup/2022-10-31_14-32-28 root@IP:/opt/homology/mysql3306/backup/
    1. 导入数据
      • 进入从机器初始化环境并参照主节点启动xtrabackup容器,并且进入到xtrabackup容器中。
      • 在从库节点上apply redo log到数据文件(Apply过程中会同时根据backup-my.cnf创建ib_logfile、ibtmp):
        1. 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
      • 开始导入数据:
        1. 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
      • 启动从库实例

        配置主从实时同步

    1. 清理从库本地binlog
      • 进入到从库数据库容器中
        1. mysql> RESET MASTER;
        2. mysql> RESET SLAVE ALL;
    1. 在从库上建立与主库的主从同步关系
      • 首先,查看xtrabackup数据备份中的xtrabackup_binlog_info文件,备份主库时binlog文件名—下图中红色框内标记的值,备份主库时最后一个事务ID—下图中黄色框内标记的值,备份主库时最后一个事务的GTID—下图中蓝色框内标记的值
        1. cat backup/2022-10-31_14-32-28/xtrabackup_binlog_info
    1. 在从库执行
      1. 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;
    1. 开启同步并查看状态
      1. mysql> START SLAVE;
      2. mysql> SHOW SLAVE STATUS\G;
      • 查看 Slave_IO_Running和Slave_SQL_Running是否为Yes
    1. 注意事项
      • 从库启动时候一定要修改server-id和master保持不同/opt/homology/mysql3306/conf/my.cnf
      • 启动完成后要确保/opt/homology/mysql3306/socket/mysqld.sock存在,否则数据库启动失败

        切换主从

    1. 停止对外提供服务,并关闭相关服务
    1. 检查两个数据库数据是否已经一致
      • 分别进入主从数据库容器内,执行以下命令校验是否相同
        1. mysqldump -uroot --skip-dump-date | md5sum
    1. 在从库执行:
      1. stop slave
    1. 在主库执行:
      1. reset slave all
    1. 记录从库的二进制日志坐标:
      1. show master status
    1. 检查从库是否可写(设置可读写set global read_only=0;):
      1. show global variables like "%read_only%";
    1. 重新启动服务并指向新的数据库地址
文档更新时间: 2022-11-17 05:56   作者:admin