使用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
相关推荐
rchmin2 小时前
MySQL分库分表适用场景与依据
数据库·mysql
u***32432 小时前
【MySQL】数据库和表的操作
数据库·mysql·oracle
好奇的菜鸟2 小时前
MySQL 8 开启远程登录
数据库·mysql·adb
是2的10次方啊3 小时前
MySQL索引设计原则:明明建了索引为什么还是慢?7条实战原则帮你避坑
mysql
('-')3 小时前
《从根上理解MySQL是怎样运行的》第十二章学习笔记
笔记·学习·mysql
深瞳智检3 小时前
学习应用 第001期-Windows 10 用 CMD 安装 MySQL 全流程解析(免安装版)
数据库·windows·mysql·压缩包·环境安装
华纳云IDC服务商4 小时前
MySQL数据库如何防止SQL注入攻击
数据库·sql·mysql
h***59334 小时前
使用Canal将MySQL数据同步到ES(Linux)
linux·mysql·elasticsearch
P***84395 小时前
【MySQL】C# 连接MySQL
数据库·mysql·c#
n***26565 小时前
MySQL JSON数据类型全解析(JSON datatype and functions)
android·mysql·json