使用percona-xtrabackup备份MySQL数据

xtrabackup备份分为两种

本文参考链接1
本文参考链接2

全量备份

1.备份数据

要创建备份,请xtrabackup使用xtrabackup --backup option. 您还需要指定一个xtrabackup --target-dir选项,即备份的存储位置,如果InnoDB数据或日志文件未存储在同一目录中,您可能还需要指定它们的位置。如果目标目录不存在,xtrabackup 将创建它。如果该目录确实存在并且为空,则 xtrabackup 将成功。xtrabackup 不会覆盖现有文件,它将失败并出现操作系统错误 17, file exists.

bash 复制代码
xtrabackup --backup  --user=root --password --parallel=3  --target-dir=/data/mysqlbackups/

参数解析

bash 复制代码
--socket= 选项表示mysql.sock所在位置,以便备份进程登录mysql
--user= 用于备份的账号
--password= 用于备份账号的密码
--parallel= 此参数用于开启多个子进程并发备份多个数据文件
--target-dir= 备份文件保存的位置
--backup 表示执行备份操作

备份成功显示结果如下

bash 复制代码
160906 10:19:17 Finished backing up non-InnoDB tables and files
160906 10:19:17 Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...
xtrabackup: The latest check point (for incremental): '62988944'
xtrabackup: Stopping log copying thread.
.160906 10:19:18 >> log scanned up to (137343534)
160906 10:19:18 Executing UNLOCK TABLES
160906 10:19:18 All tables unlocked
160906 10:19:18 Backup created in directory '/data/backups/'
160906 10:19:18 [00] Writing backup-my.cnf
160906 10:19:18 [00]        ...done
160906 10:19:18 [00] Writing xtrabackup_info
160906 10:19:18 [00]        ...done
xtrabackup: Transaction log of lsn (26970807) to (137343534) was copied.
160906 10:19:18 completed OK!

2.恢复数据

进入MySQL的data目录执行下面代码

bash 复制代码
xtrabackup --copy-back --target-dir=/data/mysqlbackups/

显示 completed OK!则恢复成功

4.修改文件权限为MySQL用户

如果你安装MySQL没有指定用户,忽略这一步

bash 复制代码
chown -R mysql:mysql /opt/mysql5.6.46/data/

3.重启MySQL

bash 复制代码
systemctl restart mysqld

如果启动报错查看MySQL进程是否还在运行

bash 复制代码
ps aux | grep mysql

如果有杀死进程,重启即可

增量备份

增量备份时,每一次增量备份都需要以上一次的备份为基础,之后再将增量备份运用到第一次全备之上,从而完成备份。

1.准备全量备份

bash 复制代码
xtrabackup   --backup  --user=root --password --parallel=3  --target-dir=/data/backup/init 

2.准备增量备份

每一次增量数据库随便添加内容,以便观察数据变化

bash 复制代码
xtrabackup   --backup  --user=root --password --parallel=3  --target-dir=/data/backup/inc1 --incremental-basedir=/data/backup/init
xtrabackup   --backup  --user=root --password --parallel=3  --target-dir=/data/backup/inc2 --incremental-basedir=/data/backup/inc1
xtrabackup   --backup  --user=root --password --parallel=3  --target-dir=/data/backup/inc3 --incremental-basedir=/data/backup/inc2

3.准备备份(个人喜欢叫做合并备份)

bash 复制代码
xtrabackup --prepare --apply-log-only --target-dir=/data/backup/init
xtrabackup   --prepare --apply-log-only  --parallel=3  --target-dir=/data/backup/init --incremental-basedir=/data/backup/inc1
xtrabackup   --prepare --apply-log-only --parallel=3  --target-dir=/data/backup/init --incremental-basedir=/data/backup/inc2

注意:只有最后一次备份不加--apply-log-only

bash 复制代码
xtrabackup   --prepare  --parallel=3  --target-dir=/data/backup/init --incremental-basedir=/data/backup/inc3  

参数解析:
--prepare: 这个参数用于执行备份后的准备操作,准备数据库文件以供后续的恢复。
--apply-log-only: 这个参数用于仅应用日志操作,通常在复制/备份链中使用。它不会执行完整的准备操作,只是应用备份文件中的事务日志,以便将备份链连接起来。

对备份文件执行日志应用,以确保事务的一致性。

为恢复做一些准备,如创建一些必要的文件和目录。

4.恢复备份(步骤如全量备份)

bash 复制代码
xtrabackup --copy-back --target-dir=/data/backup/init
相关推荐
Goat恶霸詹姆斯2 小时前
mysql常用语句
数据库·mysql·oracle
洛豳枭薰6 小时前
Innodb一次更新动作
mysql
xcLeigh6 小时前
Python 项目实战:用 Flask 实现 MySQL 数据库增删改查 API
数据库·python·mysql·flask·教程·python3
Fleshy数模7 小时前
MySQL 表创建全攻略:Navicat 图形化与 Xshell 命令行双模式实践
linux·mysql
Nandeska7 小时前
15、基于MySQL的组复制
数据库·mysql
AllData公司负责人8 小时前
AllData数据中台-数据同步平台【Seatunnel-Web】整库同步MySQL同步Doris能力演示
大数据·数据库·mysql·开源
醇氧8 小时前
【docker】mysql 8 的健康检查(Health Check)
mysql·docker·容器
lekami_兰9 小时前
MySQL 长事务:藏在业务里的性能 “隐形杀手”
数据库·mysql·go·长事务
爱学英语的程序员11 小时前
面试官:你了解过哪些数据库?
java·数据库·spring boot·sql·mysql·mybatis
·云扬·12 小时前
MySQL Redo Log落盘机制深度解析
数据库·mysql