mysql数据库之数据备份中的物理备份详解(完整备份--增量备份--差异备份)

物理备份: 直接复制数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不同的MySQL版本。
分为三部分,分别为完整备份,增量备份,差异备份

  • 完整备份

每次都将所有数据(不管自第一次备份以来有没有修改过),进行一次完整的复制,备份后会清除文件的存档属性,方便日后增量备份或者差异备份进行版本比较。
特点:占用空间大,备份速度慢,但恢复时一次恢复到位,恢复速度快。

  • 增量备份

每次备份上一次备份到现在产生的新数据
特点:因每次仅备份自上一次备份(注意是上一次,不是第一次)以来有变化的文件,所 以备份体积小,备份速度快,但是恢复的时候,需要按备份时间顺序,逐个备份版本进行恢 复,恢复时间长。

差异备份
基于完整备份来备份(只备份和完整备份不同的)
特点:占用空间比增量备份大,比完整备份小,恢复时仅需要恢复第一个完整版本和最后一次的差异版本,恢复速度介于完整备份和增量备份之间。

简单的讲,完整备份就是不管三七二十一,每次都把指定的备份目录完整的复制一遍,不管目录下的文件有没有变化;增量备份就是每次将之前(第一次、第二次、直到前一次)做过备份之后有变化的文件进行备份;差异备份就是每次都将第一次完整备份以来有变化的文件进行备份。

做之前需要安装xtrabackup

完全备份流程
先创建一个备份的目录

[root@mysql-server ~]# mkdir /xtrabackup/full -p

然后进行完整备份
语法 innobackupex --user=mysql用户 --password=mysql密码 备份目录

[root@mysql-server ~]# innobackupex --user=root --password='123' /xtrabackup/full

完全备份恢复流程

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

.恢复之前的验证恢复:
语法 innobackupex --apply-log 备份的目录

[root@mysql-server ~]# innobackupex --apply-log /xtrabackup/full/目录名字
3.确认数据库目录:
恢复之前需要确认配置文件内有数据库目录指定,不然xtrabackup不知道恢复到哪里
#cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql

4.恢复数据:
[root@mysql-server ~]# innobackupex --copy-back /xtrabackup/full/2019-08-20_11-47-49(目录)
5.修改权限:
[root@mysql-server ~]# chown mysql.mysql  /var/lib/mysql  -R
启动数据库:
[root@mysql-server ~]# systemctl start mysqld

  • 增量备份流程
    完整备份一下模拟的周一,前提在里面插入了内容
 innobackupex --user=root --password='123' /xtrabackup

然后到这个文件里查看一下目录

[root@mysql-server ~]# cd /xtrabackup/

开始增量备份
在数据库中插入周二的数据:

mysql> insert into testdb.t1 values(2);    #模拟周二

周二—》周一

[root@mysql-server ~]# innobackupex --user=root --password='123' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2019-08-20_14-51-35/

#语法 innobackupex --user=用户 --password=‘密码’ --incremental(备份到哪里) --incremental-basedir=(基于哪一次备份进行增量备份)

增量备份恢复流程

  1. 停止数据库
  2. 清理环境
  3. 依次重演回滚redo log--> 恢复数据
  4. 修改权限
  5. 启动数据库
  6. binlog恢复
[root@mysql-server ~]# systemctl stop mysqld
[root@mysql-server ~]# rm -rf /var/lib/mysql/*
[root@mysql-server ~]# innobackupex --apply-log --redo-only /xtrabackup/2019-08-20_14-51-35

语法 innobackupex --apply-log(重演) --redo-only(仅仅只是验证) 指定完整备份

 innobackupex --apply-log --redo-only /xtrabackup/2019-08-20_14-51-35 --incremental-dir=/xtrabackup/2019-08-20_15-04-29
 

#语法 innobackupex --apply-log --redo-only 指定完整备份目录 --incremental-dir=周二增量备份目录
假如恢复周三,用周三的增量备份基于周一的回滚

恢复数据:

[root@mysql-server ~]# innobackupex --copy-back /xtrabackup/2019-08-20_14-51-35/

恢复只恢复周一的就行了,因为回滚追加到周一里去了
修改权限重新启动

[root@mysql-server ~]# chown -R mysql.mysql /var/lib/mysql
[root@mysql-server ~]# systemctl start mysqld

登陆验证就行了

  • 差异备份流程

登陆数据库,准备环境

mysql> create database testdb;
mysql> delete from testdb.t1;
mysql> insert into testdb.t1 values(1);    #插入数据1,模拟周一
mysql> select * from testdb.t1;

1、完整备份:周一

[root@mysql-server ~]# innobackupex --user=root --password='123' /xtrabackup

2、差异备份:周二 —— 周三

语法: # innobackupex --user=root --password=888 --incremental /xtrabackup --incremental-basedir=/xtrabackup/完全备份目录(周一)

3.在登陆mysql:

mysql> insert into testdb.t1 values(2);  #插入数据2,模拟周二
差异备份周二的
[root@mysql-server ~]# innobackupex --user=root --password='123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2019-08-20_15-42-02/  #备份目录基于周一的备份
4

.再次登陆mysql

mysql> insert into testdb.t1 values(3);  #插入数据,模拟周三
[root@mysql-server ~]# innobackupex --user=root --password='123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2019-08-20_15-42-02/  #还是基于周一的备份

查看一下备份目录

[root@mysql-server ~]# ls /xtrabackup/

差异备份恢复流程

  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/2019-08-20_15-42-02/

语法: # innobackupex --apply-log --redo-only /xtrabackup/完全备份目录(周一)
2.恢复差异的redo log
语法:# innobackupex --apply-log --redo-only /xtrabackup/完全备份目录(周一)–incremental-dir=/xtrabacku/某个差异备份
这里我们恢复周三的差异备份
[root@mysql-server ~]# innobackupex --apply-log --redo-only /xtrabackup/周一目录/ --incremental-dir=/xtrabackup/周三目录/
#我们恢复周三的差异备份
3.恢复数据

语法:# innobackupex --copy-back /xtrabackup/完全备份目录(周一)
[root@mysql-server ~]# innobackupex --copy-back /xtrabackup/周一目录/

修改权限:

[root@mysql-server ~]# chown -R mysql.mysql /var/lib/mysql
[root@mysql-server ~]# systemctl start mysqld

登陆查看一下

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值