婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > MySQL使用mysqldump+binlog完整恢復被刪除的數據庫原理解析

MySQL使用mysqldump+binlog完整恢復被刪除的數據庫原理解析

熱門標簽:上海市三維地圖標注 博樂電銷機器人 鄭州網絡外呼系統價錢 電話機器人是電腦呼號嗎 怎么更改高德地圖標注 南寧外呼系統招商 400電話到哪辦理優惠 云南大數據外呼系統 機器人打電銷電話

(一)概述

在日常MySQL數據庫運維過程中,可能會遇到用戶誤刪除數據,常見的誤刪除數據操作有:

  • 用戶執行delete,因為條件不對,刪除了不應該刪除的數據(DML操作);
  • 用戶執行update,因為條件不對,更新數據出錯(DML操作);
  • 用戶誤刪除表drop table(DDL操作);
  • 用戶誤清空表truncate(DDL操作);
  • 用戶刪除數據庫drop database,跑路(DDL操作)
  • …等

這些情況雖然不會經常遇到,但是遇到了,我們需要有能力將其恢復,下面講述如何恢復。

(二)恢復原理

如果要將數據庫恢復到故障點之前,那么需要有數據庫全備和全備之后產生的所有二進制日志。

全備作用 :使用全備將數據庫恢復到上一次完整備份的位置;

二進制日志作用:利用全備的備份集將數據庫恢復到上一次完整備份的位置之后,需要對上一次全備之后數據庫產生的所有動作進行重做,而重做的過程就是解析二進制日志文件為SQL語句,然后放到數據庫里面再次執行。

舉個例子:小明在4月1日晚上8:00使用了mysqldump對數據庫進行了備份,在4月2日早上12:00的時候,小華不小心刪除了數據庫,那么,在執行數據庫恢復的時候,需要使用4月1日晚上的完整備份將數據庫恢復到“4月1日晚上8:00”,那4月1日晚上8:00以后到4月2日早上12:00之前的數據如何恢復呢?就得通過解析二進制日志來對這段時間執行過的SQL進行重做。

(三)刪庫恢復測試

(3.1)實驗目的

在本次實驗中,我直接測試刪庫,執行drop database lijiamandb,確認是否可以恢復。

(3.2)測試過程

在測試數據庫lijiamandb中創建測試表test01和test02,然后執行mysqldump對數據庫進行全備,之后執行drop database,確認database是否可以恢復。

STEP1:創建測試數據,為了模擬日常繁忙的生產環境,頻繁的操作數據庫產生大量二進制日志,我特地使用存儲過程和EVENT產生大量數據。

創建測試表:

use lijiamandb;create table test01
 (
 id1 int not null auto_increment,
 name varchar(30),
 primary key(id1)
 );

create table test02
 (
 id2 int not null auto_increment,
 name varchar(30),
 primary key(id2)
 );

創建存儲過程,往測試表里面插入數據,每次執行該存儲過程,往test01和test02各自插入10000條數據:

CREATE DEFINER=`root`@`%` PROCEDURE `p_insert`()
BEGIN
#Routine body goes here...
DECLARE str1 varchar(30);
DECLARE str2 varchar(30);
DECLARE i int;
set i = 0;

while i  10000 do
 set str1 = substring(md5(rand()),1,25);
 insert into test01(name) values(str1);
 set str2 = substring(md5(rand()),1,25);
 insert into test02(name) values(str1);
 set i = i + 1;
 end while;
 END

制定事件,每隔10秒鐘,執行上面的存儲過程:

use lijiamandb;
 create event if not exists e_insert
 on schedule every 10 second
 on completion preserve
 do call p_insert();

啟動EVENT,每個10s自動向test01和test02各自插入10000條數據

mysql> show variables like '%event_scheduler%';
+----------------------------------------------------------+-------+
| Variable_name | Value |
+----------------------------------------------------------+-------+
| event_scheduler | OFF |
+----------------------------------------------------------+-------+

mysql> set global event_scheduler = on;
 Query OK, 0 rows affected (0.08 sec)

