**
mysql資料庫每日零點自動全備
某天上午10點,小明莫名其妙地drop了乙個資料庫
我們需要通過全備的資料檔案,以及增量的binlog檔案進行資料恢復
利用全備的sql檔案中記錄的change master語句,binlog檔案及其位置點資訊,找出binlog檔案增量的部分
用mysqlbinlog命令將上述的binlog檔案匯出為sql檔案,並剔除其中的drop語句
通過全備檔案和增量binlog檔案的匯出sql檔案,就可以恢復到完整的資料
1. 模擬資料
mysql
1
2
3
4
5
6
7
8
9
10
11
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. 全備命令
mysql
1
2
3
4
5
6
7
8
# 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
1
2
3
4
5
6
mysql
>
insert
student
values(6,
'xiaoming',20);
mysql
>
insert
student
values(6,
'xiaohong',20);
此時誤操作,刪除了test資料庫
mysql
>
drop
database
test;
此時,全備之後到誤操作時刻之間,使用者寫入的資料在binlog中,需要恢復出來
4.檢視全備之後新增的binlog檔案
mysql
1
2
3
4
5
6
# cd /server/backup/
# ls
test_2016
-08-02.
sql.gz
# gzip -d test_2016-08-02.sql.gz
# grep change test_2016-08-02.sql
-- change master to master_log_file='mysql-bin.000003', master_log_pos=107;
這是全備時刻的binlog檔案位置,即mysql-bin.000003的107行,因此在該檔案之前的binlog檔案中的資料都已經包含在這個全備的sql檔案中了
5. 移動binlog檔案,並讀取sql,剔除其中的drop語句
mysql
1
2
3
# cp /data/3306/mysql-bin.000003 /server/backup/
# mysqlbinlog -d test mysql-bin.000003 >003bin.sql
# 用vim編輯檔案,剔除drop語句
在恢復全備資料之前必須將該binlog檔案移出,否則恢復過程中,會繼續寫入語句到binlog,最終導致增量恢復資料部分變得比較混亂
6. 恢復資料
mysql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# mysql -uroot -p
# mysql -uroot -p -e "select * from test.student;"
+----+----------+-----+
| id
|name
|age
|+----+----------+-----+
| 1
|zhangsan|20
|| 2
|lisi|21
|| 3
|wangwu|22
|+----+----------+-----+
//此時恢復了全備時刻的資料
//然後使用003bin.
sql檔案恢復全備時刻到刪除資料庫之間,新增的資料
# mysql -uroot -p test<003bin.sql
>
# mysql -uroot -p -e "select * from test.student;"
+----+----------+-----+
| id
|name
|age
|+----+----------+-----+
| 1
|zhangsan|20
|| 2
|lisi|20
|| 3
|wangwu|20
|| 4
|xiaoming|20
||5|
xiaohong|20
|+----+----------+-----+
完成
mysql增量 mysql資料庫增量恢復
mysqldump uroot p b discuzx f x master data 2 events gzip root discuzx.sql.gz 寫入資料 刪除資料 第一時間關閉資料庫對外讀寫功能,並進入資料執行重新整理mysqlbinlog的位置點,新生成檔案 flush logs 根據...
實戰!MySQL 資料庫增量資料恢復
場景概述 1 mysql資料庫每日零點自動全備 2 某天上午10點,小明莫名其妙地drop了乙個資料庫 3 我們需要通過全備的資料檔案,以及增量的binlog檔案進行資料恢復 主要思想 1 利用全備的sql檔案中記錄的change master語句,binlog檔案及其位置點資訊,找出binlog檔...
資料庫 增量恢復
color darkblue 生產線的sqlserver資料庫infoservice星期日做全盤備份,備份名為 infoservice database.7,星期一做差異備份 infoservice database.1,星期二 infoservice database.2.對應的本地模擬庫info...