Xtrabackup mysql 行热备步骤



# 执行备份(InnoDB 热备,MyISAM 表会短暂锁表)


  第一步:在主库执行备份(热备,不影响业务)
  

xtrabackup \
  --backup \
  --target-dir=/backsql/full_$(date +%Y%m%d) \
  --user=root \
  --host=192.168.11.16
  --password='host主机密码'


  
  第二步:准备备份(应用 redo log,使其一致)
  
  

xtrabackup \
  --prepare \
  --target-dir=/backsql/full_$(date +%Y%m%d)

  
    
  第三步:查看备份对应的 GTID 位置(关键!)
   

 cat /backsql/full_$(date +%Y%m%d)/xtrabackup_binlog_info

    
  第四步:将备份传输到从库
  
   # 在主库打包(可选,节省传输时间)
   

 tar -czf full_backup.tar.gz -C /backsql full_$(date +%Y%m%d)


    # 传输到从库(使用 rsync 更高效)
   

 rsync -avP full_backup.tar.gz ttx14@192.168.11.14:/data/backup/


    # 或直接 scp
    

scp full_backup.tar.gz user@slave_ip:/data/backup/

    ---备选---
    # 在从库上执行

   

 sudo rsync -avP --progress sr868@192.168.11.16:/backsql/full_backup.tar.gz /data/backup/

    rsync -avP full_backup.tar.gz slave_host:/data/backup/


    第五步:在从库恢复备份
    
        1. 停止 MySQL
        

systemctl stop mysqld    # 或 service mysql stop

    
        2. 备份原数据目录(可选,安全起见
       

 mv /var/lib/mysql /var/lib/mysql_old_$(date +%Y%m%d)
        mkdir -p /var/lib/mysql

        
        3. 解压并恢复数据
        

cd /data/backup
        tar -xzf full_backup.tar.gz


        4. 使用 xtrabackup 恢复(自动处理权限和文件)
       

 xtrabackup \
        --copy-back \
        --target-dir=/data/backup/full_20251124  # 替换为实际目录名(这里指备份目录,数据库目录会自动获取)


        5. 修复权限(MySQL 用户必须可读写)
       

 chown -R mysql:mysql /var/lib/mysql

        
    第六步:启动 MySQL 并设置 GTID_PURGED
        

    1. # 可选:在 my.cnf 中临时加 skip-slave-start(避免自动启动复制报错)
        echo "skip_slave_start = ON" >> /etc/mysql/mysql.conf.d/my.cnf

        systemctl start mysqld

        
        2. 设置 gtid_purged(关键!)
        
        登录 MySQL:
        -- 重置之前的复制信息
       

 RESET SLAVE ALL;
 RESET MASTER;


        -- 设置 GTID_PURGED 为备份时的值(替换为你自己的, 有多台服务器历史的, 可能有多个ID, 如下
        

SET @@GLOBAL.gtid_purged = 
'3edd2368-6f2a-11ed-b003-0894effc92ae:1-4775871935,bda50951-2cd1-11ed-91fa-0894effe9b14:387203643-5272758832';

        
        PS: 主库查询的GTID
        

cat /backsql/full_$(date +%Y%m%d)/xtrabackup_binlog_info
        mysql-bin.027473    6095    
3edd2368-6f2a-11ed-b003-0894effc92ae:1-4775871935,bda50951-2cd1-11ed-91fa-0894effe9b14:387203643-5272758832

        
    第七步:配置主从复制(GTID 自动定位)
        
        

CHANGE MASTER TO
        MASTER_HOST='192.168.11.16',
        MASTER_PORT=3306,
        MASTER_USER='wmsrepl',
        MASTER_PASSWORD='Ttx@2011',
        MASTER_AUTO_POSITION = 1;

        START SLAVE;

    
    第八步:验证复制状态    
        

SHOW SLAVE STATUS\G;

        
        
    
    正常应看到:

    

    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    Seconds_Behind_Master: 逐渐减少至 0
    
    Retrieved_Gtid_Set 和 Executed_Gtid_Set 持续增长

        
        
    
    -- 创建一个新用户 'pt_user',允许从你的机器 (192.168.11.16) 连接
    

CREATE USER 'pt_user'@'192.168.11.16' IDENTIFIED WITH mysql_native_password BY '你的密码';


    -- 授予该用户执行所需的所有权限
    

GRANT RELOAD, REPLICATION CLIENT ON *.* TO 'pt_user'@'192.168.11.16';


    -- 刷新权限
   

 FLUSH PRIVILEGES;
 EXIT;


    

白俊遥博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论