开发者

MySQL物理备份与恢复工具XtraBackup使用小结

开发者 https://www.devze.com 2024-08-12 13:11 出处:网络 作者: 雨下的竹子
目录1.描述2.安装3.使用3.1 备份源数据库3.2 恢复到目标数据库3.2.1 恢复目录3.2.2 解压文件3.2.3 应用日志3.2.4 复制数据3.2.5 启动4.使用总结4.1 备份4.2 恢复4.3 例子1.描述
目录
  • 1.描述
  • 2.安装
  • 3.使用
    • 3.1 备份源数据库
    • 3.2 恢复到目标数据库
      • 3.2.1 恢复目录
      • 3.2.2 解压文件
      • 3.2.3 应用日志
      • 3.2.4 复制数据
      • 3.2.5 启动
  • 4.使用总结
    • 4.1 备份
      • 4.2 恢复
        • 4.3 例子

        1.描述

        借助Percona XtraBackup工具实现mysql的物理备份与恢复,相当于将整个MySQL进行了复制,再粘贴到其他地方运行。

        2.安装

        XtraBackup与MySQL版本对应关系:

        XtraBackupMySQL
        percona-xtrabackup-245.7
        percona-xtrabackup-808
        percona-xtrabackup-818.1
        percona-xtrabackup-828.2
        percona-xtrabackup-838.3
        yum -y install percona-xtrabackup-24
        yum -y install rsync
        yum -y install perl-Digest-MD5
        yum -y install qpress
        

        3.使用

        3.1 备份源数据库

        #读取指定配置文件中的信息,压缩mysql的数据,输出到/my编程客栈sql目录下,再重定向到test.xbstream文件中(相当于tar包)。
        innobackupex --defaults-file=/etc/my.cnf  --user=root --password='123456' --port=3306 --socket=/tmp/mysql.sock --stream=xbstream --compress --parallel=8 --compress-threads=8 /mysql > /databak/test.xbstream
        

        –defandroidaults-file指定mysql配置文件,需要包含datadir等信息

        –stream采用流的方式备份,这android样可以选择输出到本地或远程

        3.2 恢复到目标数据库

        如果恢复位置不在同一台服务器,可以通过scp进行文件传输。

        3.2.1 恢复目录

        #相当于解压tar包,输出到指定目录下
        xbstream -x < /databak/test.xbstream -C /databak/test
        

        3.2.2 解压文件

        #对前一步输出目录下的所有压缩文件进行解压
        innobackupex --decompress --parallel=8 --compress-threads=8 /databak/test
        

        3.2.3 应用日志

        #通过redo同步已提交的事务,使数据文件保持一致
        innobackupex --apply-log /databak/test
        

        3.2.4 复制数据

        复制数据前,先停止目标MySQL,删除他的data目录和日志目录

        #将数据文件拷贝到目标MySQL的数据目录下
        innobackupex --defaults-file=/etc/my.cnf  --parallel=8 --copy-back /databak/test
        

        3.2.5 启动

        #修改mysql相关的文件持有者为mysql用户
        chown -R mysql.mysql /data/mysql
        #启动mysql
        systemctl start mysqld
        

        如果是目标MySQL是从服务器,需要恢复主从关系

        #查看备份的数据最后的binlog的偏移量,或者gtid
        cat /databak/test/xtrabackup_binlog_info
        #格式如下:
        #mysql-bin.000001        3229488  87bd47b9-12f6-11ed-ae2c-0050569534a2:1-6,8cdb65cf-12f6-11ed-aab7-005056950a99:1-139
        

        连接到MySQL客户端:

        stop slave;
        #清理中继日志
        reset slave;
        #清理binlog
        reset master;
        #设置已经执行但本地binlog中未记录的gtid集合
        set @@global.gtid_purged='87bd47b9-12f6-11ed-ae2c-0050569534a2:1-6,8cdb65cf-12f6-11ed-aab7-005056950a99:1-139';
        #重新建立主从关系
        change master to master_host='192.168.86.111',master_port=3306,master_user='backuser',master_password='123456', master_auto_position=1 ;
        start slave;
        show slave status\G
        

        4.使用总结

        环境:96核 754G内存 30T磁盘(生产环境的物理机)

        4.1 备份

        压缩效率:XtraBackup默认采用的zstd压缩算法,理论压缩比为5:1。实际使用中,一个MySQL实例由3.2t压缩为502G;另一个MySQL实例由5.7t压缩为825G,压缩比达到6:1以上

        备份速度:一个MySQL实例备份生成502G的压缩文件,耗时大约50分钟,判断每10分钟生成100G的压缩文件。如果5个t的数据,压缩后可能为800G,则耗时约80分钟。

        传输文件:通过scp传输文件,速度约为350-450MB/s,500Gphp需要20-25分钟

        4.2 javascript恢复

        恢复包含多个步骤:

        恢复目录:将压缩文件解包到指定目录下,速度较快,约10-20分钟

        解压:一个MySQL实例为512G,解压后3.6T,解压耗时约37分钟,约10分钟1T

        应用日志:一个MySQL实例耗时约15分钟

        复制:一个MySQL实例,3.6T数据复制耗时约40分钟,约10分钟1T

        4.3 例子

        综上,假设现有5T的数据需要处理,从备份到恢复的整个流程耗时如下:

        • 备份,5T按6:1压缩至800G,耗时80分钟
        • 传输,scp按450M/s,耗时30分钟
        • 恢复,20分钟
        • 解压,10分钟1T,耗时50分钟
        • 应用日志,20分钟
        • 复制,10分钟1T,耗时50分钟

        在以上理想情况下,5T数据至少需要4个小时以上,实际可能5-6小时

        到此这篇关于MySQL物理备份与恢复工具XtraBackend使用小结的文章就介绍到这了,更多相关MySQL XtraBackend使用内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

        0

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        关注公众号