MySQL增量备份与恢复

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL增量备份与恢复相关的知识,希望对你有一定的参考价值。

mysql增量备份与恢复

技能目标

  • 理解MySQL增量备份的概念
  • 理解MySQL增量备份与恢复的方法

1:增量备份的概念

完全备份每次把所有文件全部备份一边占用空间较大,增量备份就解决了这一问题它可以在你完全备份后如果做了修改或者需要备份的文件不大就用增量备份去解决这一问题
2:增量备份的特点
(1)二进制文件保存了所有更新或者可能更新数据库操作
(2)二进制文件在启动MySQL服务后开始记录
(3)只需要执行刷新就能创建新日志

增量备份实战演练

下面是生产环境中的案例,对它进行增量备份操作

1.需求描述

某公司用户信息数据库为client,用户资源表为user_info

需求如下

(1):请为该公司每周进行完全备份

(2):每天为该公司进行增量备份

(3):新增加用户信息如下

id name zifei
1 wang-1 10
2 wang-2 20
实现增量备份
#1:先把下列原有的表进行完全备份在备份前先刷新一次
[[email protected] data] mysqladmin -u root -p flush-logs
mysql> select * from user_info;
+------+---------+-------+
| id   | name    | zifei |
+------+---------+-------+
|    1 | zhang-1 |    10 |
|    2 | zhang-2 |    20 |
|    3 | zhang-3 |     5 |
+------+---------+-------+
3 rows in set (0.00 sec)
[[email protected] data] mysqldump -u root -p client user_info > /usr/local/mysql/data/client-user_info.sql
Enter password
[[email protected] data] ls
client-user_info.sql

#2:添加wang-1信息后进行增量备份
mysql> insert into user_info (id,name,zifei) values (4,‘wang-1‘,10);
Query OK, 1 row affected (0.00 sec)
[[email protected] data] mysqladmin -uroot -p flush-logs
Enter password:       #上面的命令刷新保存在mysql-bin.000001里面
[[email protected] data]# ls # mysql-bin.000002是 mysql-bin.000001保存之后会生成一个空的日志等待下一次增量备份
mysql-bin.000001
mysql-bin.000002 
#3:添加wang-2的信息后进行增量备份
mysql> insert into user_info (id,name,zifei) values (5,‘wang-2‘,20);
Query OK, 1 row affected (0.00 sec)
[[email protected] data] mysqladmin -uroot -p flush-logs
Enter password: 
[[email protected] data]# ls
mysql-bin.000002 
mysql-bin.000003
每一次增量备份后它都会生成一个空的二进制文件,以便下一次的增量备份,恢复的时候是逆推恢复就是说你恢复mysql-bin.000002其实是恢复的你上一次所做的操作

MySQL增量恢复

1:加入你把原表中wang-1,wang-2删除需要恢复此增量文件需做如下操作
#下表中wang-1,wang-2已被删除
mysql> select * from user_info;
+------+---------+-------+
| id   | name    | zifei |
+------+---------+-------+
|    1 | zhang-1 |    10 |
|    2 | zhang-2 |    20 |
|    3 | zhang-3 |     5 |
+------+---------+-------+
5 rows in set (0.00 sec)

#恢复wang-1
[[email protected] data] mysqlbinlog --no-defaults mysql-bin.000002 | mysql -u root -p 
#先恢复mysql-bin.000002我们看一下
mysql> select * from user_info;
+------+---------+-------+
| id   | name    | zifei |
+------+---------+-------+
|    1 | zhang-1 |    10 |
|    2 | zhang-2 |    20 |
|    3 | zhang-3 |     5 |
|    5 | wang-2  |    20 |
+------+---------+-------+
4 rows in set (0.00 sec)
#恢复的是我最后一次操作备份wang-2的数据

#恢复mysql-bin.000001看一下
[[email protected] data]# mysqlbinlog --no-defaults mysql-bin.000001 | mysql -u root -p
mysql> select * from user_info;
+------+---------+-------+
| id   | name    | zifei |
+------+---------+-------+
|    1 | zhang-1 |    10 |
|    2 | zhang-2 |    20 |
|    3 | zhang-3 |     5 |
|    4 | wang-2  |    10 |
|    5 | wang-2  |    20 |
+------+---------+-------+
4 rows in set (0.00 sec)

查看二进制文件如果你直接用下面的语句操作他会看不到你操作的语句会自动给你加密

[[email protected] data] mysqlbinlog --no-defaults mysql-bin.000001
BINLOG ‘ #下面加密的哪一行就是你在数据库进行操作
PCE7WxMBAAAAOgAAAEkIAAAAANsAAAAAAAEABmNsaWVudAAJdXNlcl9pbmZvAAMDDwMCHgAH7bXH
3w==
PCE7WyABAAAAMwAAAHwIAAAAANsAAAAAAAEAAgAD//gFAAAABndhbmctMhQAAABJK6gI
‘/*!*/;
# at 2172

#想要解密这个加密文件用下列语句
[[email protected] data] mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000001
### DELETE FROM `client`.`user_info`
### WHERE #下面就是之前看不到的加密的部分
###   @1=5
###   @2=‘wang-2‘
###   @3=20

以上是关于MySQL增量备份与恢复的主要内容,如果未能解决你的问题,请参考以下文章

MySQL的增量备份与恢复

MySQL增量备份与恢复

# MySQL增量备份与恢复

MySQL 数据库备份(增量备份与恢复)

MySQL 完全备份 + 增量备份+完全恢复

Mysql增量备份与恢复