-
完全备份:是指将整个数据库的数据和结构都备份下来,并生成一个全量备份文件。在后续的备份中,完全备份可以作为基准备份,用来进行增量备份或差异备份。
-
增量备份:是指对于上一次备份以后发生的更改进行备份,这样只备份了这些更改,而不是所有的数据和结构。增量备份必须基于上一次完全备份或增量备份,不能直接基于上一次增量备份。多次增量备份可以形成备份链条,其中每个增量备份都依赖于前面的备份。如果备份链条中的任何一个备份丢失或损坏,就无法恢复最新的数据。
-
差异备份:是一种特殊的增量备份方式,它是指对于上一次完全备份以后发生的更改进行备份。与增量备份不同,差异备份只需要基于上一次完全备份即可,无需依赖前面的备份。差异备份相较于增量备份,其恢复速度更快,但是需要占用更多的硬盘空间。
一.安装xtrabackup
官网:www.percona.com
二.完全备份
创建备份目录:mkdir /xtrabackup/full -p
备份:innobackupex --user=root --password=‘123’ /xtrabackup/full
完全备份恢复流程:
1.停止数据库 :systemctl stop mysqld
2.清理环境:rm -rf /var/lib/mysql/* 或 rm -rf /var/log/mysqld.log 或 rm -rf /var/log/mysql-slow/slow.log
3.重演回滚,恢复数据:innobackupex -apply-log /xtrabackup/full/2023-10-07_11-47-49
恢复之前需要确认配置文件内有数据库目录指定 :/etc/my.cnf datadir=/var/lib/mysql
恢复数据 : innobackupex --copy-back /xtrabackup/full/2023-10-07_11-47-49
4.修改权限:chown -R mysql.mysql /var/lib/mysql
5.启动数据库:systemctl start mysqld
三.增量备份流程
原理:每次备份上一次备份到现在产生的新数据
1.完整备份:周一
[root@mysql-server ~]# rm -rf /xtrabackup/*
[root@mysql-server ~]# innobackupex --user=root --password='123' /xtrabackup
[root@mysql-server ~]# cd /xtrabackup/
[root@mysql-server xtrabackup]# ls
2023-08-20_14-51-35
[root@mysql-server xtrabackup]# cd 2019-08-20_14-51-35/
[root@mysql-server 2023-08-20_14-51-35]# ls
backup-my.cnf ib_buffer_pool mysql sys testdb xtrabackup_info
company ibdata1 performance_schema test xtrabackup_checkpoints xtrabackup_logfile
2.增量备份:周二 -- 周三
在数据库中插入周二的数据:
mysql> insert into testdb.t1 values(2); #模拟周二
[root@mysql-server ~]# innobackupex --user=root --password='123' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2023-08-20_14-51-35/
[root@mysql-server ~]# cd /xtrabackup/
[root@mysql-server xtrabackup]# ls
2023-08-20_14-51-35 2023-08-20_15-04-29 ---相当于周二的增量备份
在数据库中插入周三的数据:
mysql> insert into testdb.t1 values(3); #模拟周三
[root@mysql-server ~]# innobackupex --user=root --password='123' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2023-08-20_15-04-29/ #基于前一天的备份为目录
[root@mysql-server ~]# cd /xtrabackup/
[root@mysql-server xtrabackup]# ls
2023-08-20_14-51-35 2023-08-20_15-04-29 2023-08-20_15-10-56 ---相当于周三的增量备份
查看一下备份目录:
[root@mysql-server ~]# ls /xtrabackup/
2023-08-20_14-51-35 2023-08-20_15-04-29 2023-08-20_15-10-56
全备周一 增量周二 增量周三
增量备份恢复流程
1. 停止数据库
2. 清理环境
3. 依次重演回滚redo log--> 恢复数据
4. 修改权限
5. 启动数据库
6. binlog恢复
[root@mysql-server ~]# systemctl stop mysqld
[root@mysql-server ~]# rm -rf /var/lib/mysql/*
依次重演回滚redo log:
[root@mysql-server ~]# innobackupex --apply-log --redo-only /xtrabackup/2023-08-20_14-51-35
周二 --- 周三
[root@mysql-server ~]# innobackupex --apply-log --redo-only /xtrabackup/2023-08-20_14-51-35 --incremental-dir=/xtrabackup/2023-08-20_15-04-29
[root@mysql-server ~]# innobackupex --apply-log --redo-only /xtrabackup/2023-08-20_14-51-35 --incremental-dir=/xtrabackup/2023-08-20_15-10-56/
恢复数据:
[root@mysql-server ~]# innobackupex --copy-back /xtrabackup/2023-08-20_14-51-35/
修改权限
[root@mysql-server ~]# chown -R mysql.mysql /var/lib/mysql
[root@mysql-server ~]# systemctl start mysqld
登陆上去看一下:
四.差异备份
创建差异备份目录
周一完整备份:innobackupex --user=root --password=‘123’ /home/wz
周二增量备份:innobackupex --user=root --password='123' --incremental /home/zl/ --incremental-basedir=/home/wz/2023-08-20_14-51-35/
周三增量备份:innobackupex --user=root --password='123' --incremental /home/zl/ --incremental-basedir=/home/zl/2023-08-20_15-04-29/
周四差异备份:innobackupex --user=root --password='123' --incremental /home/cy --incremental-basedir=/home/wz/2023-08-20_14-51-35/
差异备份恢复流程
1. 停止数据库
2. 清理环境
3. 重演回滚redo log(周一,某次差异)--> 恢复数据
4. 修改权限
5. 启动数据库
6. binlog恢复
停止数据库,清理环境
1.恢复全量redo log:innobackupex --apply-log --redo-only /home/wz/完全备份目录(周一)
2.恢复差异的redo log:innobackupex --apply-log --redo-only /home/wz/完全备份目录(周一)--incremental-dir=/home/cy/周四差异备份
3.恢复数据:innobackupex --copy-back /home/wz/完全备份目录(周一)
4.修改权限:chown -R mysql.mysql /var/lib/mysql