暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

快速上手MySQL 8.4.3 :基于 Xtrabackup 在线搭建主从复制实战2-GTID版

24

01



引言

  • 1、主从复制的作用和优势
    主从复制是 MySQL 中常用的一种数据同步机制,通过将主服务器(Master)的数据实时复制到一个或多个从服务器(Slave),可以实现负载均衡、数据备份、高可用性等目标。例如,主服务器负责写操作,而从服务器可以分担读操作的压力,从而提高系统的整体性能。

  • 2、Xtrabackup 工具的作用
    Xtrabackup 是 Percona 公司开发的一款开源备份工具,支持 MySQL 的热备份(即在数据库运行时不锁定表的情况下进行备份)。它特别适合用于大数据量的备份和恢复,并且能够保证数据的一致性。

  • 3、本文目标
    本文将详细介绍如何在 MySQL 8 环境中,使用 Xtrabackup 工具在线搭建主从复制架构,确保数据的高可用性和一致性。


  • 02



    环境准备

    • 操作系统:建议使用 Linux 发行版(如 CentOS 7/8 或 Ubuntu 18.04/20.04)。

    • MySQL 版本:MySQL 8.x,确保主从服务器的 MySQL 版本一致。

    • Xtrabackup 版本:Percona Xtrabackup 8.x,与 MySQL 8 兼容。

    • 2.1 系统要求

    • 2.2 安装 MySQL 8
      在主从服务器上分别安装 MySQL 8。可以通过官方仓库或 MySQL 官网下载安装包。安装完成后,确保 MySQL 服务正常运行。

    • 2.3 安装 Xtrabackup
      Xtrabackup 可以通过 Percona 的官方仓库安装。安装完成后,使用 xtrabackup --version
       命令验证是否安装成功。



03



主从复制原理

  • 二进制日志(Binary Log)
    MySQL 的主从复制依赖于二进制日志。主服务器将所有写操作记录到二进制日志中,从服务器通过读取这些日志来同步数据。

  • GTID(全局事务标识符)
    GTID 是 MySQL 5.6 引入的特性,用于简化主从复制的管理。每个事务都有一个唯一的 GTID,从服务器可以通过 GTID 精确地定位需要同步的数据。

  • 复制线程

    • IO Thread:从服务器连接到主服务器,读取二进制日志并保存到本地的中继日志(Relay Log)。

    • SQL Thread:从服务器读取中继日志中的事件并执行,从而实现数据同步。


04



主库配置

