物理备份的方式

完全备份恢复流程

  1. 停止数据库
  2. 清理环境
  3. 重演回滚--> 恢复数据
  4. 修改权限
  5. 启动数据库
    1.关闭数据库:
c 复制代码
[root@mysql-server ~]# systemctl stop mysqld
[root@mysql-server ~]# rm -rf /var/lib/mysql/*		//删除所有数据//
[root@mysql-server ~]# rm -rf /var/log/mysqld.log
[root@mysql-server ~]# rm -rf /var/log/mysql-slow/slow.log

2.重演恢复:

c 复制代码
[root@mysql-server ~]# innobackupex --apply-log /xtrabackup/full/2021-12-07_14-31-13

3.确认数据库目录: 恢复之前需要确认配置文件内有数据库目录指定,不然xtrabackup不知道恢复到哪里

cat /etc/my.cnf

mysqld datadir=/var/lib/mysql

4.恢复数据:

root@mysql-server \~# innobackupex --copy-back /xtrabackup/full/2021-12-07_14-31-13

5.修改权限:

root@mysql-server \~# chown mysql.mysql /var/lib/mysql -R

启动数据库:

root@mysql-server \~# systemctl start mysqld

6.确认数据是否恢复

c 复制代码
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| chenge             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

5 rows in set (0.00 sec)

mysql> use chenge;
Database changed

mysql> show tables;
+--------------------+
| Tables_in_chenge |
+--------------------+
| t1                 |
+--------------------+
1 row in set (0.00 sec)
===可以看到数据已恢复===

增量备份流程

原理:每次备份上一次备份到现在产生的新数据,基于上一次备份的时间点到现在

  1. 停止数据库
  2. 清理环境
  3. 依次重演回滚redo log--> 恢复数据
  4. 修改权限
  5. 启动数据库
    1.完整备份:周一
c 复制代码
[root@mysql-server ~]# rm -rf /xtrabackup/*
[root@mysql-server ~]# innobackupex --user=root --password='qf123' /xtrabackup
[root@mysql-server ~]# cd /xtrabackup/
[root@mysql-server xtrabackup]# ls
2022-01-10_14-10-40
[root@mysql-server xtrabackup]# cd 2022-01-10_14-10-40/
[root@mysql-server 2022-01-10_14-10-40]# ls
backup-my.cnf  ib_buffer_pool  mysql               sys   testdb                  xtrabackup_info
company        ibdata1         performance_schema  test  xtrabackup_checkpoints  xtrabackup_logfile

2、增量备份:周二 ------ 周三

在数据库中插入周二的数据:

c 复制代码
mysql> insert into testdb.t1 values(2);    #模拟周二
[root@mysql-server ~]# innobackupex --user=root --password='qf123' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2022-01-10_14-10-40/
--incremental-basedir:基于哪个增量
[root@mysql-server ~]# cd /xtrabackup/
[root@mysql-server xtrabackup]# ls
2022-01-10_14-10-40  2022-01-10_14-16-16    ---相当于周二的增量备份
c 复制代码
在数据库中插入周三的数据:
mysql> insert into testdb.t1 values(3);   #模拟周三
[root@mysql-server ~]# innobackupex --user=root --password='qf123' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2022-01-10_14-16-16/      #基于前一天的备份为目录
[root@mysql-server ~]# cd /xtrabackup/
[root@mysql-server xtrabackup]# ls
2022-01-10_14-10-40  2022-01-10_14-16-16  2022-01-10_14-19-59   ---相当于周三的增量备份

查看一下备份目录:

c 复制代码
[root@mysql-server ~]# ls /xtrabackup/
2022-01-10_14-10-40  2022-01-10_14-16-16  2022-01-10_14-19-59
    全备周一             增量周二               增量周三
