likes
comments
collection
share

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

作者站长头像
站长
· 阅读数 79

xtrabackup介绍:

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

优势

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

缺点

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

选择合适的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

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

全量备份实战

  • 备份参数介绍
  • innobackupex参数详解:https://www.cnblogs.com/root-...

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

    # 执行全量备份
    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
  • 查看备份数据:cd /backup/mysql && lscentos7安装percona xtrabackup详解和备份恢复实战详解
  • 这边可以模拟删除一个数据表模拟线上事故
  • 【恢复全量备份操作】

    # 第一步: 先停止mysql服务
    systemctl stop mysqld
    # 第二步: 删除旧的mysql数据目录(这边直接用mv重命名,方便操作失败、直接恢复旧的mysql数据)
    mv /var/lib/mysql /var/lib/mysql_bak20220916
    # 第三步:准备(prepare)一个完全备份
    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

增量备份实战

  • 说明:第一次全备,第二次在全备的基础上做增量,第三次在第二次增量备份上做增量,同理第四次在第三次的基础上做增量.......(恢复的时候也是依次,第一次整合全备,第二次全备基础是整合增量备份的。第三次在第二次增量基础上整合增量。)
  • 增量备份参考:https://www.cnblogs.com/pyng/...
  • 【增量备份操作】

    # 增量备份目录(会自动创建)
    /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
  • 查看备份的数量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

总结

  • 数据库备份可以使用全量备份加上增量备份同时使用,例如:每天一次全量备份,然后每个小时执行一次增量备份
  • 因为增量备份恢复步骤比较多,到时候可以写成一个脚本去执行