本篇介紹了MySQL之—資料庫增量資料復原的圖文程式碼案例,有需要的朋友可以參考下
一、使用場景
MySQL資料庫每日零點自動全備
某天上午9點,張三不小心drop了一個資料庫
我們需要透過全備的資料文件,以及增量的binlog文件進行資料恢復
利用全備的sql檔案中記錄的CHANGE MASTER語句,binlog檔案及其位置點信息,找出binlog檔案增量的部分
用mysqlbinlog指令將上述的binlog檔案匯出為sql文件,並剔除其中的drop語句
透過全備檔案和增量binlog檔案的匯出sql文件,就可以恢復到完整的資料
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);
# 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文件及位置点信息
mysql> insert student values(6,'xiaoming',20); mysql> insert student values(6,'xiaohong',20); 此时误操作,删除了test数据库 mysql> drop database test;
此時,全備之後到誤操作時刻之間,使用者寫入的數據在binlog中,需要恢復出來
# cd /server/backup/ # ls test_2017-03-04.sql.gz # gzip -d test_2017-03-04.sql.gz # grep CHANGE test_2017-03-04.sql -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=107;
這是全備時刻的binlog檔案位置,即mysql-bin.000003的107行,因此在該檔案之前的binlog檔案中的資料都已經包含在這個全備的sql檔案中了
# cp /data/3306/mysql-bin.000003 /server/backup/ # mysqlbinlog -d test mysql-bin.000003 >003bin.sql # 用vim编辑文件,剔除drop语句
在恢復全備資料之前必須將該binlog檔案移出,否則復原過程中,會繼續寫入語句到binlog,最終導致增量復原資料部分變得比較混亂
# mysql -uroot -p <test_2017-03-04.sql # 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 <span style="color: #3366ff;" data-mce-style="color: #3366ff;"><-需要指定恢复的数据库 </span># 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之—資料庫增量資料復原的圖文程式碼案例的詳細內容。更多資訊請關注PHP中文網其他相關文章!