--過3分鐘。。。
STEP2:第一步生成大量測試數據后,使用mysqldump對lijiamandb數據庫執行完全備份
mysqldump -h192.168.10.11 -uroot -p123456 -P3306 --single-transaction --master-data=2 --events --routines --databases lijiamandb > /mysql/backup/lijiamandb.sql

注意:必須要添加--master-data=2,這樣才會備份集里面mysqldump備份的終點位置。

--過3分鐘。。。

STEP3:為了便于數據庫刪除前與刪除后數據一致性校驗,先停止表的數據插入,此時test01和test02都有930000行數據,我們后續恢復也要保證有930000行數據。

mysql> set global event_scheduler = off;
Query OK, 0 rows affected (0.00 sec)

mysql> select count(*) from test01;
 +----------+
 | count(*) |
 +----------+
 | 930000 |
 +----------+
row in set (0.14 sec)

mysql> select count(*) from test02;
 +----------+
 | count(*) |
 +----------+
 | 930000 |
 +----------+
row in set (0.13 sec)

STEP4:刪除數據庫

mysql> drop database lijiamandb;
Query OK, 2 rows affected (0.07 sec)

STEP5:使用mysqldump的全備導入

mysql> create database lijiamandb;
Query OK, 1 row affected (0.01 sec)

mysql> exit
 Bye
 [root@masterdb binlog]# mysql -uroot -p123456 lijiamandb  /mysql/backup/lijiamandb.sql 
 mysql: [Warning] Using a password on the command line interface can be insecure.

在執行全量備份恢復之后,發現只有753238筆數據:

[root@masterdb binlog]# mysql -uroot -p123456 lijiamandb 

mysql> select count(*) from test01;
 +----------+
 | count(*) |
 +----------+
 | 753238 |
 +----------+
row in set (0.12 sec)

mysql> select count(*) from test02;
 +----------+
 | count(*) |
 +----------+
 | 753238 |
 +----------+
row in set (0.11 sec)

很明顯,全量導入之后,數據不完整,接下來使用mysqlbinlog對二進制日志執行增量恢復。

使用mysqlbinlog進行增量日志恢復最重要的就是確定待恢復的起始位置(start-position)和終止位置(stop-position),起始位置(start-position)是我們執行全被之后的位置,而終止位置則是故障發生之前的位置。
STEP6:確認mysqldump備份到的最終位置

[root@masterdb backup]# cat lijiamandb.sql |grep "CHANGE MASTER"
-- CHANGE MASTER TO MASTER_LOG_FILE='master-bin.000044', MASTER_LOG_POS=8526828

備份到了44號日志的8526828位置,那么恢復的起點可以設置為:44號日志的8526828。

--接下來確認要恢復的終點位置,即執行"DROP DATABASE LIJIAMAN"之前的位置,需要到binlog里面確認。

[root@masterdb binlog]# ls
 master-bin.000001 master-bin.000010 master-bin.000019 master-bin.000028 master-bin.000037 master-bin.000046 master-bin.000055
 master-bin.000002 master-bin.000011 master-bin.000020 master-bin.000029 master-bin.000038 master-bin.000047 master-bin.000056
 master-bin.000003 master-bin.000012 master-bin.000021 master-bin.000030 master-bin.000039 master-bin.000048 master-bin.000057
 master-bin.000004 master-bin.000013 master-bin.000022 master-bin.000031 master-bin.000040 master-bin.000049 master-bin.000058
 master-bin.000005 master-bin.000014 master-bin.000023 master-bin.000032 master-bin.000041 master-bin.000050 master-bin.000059
 master-bin.000006 master-bin.000015 master-bin.000024 master-bin.000033 master-bin.000042 master-bin.000051 master-bin.index
 master-bin.000007 master-bin.000016 master-bin.000025 master-bin.000034 master-bin.000043 master-bin.000052
 master-bin.000008 master-bin.000017 master-bin.000026 master-bin.000035 master-bin.000044 master-bin.000053
 master-bin.000009 master-bin.000018 master-bin.000027 master-bin.000036 master-bin.000045 master-bin.000054

