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

快速上手MySQL 8 :基于 Xtrabackup 在线搭建主从复制实战

山佳数峰寻道 2025-03-10
316

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

    • server-id=1               # 主服务器的唯一标识
      log_bin=mysql-bin         # 启用二进制日志

      如果没有还要额外添加。



    保存后重启 MySQL 服务。
    4.2 创建复制用户
    在主服务器上创建一个专门用于复制的用户,并授予复制权限:
      CREATE USER 'mysql_rep'@'%' IDENTIFIED BY 'repl_password';
      GRANT REPLICATION SLAVE 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

            server-id=2
            gtid_mode=ON
            enforce_gtid_consistency=ON
            6.2 解压备份
            通过scp命令传输完成后,使用 --decompress  选项解压备份数据
              /data/soft/percona-xtrabackup/bin/xtrabackup --defaults-file=/etc/my.cnf --decompress  --target-dir=/data/backup
              报错如下:
                2025-03-10T20:49:15.107782+08:00 0 [Note] [MY-011825] [Xtrabackup] recognized server arguments: --datadir=/data/mysql/data --server-id=100 --open_files_limit=65535 --innodb_file_per_table=1 --log_bin=/data/mysql/data/mysql-bin --innodb_log_files_in_group=5 --innodb_log_group_home_dir=/data/mysql/data --innodb_undo_directory=/data/mysql/data --innodb_buffer_pool_size=16455346892 --innodb_log_file_size=1G --innodb_log_buffer_size=100M 
                2025-03-10T20:49:15.107925+08:00 0 [Note] [MY-011825] [Xtrabackup] recognized client arguments: --socket=/data/mysql/data/mysql.sock --decompress=1 --target-dir=/data/backup 
                /data/soft/percona-xtrabackup/bin/xtrabackup version 8.0.33-28 based on MySQL server 8.0.33 Linux (x86_64) (revision id: b3a3c3dd)
                2025-03-10T20:49:15.108676+08:00 0 [Note] [MY-011825] [Xtrabackup] decompressing ./xtrabackup_logfile.qp
                sh: 1: qpress: not found
                cat: write error: Broken pipe
                2025-03-10T20:49:15.216597+08:00 0 [ERROR] [MY-011825] [Xtrabackup] decrypt and decompress thread 0 failed.
                - qpress 是一个压缩工具,通常用于在备份过程中对数据进行压缩以节省存储空间和传输时间。在Linux环境下,它往往被集成到一些高级备份工具如xtrabackup中。 - xtrabackup是一个用于备份MySQL数据库的热备份工具,它能够备份InnoDB和XtraDB两种存储引擎的数据文件。xtrabackup还提供了一种压缩备份数据的能力,而qpress就是它使用的压缩工具。
                  ---手工将qpress放到服务器上
                  chmod +x qpress
                  cp qpress usr/bin 
                  cp qpress usr/sbin 
                  然后再次进行解压操作,如图解压完成

                  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 信息(本次采取传统复制)
                          这个文件里面有相关对应信息:xtrabackup_info
                          # grep binlog_pos xtrabackup_info
                          binlog_pos = filename 'mysql-bin.000215', position '157'
                          7.2 在从库上配置复制
                            reset master;


                            change master to
                            master_host='主库IP',
                            master_port=3306, 
                            master_user='mysql_rep',
                            master_password='lq****4N',
                            master_log_file='mysql-bin.000215',
                            master_log_pos=157;
                            7.3 启动从服务器复制进程
                            • 启动复制进程并检查状态。

                              start slave;
                              show slave 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                              评论