介绍
Percona XtraBackup是MySQL数据库的一款备份工具,它通过热备份的方式,在不停止MySQL服务器的情况下对InnoDB和XtraDB表进行备份。本文将详细介绍使用XtraBackup进行备份与恢复的过程,包括备份的类型、常用选项以及备份与恢复的步骤。
XtraBackup工具简介
XtraBackup主要包含两个工具:xtrabackup
和innobackupex
。
- xtrabackup: 用于热备InnoDB和XtraDB表的工具,不能备份其他类型的表,也不能备份数据表结构。
- innobackupex: 是对xtrabackup的封装,提供了备份MyISAM表的能力。是一个用Perl脚本编写的工具,简化了备份的过程。
常用选项
--host
: 指定主机--user
: 指定用户名--password
: 指定密码--port
: 指定端口--databases
: 指定数据库--incremental
: 创建增量备份--incremental-basedir
: 指定包含完全备份的目录--incremental-dir
: 指定包含增量备份的目录--apply-log
: 对备份进行预处理操作,确保数据文件处于一致性状态--redo-only
: 不回滚未提交事务--copy-back
: 恢复备份目录
调整ulimit最大文件打开数
在备份之前,需要调整ulimit最大文件打开数,以确保备份过程中不会受到限制。
代码语言:shell复制# 临时生效
ulimit -n 65535
# 永久生效(重启后生效)
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
全库备份
执行全库备份,并记录备份相关信息:
代码语言:shell复制innobackupex --defaults-file=/etc/my.cnf --use-memory=1G --host=localhost --user=root --password=123456 --port=3306 /home/backups/
# 备份类型:全库备份
# 备份方式:xtrabackup
# 备份开始时间:2023年12月18日19:47:52
# 备份结束时间:2023年12月18日19:54:17
# 备份耗时:6分钟
# 备份所有文件大小:7.2G
# 打包开始时间:2023年12月18日19:56:44
# 打包结束时间:2023年12月18日20:03:10
# 打包耗时:6.5分钟
# 压缩包大小:754M
备份包括完整备份、备份开始和结束时间、备份耗时、备份文件大小以及打包和压缩的相关信息。
全库恢复
在停止MySQL服务的情况下进行全库恢复:
代码语言:shell复制# 停止MySQL服务
systemctl stop mysqld
# 恢复准备:
innobackupex --apply-log /home/backups/2023-12-18_12-43-37/
# 模拟数据丢失:
cd /var/lib/
mv mysql mysql_mv
mkdir mysql
# 恢复:
innobackupex --copy-back /home/backups/2023-12-18_12-43-37/
# mysql目录授权:
chown -R mysql.mysql /var/lib/mysql
# 启动mysql
systemctl start mysqld
全库备份(压缩)
执行全库备份并压缩:
代码语言:shell复制innobackupex --defaults-file=/etc/my.cnf --use-memory=1G --host=localhost --user=root --password=123456 --port=3306 --no-timestamp --stream=tar /temp/ | gzip - > /home/backups/full/20231218fullbak.tgz
# 备份类型:全库备份
# 备份数据库文件大小:80G
# 备份方式:xtrabackup
# 备份开始时间:2023-12-18 20:42:46
# 备份结束时间:2023-12-18 21:15:15
# 备份耗时:32分钟
# 压缩包文件大小:12G
增量备份与恢复
第一次增量备份
代码语言:shell复制innobackupex --defaults-file=/etc/my.cnf --use-memory=1G --host=localhost --user=root --password=123456 --port=3306 --incremental /home/backups/first/ --no-timestamp --incremental-basedir=/home/backups/2023-12-18_12-43-37/
恢复准备(停止MySQL)
回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态:
代码语言:shell复制# 1、(完整备份文件)
innobackupex --apply-log /home/backups/2023-12-18_12-43-37/
或者
innobackupex --user=root --apply-log --redo-only /home/backups/2023-12-18_12-43-37/
# 2、(第一次增量文件)将第一次增量备份整合到完整备份中:
innobackupex --user=root --apply-log --redo-only /home/backups/2023-12-18_12-43-37/ --incremental-dir=/home/backups/first/
--- 231218 15:02:22 completed OK!
# 模拟MySQL故障数据丢失,进行数据恢复:
cd /var/lib/
mv mysql mysql_first
mkdir mysql
innobackupex --copy-back /home/backups/2023-12-18_12-43-37/
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld
第二次、第三次增量备份与恢复
依照相同的步骤进行第二次和第三次的增量备份与恢复,依次整合增量备份到完整备份中。
结论
通过上述详细的备份与恢复过程,您可以有效地利用Percona XtraBackup保护MySQL数据库,确保数据的安全性和可靠性。备份的类型和恢复的步骤清晰明了,使得在实际应用中能够更加灵活地选择适合自己需求的备份策略。
我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!