c 复制代码
[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/2022-01-10_14-10-40
周二 ---  周三
[root@mysql-server ~]# innobackupex --apply-log --redo-only /xtrabackup/2022-01-10_14-10-40 --incremental-dir=/xtrabackup/2022-01-10_14-16-16
--incremental-dir:增量目录
[root@mysql-server ~]# innobackupex --apply-log --redo-only /xtrabackup/2022-01-10_14-10-40 --incremental-dir=/xtrabackup/2022-01-10_14-19-59/
恢复数据:
[root@mysql-server ~]# innobackupex --copy-back /xtrabackup/2022-01-10_14-10-40/
修改权限
[root@mysql-server ~]# chown -R mysql.mysql /var/lib/mysql
[root@mysql-server ~]# systemctl start mysqld
登陆上去看一下:

差异备份流程

清理备份的环境:

c 复制代码
[root@mysql-server ~]# rm -rf /xtrabackup/*
登陆数据库,准备环境
mysql> delete from testdb.t1;
mysql> insert into testdb.t1 values(1);    #插入数据1,模拟周一
mysql> select * from testdb.t1;
+------+
| id   |
+------+
|    1 |
+------+
mysql> \q
查看时间:
[root@mysql-server ~]# date
Tue Aug 20 15:39:59 CST 2019
1、完整备份:周一
[root@mysql-server ~]# innobackupex --user=root --password='qf123' /xtrabackup
2、差异备份:周二 ------ 周三
语法: # innobackupex --user=root --password=888 --incremental /xtrabackup --incremental-basedir=/xtrabackup/完全备份目录(周一)
3.修改时间:
[root@mysql-server ~]# date 08211543
Wed Aug 21 15:43:00 CST 2019
4.在登陆mysql:
mysql> insert into testdb.t1 values(2);  #插入数据2,模拟周二
差异备份周二的
[root@mysql-server ~]# innobackupex --user=root --password='qf123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2022-01-10_14-34-07/  #备份目录基于周一的备份
5.再次登陆mysql
mysql> insert into testdb.t1 values(3);  #插入数据,模拟周三
6.在次修改时间
[root@mysql-server ~]# date 08221550
Thu Aug 22 15:50:00 CST 2019
7.在次差异备份
[root@mysql-server ~]# innobackupex --user=root --password='qf123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2022-01-10_14-34-07/  #还是基于周一的备份
8.延申到周四
mysql> insert into testdb.t1 values(4);
9.修改时间
[root@mysql-server ~]# date 08231553
Fri Aug 23 15:53:00 CST 2019
10.差异备份周四
[root@mysql-server ~]# innobackupex --user=root --password='qf123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2022-01-10_14-34-07/   #还是基于周一的备份
11.查看一下备份目录
[root@mysql-server ~]# ls /xtrabackup/
2022-01-10_14-34-07  2022-01-10_14-36-09  2022-01-10_14-38-45  2022-01-10_14-39-18
   周一                   周二                   周三               周四

差异备份恢复流程

  1. 停止数据库
  2. 清理环境
  3. 重演回滚redo log(周一,某次差异)--> 恢复数据
  4. 修改权限
  5. 启动数据库
    停止数据库
c 复制代码
[root@mysql-server ~]# systemctl stop mysqld
[root@mysql-server ~]# rm -rf /var/lib/mysql/*
1.恢复全量的redo log
语法: # innobackupex --apply-log --redo-only /xtrabackup/完全备份目录(周一)
[root@mysql-server ~]# innobackupex --apply-log --redo-only /xtrabackup/2022-01-10_14-34-07/
2.恢复差异的redo log
语法:# innobackupex --apply-log --redo-only /xtrabackup/完全备份目录(周一)--incremental-dir=/xtrabacku/某个差异备份
这里我们恢复周三的差异备份
[root@mysql-server ~]# innobackupex --apply-log --redo-only /xtrabackup/2022-01-10_14-34-07/ --incremental-dir=/xtrabackup/2022-01-10_14-38-45/   #我们恢复周三的差异备份
3.恢复数据
语法:# innobackupex --copy-back /xtrabackup/完全备份目录(周一)
[root@mysql-server ~]# innobackupex --copy-back /xtrabackup/2022-01-10_14-34-07/
修改权限:
[root@mysql-server ~]# chown -R mysql.mysql /var/lib/mysql
[root@mysql-server ~]# systemctl start mysqld

登陆mysql查看一下:

只有123.因为我们恢复的是周三的差异备份。

增量:基于上一次备份
innobackupex --user=root --password='qf123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/上一次备份的 文件/
差异:基于第一次完备
innobackupex --user=root --password='qf123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/完整备份的文件/

相关推荐
这个DBA有点耶1 小时前
迁移中的数据一致性挑战:如何确保百万行数据“搬得对”
mysql·架构·dba
哦虎!1 小时前
【数据库】事务
java·数据库·mysql
Mico184 小时前
麒麟v10-MySQL InnoDB Cluster 完整部署与全场景验证(从入门到精通)
数据库·mysql
杨云龙UP4 小时前
生产环境MySQL多实例XtraBackup全量备份与rsync异地自动传输实践
linux·运维·数据库·mysql·xtrabackup·主从复制·备份恢复
会编程的吕洞宾5 小时前
MySQL 慢查询从5秒到50毫秒:索引失效六大场景定位与实战调优
数据库·mysql
浅念-5 小时前
MySQL 索引底层完整详解|磁盘Page|B+树推导|聚簇非聚簇索引|索引SQL操作
大数据·数据库·b树·sql·mysql·面试·职场和发展
Mico185 小时前
Percona Toolkit 3.5.7 完整实战笔记(从入门到精通)
mysql
梦想不只是梦与想6 小时前
MySQL 数据库(二):数据类型
数据库·mysql·数据类型
jason.zeng@15022077 小时前
服务器磁盘读写效率,网络吞吐量查看,mysql性能调优
服务器·网络·mysql
01_ice9 小时前
MySQL基本查询1
数据库·mysql