4.1 修改主服务器配置文件
编辑 MySQL 的配置文件(通常为 /etc/my.cnf
 或 /etc/mysql/mysql.conf.d/mysqld.cnf

    [root@node1 soft]# grep server-id etc/my.cnf
    server-id1
    [root@node1 soft]# grep log-bin etc/my.cnf
    log-bin=/data/mysql/data/mysql-bin
    [root@node1 soft]# grep gtid_mode etc/my.cnf
    #gtid_mode = on
    [root@node1 soft]# grep enforce_gtid_consistency etc/my.cnf
    #enforce_gtid_consistency = on


    #发现被注释了,因此进行生效
    [root@node1 soft]# vi etc/my.cnf
    [root@node1 soft]#
    [root@node1 soft]#
    [root@node1 soft]# grep gtid_mode etc/my.cnf
    gtid_mode = on
    [root@node1 soft]# grep enforce_gtid_consistency etc/my.cnf
    enforce_gtid_consistency = on
    [root@node1 soft]#


    复制

    保存后重启 MySQL 服务。


    4.2 创建复制用户
    在主服务器上创建一个专门用于复制的用户,并授予复制权限:
      create user 'mysql_rep'@'%' IDENTIFIED WITH mysql_native_password BY 'Vdj8v0+b+0+XyrJRrG2e';
      GRANT ALL PRIVILEGES ON *.* TO 'mysql_rep'@'%';
      flush privileges;
      复制

      4.3 重启 MySQL 服务
      重启 MySQL 以使配置生效:
        service mysql restart 
        复制

        05



        Xtrabackup备份主库数据

        5.1 执行全量备份
        在主库上使用 Xtrabackup 执行全量备份:
          /data/soft/percona-xtrabackup/bin/xtrabackup --defaults-file=/etc/my.cnf --no-server-version-check --host=localhost --port=3306  --compress --compress-threads=2 --user=root --password=***** --backup  --target-dir=/data/backup/
          复制
          本次使用--compress压缩备份,经统计验证压缩备份比 10:1。
          因主服务器磁盘空间不太多,因此通过scp 命令将数据传输至从节点数据库

          06



          从库配置操作

          6.1 修改从服务器配置文件

          • 配置 my.cnf
             文件,启用 GTID 和设置唯一的 server-id

            [mysqld]
            server-id=2
            gtid_mode=ON
            enforce_gtid_consistency=ON




            [root@node2 soft]# grep server-id etc/my.cnf
            server-id20
            [root@node2 soft]# grep gtid_mode etc/my.cnf
            gtid_mode = on
            [root@node2 soft]# grep enforce_gtid_consistency etc/my.cnf
            enforce_gtid_consistency = on
            [root@node2 soft]#
            复制
            6.2 解压备份
            通过scp命令传输完成后,使用 --decompress  选项解压备份数据
              [root@node2 soft]# data/soft/percona-xtrabackup/bin/xtrabackup --no-server-version-check --decompress  --target-dir=/data/backup
              2025-03-21T15:35:08.408410+08:00 0 [Note] [MY-011825] [Xtrabackup] recognized server arguments: --datadir=/data/mysql/data --server-id=20 --open_files_limit=65535 --innodb_file_per_table=1 --log_bin=/data/mysql/data/mysql-bin --innodb_log_files_in_group=5 --innodb_undo_directory=/data/mysql/data --innodb_buffer_pool_size=8455346892 --innodb_log_file_size=1G --innodb_log_buffer_size=100M
              2025-03-21T15:35:08.408688+08:00 0 [Note] [MY-011825] [Xtrabackup] recognized client arguments: --socket=/data/mysql/data/mysql.sock --no-server-version-check=1 --decompress=1 --target-dir=/data/backup
              /data/soft/percona-xtrabackup/bin/xtrabackup version 8.3.0-1 based on MySQL server 8.3.0 Linux (x86_64) (revision id: 3e4e7ce9)
              2025-03-21T15:35:08.409329+08:00 0 [Note] [MY-011825] [Xtrabackup] decompressing ./xtrabackup_logfile.zst
              2025-03-21T15:35:08.425631+08:00 0 [Note] [MY-011825] [Xtrabackup] decompressing ./ibdata1.zst
              2025-03-21T15:35:08.441156+08:00 0 [Note] [MY-011825] [Xtrabackup] decompressing ./sys/sys_config.ibd.zst
              2025-03-21T15:35:08.446337+08:00 0 [Note] [MY-011825] [Xtrabackup] decompressing ./mysql.ibd.zst
              复制


              6.3 准备备份
              解压完成后,使用 --prepare
               选项准备备份数据,确保数据的一致性:
                /data/soft/percona-xtrabackup/bin/xtrabackup --prepare   --target-dir=/data/backup
                复制
                如图解压完成 我们可以进行数据恢复操作。
                6.4 恢复数据库
                备库恢复数据文件:
                  /data/soft/percona-xtrabackup/bin/xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/backup
                  复制

                  6.5设置文件权限
                  • 修改数据目录的权限以确保 MySQL 可以访问。

                    • chown -R mysql:mysql data/mysq/data
                      复制




                    • 6.6 启动从服务器 MySQL 服务

                      • 启动 MySQL 服务并检查数据是否恢复成功。


                    07



                    配置主从同步

                    7.1获取主服务器的 log文件和pos 信息(本次采取GTID同步)
                      这个文件里面有相关对应信息:xtrabackup_info
                      [root@node2 backup]# grep binlog_pos xtrabackup_info
                      binlog_pos = filename 'mysql-bin.000004', position '198', GTID of the last change '730fb145-0623-11f0-b824-000c29706275:1-8'
                      复制

                      7.2 在从库上配置复制
                        reset master;


                        #8.4.3版本使用replication而不是slave
                        CHANGE REPLICATION SOURCE TO
                        SOURCE_HOST='192.168.**.***',
                        SOURCE_PORT=3306,
                        SOURCE_USER='mysql_rep',
                        SOURCE_PASSWORD='****',
                        SOURCE_AUTO_POSITION=1;
                        复制
                        7.3 启动从服务器复制进程
                        • 启动复制进程并检查状态。

                          start replica;
                          show replica status\G
                          复制

                          检查发现存在差异,等待binLog应用和追齐。

                          08



                          验证主从复制


                          • 8.1 检查复制状态

                            • 使用 SHOW SLAVE STATUS\G
                               检查复制是否正常运行。


                          • 8.2 测试数据同步

                            • 在主服务器上创建测试数据,验证从服务器是否同步成功。


                          • 总结:

                          • 通过本文的步骤,您可以成功使用 Xtrabackup 在 MySQL 8 中在线搭建主从复制环境。

                          • 主从复制不仅提高了系统的可用性和性能,还为数据备份和灾难恢复提供了保障。

                          • 建议进一步学习 MySQL 的高级复制特性,如半同步复制、多线程复制等。


                          参考资料

                          • MySQL 8 官方文档:https://dev.mysql.com/doc/refman/8.0/en/


                          • Percona Xtrabackup 官方文档:https://www.percona.com/software/mysql-database/percona-xtrabackup



                          文章转载自山佳数峰寻道,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                          评论