centos7安装percona xtrabackup详解和mysql备份恢复实战

xtrabackup介绍:

  • xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写)
  • xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表
  • innobackupex实际上是percona-xtrabackup的perl整合脚本,功能当然更强大一些.
  • innobackupex主要是为了方便的 同时备份InnoDB和MyISAM引擎的表,但在处理myisam时需要加一个读锁。并且加入了一些使用的选项。如slave-info可以记录备份恢 复后,作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。
  • xtrabackup备份实际上是在线的物理热备,为什么和么说呢,因为实际上他是以拷贝mysql物理文件来备份的方式,只是加入了一些锁和钩子来避免数据缺失。

优势

  • 可以快速可靠的完成数据备份(复制数据文件和追踪事务日志)
  • 数据备份过程中不会中断事务的处理(热备份)
  • 节约磁盘空间和网络带宽
  • 自动完成备份鉴定
  • 因更快的恢复时间而提高在线时间
  • 基于文件的物理备份
  • 恢复起来会更快(不需要执行任何的mysql语句,不需要构建索引,innoDB表无需完全缓存到内存)

缺点

  • 缺点就是占用空间大(备份时可以用–compress参数压缩,缩减体积)

《以下是安装xtrabackup和实战》

一、选择合适的percona xtrabackup版本

二、安装percona xtrabackup

# 下载
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm

 # 安装(rpm安装会有一些依赖包的问题)
 rpm -ivh percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm

 # 安装方式2(会自动解决下载安装依赖包)
 yum localinstall -y percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm

安装可能会报错

  • 原因是:blog.csdn.net/searlas/article/deta...

  • 原因是Mysql的GPG升级了,需要重新获取

  • 执行命令重新获取:

    rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
  • 然后再重新执行安装命令:

    yum localinstall -y percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm

    centos7安装percona xtrabackup详解和备份恢复实战详解

  • 安装成功

    centos7安装percona xtrabackup详解和备份恢复实战详解
    centos7安装percona xtrabackup详解和备份恢复实战详解

三、全量备份实战

  • 备份参数介绍

  • innobackupex参数详解:查看

    --defaults-file=[mysql配置文件路径] 
    --datadir=[mysql数据文件夹路径] 
    --host=[mysql连接地址] 
    --port=[mysql端口] 
    --user=[mysql备份账号名称] 
    --password=[mysql备份账号密码] 
    --socket=[用于连接mysql的socket文件] 
    --backup--target-dir=[指定备份的目录]
  • 【 全量备份操作】

    # 备份目录
    /backup/mysql
    # 执行全量备份
    innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --user=root --password=123456 /backup/mysql
    #  按Y-m-d目录生成
    innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --user=root --password=123456 /backup/mysql/$(date +%Y-%m-%d)
    # 压缩备份
    innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --compress --compress-threads=2 --user=root --password=123456 /backup/mysql/compress_$(date +%Y-%m-%d)
    # 解压(需要先安装qpress解压工具)
    innobackupex --defaults-file=/etc/my.cnf --decompress /backup/mysql/compress_2022-09-18
  • 安装qpress解压工具

    # 安装 percona yum源
    yum -y install https://downloads.percona.com/downloads/percona-release/percona-release-1.0-9/redhat/percona-release-1.0-9.noarch.rpm
    # 安装qpress
    yum -y install qpress
    # 安装的另外一种方式
    wget "http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/183466/cn_zh/1608011575185/qpress-11-linux-x64.tar"
    tar xvf qpress-11-linux-x64.tar
    chmod +x qpress
    cp qpress /usr/local/bin
  • 查看备份数据:cd /backup/mysql && ls
    centos7安装percona xtrabackup详解和备份恢复实战详解

  • 这边可以模拟删除一个数据表模拟线上事故

  • 【恢复全量备份操作】

    # []第一步: 先停止mysql服务
    systemctl stop mysqld
    # []第二步: 删除旧的mysql数据目录(这边直接用mv重命名,方便操作失败、直接恢复旧的mysql数据)
    mv /var/lib/mysql /var/lib/mysql_bak20220916
    # []第三步:准备(prepare)一个完全备份
    # 作用:准备(prepare)一个完全备份: --apply-log ( /backup/mysql/2022-09-17_17-15-14/ 为备份目录,执行之后 xtrabackup_checkpoints 文件中的 backup_type = full-prepared )
    # 重放事务日志,使所有的数据处于同一个时间点,达到一致性状态(在恢复前,需要使用--apply-log参数先进行合并数据文件,确保数据的一致性要求)
    innobackupex --apply-log /backup/mysql/2022-09-17_17-15-14
    # []第四步:执行恢复操作:
    innobackupex  --defaults-file=/etc/my.cnf --copy-back --rsync /backup/mysql/2022-09-17_17-15-14
    # []第五步: 更改mysql目录权限
    chown -R mysql:mysql /var/lib/mysql
    # []第六步: 并启动mysql
    systemctl start mysqld

四、增量备份实战

  • 说明:第一次全备,第二次在全备的基础上做增量,第三次在第二次增量备份上做增量,同理第四次在第三次的基础上做增量…….(恢复的时候也是依次,第一次整合全备,第二次全备基础是整合增量备份的。第三次在第二次增量基础上整合增量。)

  • 【增量备份操作】

    # 增量备份目录(会自动创建)
    /backup/mysql_increment
    # 全量备份目录
    /backup/mysql_full
    # 第一步:先执行一次全备份
    innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --user=root --password=123456 /backup/mysql_full
    # 第二步:可以模拟新增一张数据表或者数据
    # 第三步:执行增量备份one(数据是基于上次的全量备份:/backup/mysql_full/2022-09-17_23-38-46)
    innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --user=root --password=123456 --incremental /backup/mysql_increment --incremental-basedir=/backup/mysql_full/2022-09-17_23-38-46 --parallel=2
    # ....
    # 注意:增量备份two、three...: 每次增量备份的数据都要基于上次备份
  • 查看备份的数量
    centos7安装percona xtrabackup详解和备份恢复实战详解

  • 【增量数据表恢复】

  • 第一步:恢复完全备份(注意这里一定要加–redo-only参数,该参数的意思是只应用xtrabackup日志中已提交的事务数据,不回滚还未提交的数据)

    innobackupex --apply-log --redo-only /backup/mysql_full/2022-09-17_23-38-46
  • 第二步:将增量备份one 应用到 完全备份, 到最后一次增量备份去掉–redo-only参数, 如果有多个增量备份,重复此操作

    innobackupex --apply-log /backup/mysql_full/2022-09-17_23-38-46 --incremental-dir=/backup/mysql_increment/2022-09-17_23-44-10
  • 第三步:把所有合在一起的完全备份整体进行一次apply操作,回滚未提交的数据

    innobackupex --apply-log /backup/mysql_full/2022-09-17_23-38-46
  • 第四步:把恢复完的备份复制到数据库目录文件中,赋权,然后启动mysql数据库,检测数据正确性

    # 停止数据库服务
    systemctl stop mysqld
    # 备份旧的mysql数据目录
    mv /var/lib/mysql /var/lib/mysql_bak
    # 执行恢复数据操作
    innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /backup/mysql_full/2022-09-17_23-38-46
    # 修改目录权限
    chown -R mysql:mysql /var/lib/mysql
    # 重新启动mysql
    systemctl start msyqld

总结

  • 数据库备份可以使用全量备份加上增量备份同时使用,例如:每天一次全量备份,然后每个小时执行一次增量备份
  • 因为增量备份恢复步骤比较多,到时候可以写成一个脚本去执行
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!