物理备份: 直接复制数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不同的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.关闭数据库:
[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=(基于哪一次备份进行增量备份)
增量备份恢复流程
- 停止数据库
- 清理环境
- 依次重演回滚redo log--> 恢复数据
- 修改权限
- 启动数据库
- 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/
差异备份恢复流程
- 停止数据库
- 清理环境
- 重演回滚redo log(周一,某次差异)--> 恢复数据
- 修改权限
- 启动数据库
- 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
登陆查看一下