# 多次查找,發現drop database在54號日志文件
[root@masterdb binlog]# mysqlbinlog -v master-bin.000056 | grep -i "drop database lijiamandb"
 [root@masterdb binlog]# mysqlbinlog -v master-bin.000055 | grep -i "drop database lijiamandb"
 [root@masterdb binlog]# mysqlbinlog -v master-bin.000055 | grep -i "drop database lijiamandb"
 [root@masterdb binlog]# mysqlbinlog -v master-bin.000054 | grep -i "drop database lijiamandb"
drop database lijiamandb

# 保存到文本,便于搜索
[root@masterdb binlog]# mysqlbinlog -v master-bin.000054 > master-bin.txt


# 確認drop database之前的位置為:54號文件的9019487
 # at 9019422
 #200423 16:07:46 server id 11 end_log_pos 9019487 CRC32 0x86f13148 Anonymous_GTID last_committed=30266 sequence_number=30267 rbr_only=no
 SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
 # at 9019487
 #200423 16:07:46 server id 11 end_log_pos 9019597 CRC32 0xbd6ea5dd Query thread_id=100 exec_time=0 error_code=0
 SET TIMESTAMP=1587629266/*!*/;
 SET @@session.sql_auto_is_null=0/*!*/;
 /*!\C utf8 *//*!*/;
 SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
 drop database lijiamandb
 /*!*/;
 # at 9019597
 #200423 16:09:25 server id 11 end_log_pos 9019662 CRC32 0x8f7b11dc Anonymous_GTID last_committed=30267 sequence_number=30268 rbr_only=no
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
 # at 9019662
 #200423 16:09:25 server id 11 end_log_pos 9019774 CRC32 0x9b42423d Query thread_id=100 exec_time=0 error_code=0
 SET TIMESTAMP=1587629365/*!*/;
 create database lijiamandb

STEP7:確定了開始結束點,執行增量恢復
開始:44號日志的8526828
結束:54號文件的9019487

這里分為3條命令執行,起始日志文件涉及到參數start-position參數,單獨執行;中止文件涉及到stop-position參數,單獨執行;中間的日志文件不涉及到特殊參數,全部一起執行。

# 起始日志文件

# 起始日志文件
mysqlbinlog --start-position=8526828 /mysql/binlog/master-bin.000044 | mysql -uroot -p123456

 
# 中間日志文件
mysqlbinlog /mysql/binlog/master-bin.000045 /mysql/binlog/master-bin.000046 /mysql/binlog/master-bin.000047 /mysql/binlog/master-bin.000048 /mysql/binlog/master-bin.000049 /mysql/binlog/master-bin.000050 /mysql/binlog/master-bin.000051 /mysql/binlog/master-bin.000052 /mysql/binlog/master-bin.000053 | mysql -uroot -p123456

 
# 終止日志文件

mysqlbinlog --stop-position=9019487 /mysql/binlog/master-bin.000054 | mysql -uroot -p123456

STEP8:恢復結束,確認全部數據已經還原

[root@masterdb binlog]# mysql -uroot -p123456 lijiamandb
mysql> select count(*) from test01;
+----------+
| count(*) |
+----------+
| 930000 |
+----------+
row in set (0.15 sec)

mysql> select count(*) from test02;
+----------+
 | count(*) |
+----------+
 | 930000 |
+----------+
row in set (0.13 sec)

(四)總結

1.對于DML操作,binlog記錄了所有的DML數據變化:
--對于insert,binlog記錄了insert的行數據
--對于update,binlog記錄了改變前的行數據和改變后的行數據
--對于delete,binlog記錄了刪除前的數據
假如用戶不小心誤執行了DML操作,可以使用mysqlbinlog將數據庫恢復到故障點之前。

2.對于DDL操作,binlog只記錄用戶行為,而不記錄行變化,但是并不影響我們將數據庫恢復到故障點之前。

總之,使用mysqldump全備加binlog日志,可以將數據恢復到故障前的任意時刻。

