• xtrabackup增量备份MySQL-5.7操作说明


    xtrabackup增量备份MySQL-5.7操作说明

    下载工具

    本方法利用xtrabackup二进制包,版本是2.4.26

    # 从官网下载二进制包:
    wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.26/binary/tarball/percona-xtrabackup-2.4.26-Linux-x86_64.glibc2.12.tar.gz
    
    #解压二进制包:
    tar -zxvf percona-xtrabackup-2.4.26-Linux-x86_64.glibc2.12.tar.gz 
    
    #移动目录:
    mv percona-xtrabackup-2.4.26-Linux-x86_64.glibc2.12 /usr/local/xtrabackup
    
    #配置PATH:
    vim /etc/profile
    
    #写下如下内容
    export PATH=$PATH:/usr/local/xtrabackup/bin
    
    #使其生效
    source /etc/profile
    
    #软链接
    ln -s /usr/local/xtrabackup/bin/innobackupex /usr/bin/innobackupex
    

    确定文件

    使用备份工具xtrabackup,首先该工具要和mysql在同一个服务器上,并且要知道如下内容才可使用备份功能

    # 1.配置文件路径:my.cnf 或者 mysqld.cnf
    # 7.mysql数据文件夹路径:data
    # 2.连接地址:如果是装在宿主机则填 127.0.0.1, 如果是装在容器则填容器网关
    # 3.端口:3306 或其它
    # 4.超级账号的账户:root 或其它
    # 5.超级账号的密码:123456 或其它
    # 6.socket文件:mysql.sock 或者 mysqld.sock
    
    

    开始备份

    因为增量备份是基于全量备份上进行的差额备份,所以先要有一次全量备份

    1.全量备份

    # 参数说明, innobackupex是xtrabackup的符号链接
    innobackupex --defaults-file=[mysql配置文件路径] \
    --datadir=[mysql数据文件夹路径] \
    --host=[mysql连接地址] \
    --port=[mysql端口] \
    --user=[mysql备份账号名称] \
    --password=[mysql备份账号密码] \
    --socket=[用于连接mysql的socket文件] \
    [指定备份存放路径]
    
    # 操作例子如下, 指定全量备份路径在 /backup/full
    innobackupex --defaults-file=/home/database/mysql-5.7/conf \
    --datadir='/home/database/mysql-5.7/data' \
    --host='127.0.0.1' \
    --port=3306 \
    --user=root \
    --password='abc1234' \
    --socket='/home/database/mysql-5.7/data/mysql.sock' \
    /backup/full
    
    # 备份好会出现 completed OK! 的字样, 按照例子出现的全量备份文件夹路径如下
    /backup/full/2022-08-30_14-20-55
    

    2.增量备份

    第一次增量备份是基于第一次全量备份上操作的

    # 参数说明
    innobackupex --defaults-file=[mysql配置文件路径] \
    --datadir=[mysql数据文件夹路径] \
    --host=[mysql连接地址] \
    --port=[mysql端口] \
    --user=[mysql备份账号名称] \
    --password=[mysql备份账号密码] \
    --socket=[用于连接mysql的socket文件] \
    --incremental-basedir=[指定前一次备份的目录] \
    --incremental=[指定增量备份存放的文件路径]
    
    # 操作例子如下
    innobackupex --defaults-file=/home/database/mysql-5.7/conf \
    --datadir='/home/database/mysql-5.7/data' \
    --host='127.0.0.1' \
    --port=3306 \
    --user=root \
    --password='abc1234' \
    --socket='/home/database/mysql-5.7/data/mysql.sock' \
    --incremental-basedir=/backup/full/2022-08-30_14-20-55 \
    --incremental /backup/inc 
    
    # 备份好会出现 completed OK! 的字样, 按照例子出现的第一次增量备份文件夹路径如下
    /backup/inc/2022-08-30_14-29-07
    

    第二次增量备份是基于前一次增量备份上操作的

    # 操作例子如下
    innobackupex --defaults-file=/home/database/mysql-5.7/conf \
    --datadir='/home/database/mysql-5.7/data' \
    --host='127.0.0.1' \
    --port=3306 \
    --user=root \
    --password='abc1234' \
    --socket='/home/database/mysql-5.7/data/mysql.sock' \
    --incremental-basedir=/backup/inc/2022-08-30_14-29-07 \
    --incremental /backup/inc
    
    # 备份好会出现 completed OK! 的字样, 按照例子出现的第二次增量备份文件夹路径如下
    /backup/inc/2022-08-30_14-34-11
    

    备份文件路径

    上述三个操作的文件路径如下:

    全量备份:/backup/full/2022-08-30_14-20-55
    增量备份1:/backup/inc/2022-08-30_14-29-07
    增量备份2:/backup/inc/2022-08-30_14-34-11
    

    开始还原

    1.停止数据库
    # 不允许mysql进程存在
    /etc/init.d/mysqld stop
    ps aux |grep "mysqld"
    kill -9 xxxx
    
    
    2.移除mysql原有数据
    # 创建一个新文件夹,移走原有data数据
    mkdir -p /home/database/mysql-5.7/data_bak
    mv /home/database/mysql-5.7/data/* /home/database/mysql-5.7/data_bak/
    
    
    3.合并增量备份
    # 先初始化全量
    innobackupex --apply-log --redo-only [全量备份目录]
    # 例子如下
    innobackupex --apply-log --redo-only /backup/full/2022-08-30_14-20-55
    
    
    
    # 初始化第一次增量
    innobackupex --apply-log --redo-only [全量备份目录] --incremental-dir=[第一次增量备份目录]
    # 例子如下
    innobackupex --apply-log --redo-only /backup/full/2022-08-30_14-20-55 --incremental-dir=/backup/inc/2022-08-30_14-29-07/
    
    
    # 初始化第二次增量, 因为这是最后一次增量, 所以不需要 --redo-only 参数
    innobackupex --apply-log [全量备份目录] --incremental-dir=[第二次增量备份目录]
    # 例子如下
    innobackupex --apply-log /backup/full/2022-08-30_14-20-55 --incremental-dir=/backup/inc/2022-08-30_14-34-11
    
    
    # 再初始化一次全量, 不需要 --redo-only 参数
    innobackupex --apply-log [全量备份目录]
    # 例子如下
    innobackupex --apply-log /backup/full/2022-08-30_14-20-55
    
    
    # 执行还原, 复制所有的备份到他们原来的位置
    innobackupex --datadir=[mysql数据文件夹路径] --copy-back [执行还原需要的全量备份目录]
    # 例子如下
    innobackupex --datadir='/home/database/mysql-5.7/data' --copy-back /backup/full/2022-08-30_14-20-55
    
    
    # 还原好会出现 completed OK! 的字样,此时重启 mysql 即可看到恢复的数据
    
  • 相关阅读:
    如何看待铺天盖地都是Python的广告?
    [MQ] 补充延迟队列两种方式/生产者确认机制
    Python基于随机游走模型的PageRank算法及应用
    第一篇【传奇开心果系列】Python深度学习库技术点案例示例:深度解读深度学习在自动驾驶领域的应用
    Android实验三:音乐播放器——图解详细教程
    在北京现场调试的这几天
    【毕业设计】深度学习中文文本分类(新闻分类 情感分类 垃圾邮件分类)
    # 用飞书来谈恋爱,飞书机器人定时给女朋友问好
    APS的主要功能有哪些?你了解吗?
    Python全栈开发【基础-02】计算机CPU内存基础详解
  • 原文地址:https://www.cnblogs.com/liantang-blog/p/16649240.html