使用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
相关推荐
全职计算机毕业设计4 分钟前
SpringBoot+Mysql实现的停车场收费小程序系统+文档
spring boot·mysql·小程序
AirMan27 分钟前
SQL语句中,为什么group by能够提前"预知"select的别名?
mysql
Lx3523 小时前
UNION ALL与UNION的性能差异及选择技巧
sql·mysql·oracle
新时代苦力工3 小时前
MVCC机制:Undo Log版本链与ReadView机制
数据库·mysql
fengye2071614 小时前
板凳-------Mysql cookbook学习 (十)
学习·mysql·adb
蓝黑20204 小时前
使用SSH tunnel访问内网的MySQL
mysql·ssh·proxy
夕泠爱吃糖5 小时前
MySQL中的部分问题(1)
数据库·mysql
秃了也弱了。5 小时前
DBSyncer:开源数据库同步利器,MySQL/Oracle/ES/SqlServer/PG/
数据库·mysql·开源
喜欢踢足球的老罗6 小时前
使用 Spring Boot 3.3 和 JdbcTemplate 操作 MySQL 数据库
数据库·spring boot·mysql
不太可爱的大白8 小时前
MySQL 索引:为使用 B+树作为索引数据结构,而非 B树、哈希表或二叉树?
数据结构·b树·mysql