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 xtrabackup2.4 可以兼容mysql5.7和mysql5.6
percona xtrabackup8.0 可以兼容mysql8
二、安装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
安装可能会报错
原因是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
安装成功
三、全量备份实战
备份参数介绍
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
这边可以模拟删除一个数据表模拟线上事故
【恢复全量备份操作】
# []第一步: 先停止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...: 每次增量备份的数据都要基于上次备份
查看备份的数量
【增量数据表恢复】
第一步:恢复完全备份(注意这里一定要加–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 协议》,转载必须注明作者和本文链接