(点击
上方公众号
,可快速关注)
作者:伯乐在线 - fullstackyang
如有好文章投稿,请点击 → 这里了解详情
一、场景概述
-
MySQL数据库每日零点自动全备
-
某天上午10点,小明莫名其妙地drop了一个数据库
-
我们需要通过全备的数据文件,以及增量的binlog文件进行数据恢复
二、主要思想
-
利用全备的sql文件中记录的CHANGE MASTER语句,binlog文件及其位置点信息,找出binlog文件增量的部分
-
用mysqlbinlog命令将上述的binlog文件导出为sql文件,并剔除其中的drop语句
-
通过全备文件和增量binlog文件的导出sql文件,就可以恢复到完整的数据
三、过程示意图
四、操作过程
1. 模拟数据
CREATE
TABLE
`student`
(
`id`
int
(11)
NOT NULL
AUTO_INCREMENT
,
`name`
char
(20)
NOT NULL
,
`age`
tinyint
(2)
NOT NULL
DEFAULT
'0'
,
PRIMARY KEY
(`id`),
KEY
`index_name`
(`name`)
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
8
DEFAULT
CHARSET
=
utf8
mysql
>
insert
student
values
(1,
'zhangsan'
,20);
mysql
>
insert
student
values
(2,
'lisi'
,21);
mysql
>
insert
student
values
(3,
'wangwu'
,22);
2. 全备命令
# mysqldump -uroot -p -B -F -R -x --master-data=2 test|gzip >/server/backup/test_$(date +%F).sql.gz
参数说明:
-B
指定数据库
-F
刷新日志
-R
备份存储过程等
-
x
锁表
--
master
-
data
在备份语句里添加
CHANGE
MASTER
语句以及
binlog
文件及位置点信息
3. 继续插入数据
mysql
>
insert
student
values
(6,
'xiaoming'
,20);
mysql
>
insert