到此這篇關于MySQL使用mysqldump+binlog完整恢復被刪除的數據庫的文章就介紹到這了,更多相關MySQL恢復被刪除的數據庫內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • MySQL數據庫恢復(使用mysqlbinlog命令)
  • MySQL中的binlog相關命令和恢復技巧
  • Mysql的Binlog數據恢復:不小心刪除數據庫詳解
  • mysql如何利用binlog進行數據恢復詳解
  • 教你自動恢復MySQL數據庫的日志文件(binlog)
  • Linux上通過binlog文件恢復mysql數據庫詳細步驟
  • 解說mysql之binlog日志以及利用binlog日志恢復數據的方法
  • MySQL使用binlog日志做數據恢復的實現
  • mysql5.7使用binlog 恢復數據的方法
  • 如何利用MySQL的binlog恢復誤刪數據庫詳解

標簽:定西 秦皇島 白銀 澳門 杭州 益陽 恩施 寧夏

巨人網絡通訊聲明:本文標題《MySQL使用mysqldump+binlog完整恢復被刪除的數據庫原理解析》,本文關鍵詞  MySQL,使用,mysqldump+binlog,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL使用mysqldump+binlog完整恢復被刪除的數據庫原理解析》相關的同類信息!
  • 本頁收集關于MySQL使用mysqldump+binlog完整恢復被刪除的數據庫原理解析的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲亚洲精品在线观看| 精品国产乱码久久| 国产一区二区不卡老阿姨| 亚洲成人av中文| 午夜免费欧美电影| 日本91福利区| 另类小说视频一区二区| 韩国理伦片一区二区三区在线播放| 日本成人在线一区| 麻豆视频一区二区| 国产福利一区在线观看| 成人综合日日夜夜| 色嗨嗨av一区二区三区| 欧美专区日韩专区| 91精品国产91久久久久久一区二区 | 欧美mv和日韩mv的网站| 日韩一级片网站| 久久新电视剧免费观看| 国产日韩欧美综合在线| 亚洲男女一区二区三区| 婷婷六月综合网| 国产精品资源在线观看| 91香蕉视频污| 91精品国产综合久久福利软件| 欧美一区2区视频在线观看| 久久综合色8888| 1区2区3区精品视频| 首页亚洲欧美制服丝腿| 免费一级片91| 99国产欧美另类久久久精品| 欧美日韩不卡一区| 国产精品丝袜一区| 日韩精品一级中文字幕精品视频免费观看| 久久福利资源站| jlzzjlzz亚洲日本少妇| 日韩亚洲电影在线| 亚洲天堂网中文字| 狠狠狠色丁香婷婷综合激情| 91片黄在线观看| 欧美一级精品大片| 综合久久给合久久狠狠狠97色| 美洲天堂一区二卡三卡四卡视频| 99精品国产视频| 精品国产乱码久久久久久浪潮 | 欧美系列在线观看| 国产欧美日韩亚州综合| 亚洲不卡在线观看| 色综合天天综合在线视频| 精品国产一区二区三区久久久蜜月 | 国产99久久久精品| 日韩一区二区三区视频| 一区二区三区精密机械公司| 国产福利一区二区三区视频在线 | 国产在线日韩欧美| 日本精品视频一区二区| 国产色婷婷亚洲99精品小说| 日韩成人一区二区| 欧美色区777第一页| 亚洲欧美日韩系列| 成人亚洲精品久久久久软件| www精品美女久久久tv| 午夜精品爽啪视频| 欧美午夜影院一区| 亚洲女与黑人做爰| 99久久久精品| 国产精品蜜臀av| 成人爱爱电影网址| 国产精品免费丝袜| 91视频观看视频| 亚洲欧美中日韩| 色八戒一区二区三区| 亚洲欧美乱综合| 91黄色免费观看| 国内精品在线播放| 精品欧美一区二区三区精品久久 | 青青青伊人色综合久久| 欧美伦理影视网| 日韩av在线播放中文字幕| 欧美疯狂做受xxxx富婆| 秋霞午夜鲁丝一区二区老狼| 欧美一区二区精美| 久久99热狠狠色一区二区| 精品欧美一区二区久久| 丁香六月综合激情| 亚洲欧美日韩国产另类专区| 精品视频1区2区3区| 日韩成人免费电影| 久久九九久久九九| 9i在线看片成人免费| 一区二区三区四区在线播放 | 国产一区二区三区免费看| www激情久久| 99精品久久只有精品| 亚洲电影在线播放| 精品成人佐山爱一区二区| 成人免费视频免费观看| 亚洲自拍偷拍九九九| 欧美一级理论性理论a| 国产精品一品视频| 亚洲综合一二区| 26uuu国产电影一区二区| 99re热视频精品| 美女免费视频一区二区| 欧美国产精品一区二区| 欧美卡1卡2卡| 成人av午夜影院| 五月激情综合婷婷| 国产精品无遮挡| 欧美精品色一区二区三区| 国产精品一区二区果冻传媒| 亚洲一区二区精品久久av| 久久伊人蜜桃av一区二区| 91猫先生在线| 国产一区二区久久| 亚洲第一主播视频| 最新不卡av在线| 日韩精品一区二区三区三区免费| 99久久伊人精品| 国产精品综合久久| 天堂av在线一区| 亚洲美女淫视频| 欧美激情中文不卡| 日韩精品一区二区三区视频播放| 在线免费精品视频| 风间由美中文字幕在线看视频国产欧美| 一区二区三区不卡视频| 国产精品日日摸夜夜摸av| 久久先锋影音av鲁色资源网| 欧美日韩在线三级| 色乱码一区二区三区88| 不卡的av电影| 国产伦精一区二区三区| 蜜桃视频免费观看一区| 亚洲一级二级三级在线免费观看| 国产精品久久久久天堂| 日本一区二区三区高清不卡 | 6080日韩午夜伦伦午夜伦| 91丝袜呻吟高潮美腿白嫩在线观看| 国产一区二区三区在线观看精品| 天天综合网 天天综合色| 亚洲线精品一区二区三区| 中文字幕在线不卡国产视频| 国产精品视频第一区| 国产精品乱码一区二区三区软件 | 日韩视频在线你懂得| 欧美亚洲国产一区二区三区| 97久久精品人人澡人人爽| 99久久99久久免费精品蜜臀| 成人av在线一区二区| av网站一区二区三区| 99久久婷婷国产综合精品电影| www.色综合.com| hitomi一区二区三区精品| 成+人+亚洲+综合天堂| 成人高清av在线| 色综合色综合色综合色综合色综合| 99r国产精品| 欧美亚一区二区| 欧美日韩国产片| 日韩精品一区二区三区swag| 久久综合狠狠综合久久激情 | 日韩欧美久久一区| 日韩一级完整毛片| 久久综合九色综合欧美就去吻| 久久天堂av综合合色蜜桃网| 亚洲国产精品ⅴa在线观看| 亚洲欧美日韩国产另类专区| 亚洲一区二区三区四区在线免费观看 | 欧美一级xxx| 亚洲国产成人午夜在线一区| 一区二区三区欧美日韩| 午夜激情一区二区| 国产精品99久久久久久久vr| 9i看片成人免费高清| 欧美美女直播网站| 精品国产欧美一区二区| 亚洲人成在线播放网站岛国| 亚洲一区二区三区四区五区中文| 久久精品国产成人一区二区三区| 成人黄色一级视频| 欧美精品自拍偷拍| 国产精品日韩成人| 日本在线不卡视频| jiyouzz国产精品久久| 欧美一区二区三区的| 国产精品久久久久9999吃药| 日韩高清欧美激情| 国产成人激情av| 日韩一级视频免费观看在线| 亚洲欧美怡红院| 国产乱码精品一区二区三区五月婷 | 国产精品一色哟哟哟| 欧洲一区在线观看| 欧美激情一区二区在线| 日本欧美一区二区三区乱码| 99亚偷拍自图区亚洲| 精品国产伦一区二区三区免费| 又紧又大又爽精品一区二区| 国产成人99久久亚洲综合精品| 日韩一级片在线观看|