zoukankan      html  css  js  c++  java
  • 利用XtraBackup对MGR集群进行扩容

    运行了一段时间以后MGR集群,需要扩容节点,这是一个常见的需求。很多时候我们都喜欢用mysqldump工具来进行,因为这个工具有一个很好用的参数叫做master-data以及single-transaction,可以轻松的获取一致性备份。但是这个备份工具速度慢,无论导入导出速度都很慢,对于一个运行已久的系统来说并不现实,而且导出的文件会很大。
    对此我们可以利用xtrabackup工具来进行集群的扩容。
    首先我们对primary节点进行一次全量备份,这是备份脚本(假设新节点的域名叫做node-new,且ssh互信已完成):

    #!/bin/bash
    
    lsn_dir=/root/script/full
    dest_dir=/tmp/full
    
    # 删除原先的备份信息
    rm -rf ${lsn_dir}/*
    ssh root@node_new "rm -rf ${dest_dir/*}"
    
    # 利用流式备份完成全量备份
    xtrabackup --backup 
    --user=bkpuser 
    --password=P@ssw0rd! 
    --socket=/usr/local/mysql/mysql.sock 
    --extra-lsndir=${lsn_dir} 
    --stream=xbstream 
    --compress | ssh root@node-new "xbstream -x -C /tmp/full"
    

    这个脚本执行完成之后,备份集就会在目标节点的/tmp/full目录下了。此时新节点上的datadir应该是空的,保证备份能够正常恢复。
    此时执行这些命令进行还原:

    # 备份是压缩的,要用qpress解压,确认qpress在本机的/usr/bin目录下
    innobackupex --decompress /tmp/full
    
    # 准备备份集
    xtrabackup --prepare --apply-log-only --target-dir=/tmp/full
    
    # 复制备份集到数据目录
    xtrabackup --copy-back --target-dir=/tmp/full
    
    # 启动mysql
    chown -R mysql.mysql /usr/local/mysql/data
    systemctl start mysqld
    

    备份集中有一个文件叫做xtrabackup_info,里面有一个项目叫做binlog_pos,注意这项,记录下里面的GTID。
    正常启动MySQL之后,就可以开始进行一些配置:

    set sql_log_bin=0;
    reset master;
    set global gtid_purged='刚才记录下的GTID';
    start group_replication;
    

    方法比较简单,总结下来最重要的一点就是要获得一致性备份,利用这个一致性备份快速的部署一台节点。
    在有的资料上还会提及要在新节点上执行change master语句,其实是不需要的,因为我们之前的步骤中已经手动指定了gtid_purged,只需要在这个GTID之后开启复制即可。

    本文参考了下面链接中的思路:
    如何优雅地添加MGR节点

  • 相关阅读:
    Sys 模块
    Select,poll,epoll复用
    Urllib模块
    多线程模块
    设计模式四:观察者,模板方法,命令,状态,职责链条,解释器,中介者,访问者,策略,备忘录,迭代器
    设计模式三:适配器,桥接,组合,装饰,外观,享元,代理
    设计模式二:建造者,原型,单例
    【Unix 网络编程】TCP状态转换图详解(转)
    Mysql系列:MySql 数据库设计与基本使用
    lombok builder源码解读
  • 原文地址:https://www.cnblogs.com/wingsless/p/13202459.html
Copyright © 2011-2022 走看看