mysql數(shù)據(jù)恢復(fù),使用binlog配置恢復(fù)未備份數(shù)據(jù)

使用mysqlbinlog配置详民,恢復(fù)數(shù)據(jù)庫

什么是mysqlbinlog

binlog是記錄所有數(shù)據(jù)庫表結(jié)構(gòu)變更(例如CREATE陌兑、ALTER TABLE…)以及表數(shù)據(jù)修改(INSERT、UPDATE由捎、DELETE…)的二進制日志兔综。

binlog不會記錄SELECT和SHOW這類操作,因為這類操作對數(shù)據(jù)本身并沒有修改狞玛,但你可以通過查詢通用日志來查看MySQL執(zhí)行過的所有語句软驰。

使用mysqlbinlog功能必須先在mysql配置binlog,開啟binlog服務(wù)

配置binlog

一.5.7之前心肪,my.cnf/my.ini都在mysql得根目錄下锭亏,只需要在mysqld下面添加配置

log-bin=mysql-bin

binlog-format=Row

server-id=1

解釋:

1.開啟binlog。=mysql-bin這部分參數(shù)可以改成一個路徑存放binlog文件硬鞍,默認是這個配置慧瘤,文件存放到mysql得data文件夾內(nèi)初始化生成mysql-bin.00000x/mysql-bin.index文件

?????? 2.binlog-format有3個參數(shù)

① STATEMENT模式(SBR)


每一條會修改數(shù)據(jù)的sql語句會記錄到binlog中伐坏。優(yōu)點是并不需要記錄每一條sql語句和每一行的數(shù)據(jù)變化,減少了binlog日志量剿骨,節(jié)約IO罚随,提高性能屠升。缺點是在某些情況下會導(dǎo)致master-slave中的數(shù)據(jù)不一致(如sleep()函數(shù)脏答,last_insert_id(),以及user-defined functions(udf)等會出現(xiàn)問題)


② ROW模式(RBR)


不記錄每條sql語句的上下文信息爽丹,僅需記錄哪條數(shù)據(jù)被修改了,修改成什么樣了谤狡。而且不會出現(xiàn)某些特定情況下的存儲過程、或function盈罐、或trigger的調(diào)用和觸發(fā)無法被正確復(fù)制的問題悄蕾。缺點是會產(chǎn)生大量的日志,尤其是alter table的時候會讓日志暴漲。


③ MIXED模式(MBR)


以上兩種模式的混合使用锄禽,一般的復(fù)制使用STATEMENT模式保存binlog宵晚,對于STATEMENT模式無法復(fù)制的操作使用ROW模式保存binlog逸贾,MySQL會根據(jù)執(zhí)行的SQL語句選擇日志保存方式咪鲜。

在MySQL 5.7.7之前享郊,默認格式是 STATEMENT玄货。在MySQL 5.7.7及更高版本中隘世,默認值是ROW。 例外:在NDB群集中主儡,默認值是MIXED;

NDB群集不支持基于語句的復(fù)制。


用戶必須有權(quán)SUPER 設(shè)置全局binlog_format值或會話值。

3. server-id,開啟binlog必須設(shè)置此參數(shù)嚷硫,否則報錯负懦,不能啟動服務(wù)蟆盹,值是一個隨機數(shù)舔哪,在主從mysql配置中要設(shè)定不能重復(fù)得值

二.5.7之后

5.7之后my.cnf/my.ini被挪到了mysql根目錄下得bin文件夾,我在此配置中開啟binlog無效胧卤,在mysql根目錄下配置my.cnf/my.ini推捐,內(nèi)容如下:

[client]

default-character-set=utf8

[mysql]

default-character-set=utf8

[mysqld]

log-bin=mysql-bin

binlog-format=Row

server-id=1

即可正常使用,

備注:開啟binlog配置后,個人使用得windows10系統(tǒng)湿滓,在用一些集成工具比如:phpstudy朝氓,wamp啟動mysql得時候不能啟動,權(quán)限不足颜曾,需要在cmd窗口下,使用管理員權(quán)限啟動mysql服務(wù)秉剑。

三.配置好binlog之后檢查配置是否開啟

mysql> show variables like 'log_bin%';?


Log_bin?NO開啟binlog服務(wù)

四.刪庫之后使用備份與binlog文件恢復(fù)數(shù)據(jù)

新建數(shù)據(jù)庫并建表填入數(shù)據(jù)如下

備份數(shù)據(jù)庫泛豪,數(shù)據(jù)id=7,備份后添加幾條數(shù)據(jù)侦鹏,最終表數(shù)據(jù)如下



刪除數(shù)據(jù)庫诡曙,

恢復(fù)數(shù),此時執(zhí)行一次刷新日志索引操作略水,重新開始新的binlog日志記錄文件价卤,理論說已有得binlogn 文件不會再有后續(xù)寫入了(便于我們分析原因及查找pos點),以后所有數(shù)據(jù)庫操作都會寫入到下一個日志文件渊涝;

?????mysql> mysql> flush logs;

?????mysql> show master status;

導(dǎo)入備份數(shù)據(jù)庫文件慎璧,恢復(fù)如下

此時可以看到,id=8跨释,9胸私,10內(nèi)容我們并沒有備份,使用mysql命令查看最新得binlog日志

mysql>show binlog events in 'mysql-bin.000001';

在11694進行了刪庫操作煤傍,恢復(fù)到刪庫操作前一個節(jié)點盖文,11594

進入數(shù)據(jù)庫數(shù)據(jù)文件目錄,本人是windwos10系統(tǒng)蚯姆,進入mysql下得data文件夾洒敏,

從binlog日志恢復(fù)數(shù)據(jù)


?????恢復(fù)語法格式:

?????# mysqlbinlog mysql-bin.0000xx | mysql -u用戶名 -p密碼數(shù)據(jù)庫名


???????常用選項:

?????????--start-position=953??????????????????起始pos點

?????????--stop-position=1437??????????????????結(jié)束pos點

?????????--start-datetime="2013-11-29 13:18:54"起始時間點

?????????--stop-datetime="2013-11-29 13:21:53"? 結(jié)束時間點

?????????--database=zyyshop????????????????????指定只恢復(fù)zyyshop數(shù)據(jù)庫(一臺主機上往往有多個數(shù)據(jù)庫龄恋,只限本地log日志)


???????不常用選項:???

?????????-u --user=name?????????????Connect to the remote server as username.連接到遠程主機的用戶名

?????????-p --password[=name]???????Password to connect to remote server.連接到遠程主機的密碼

?????????-h --host=name????????????? Getthe binlog from server.從遠程主機上獲取binlog日志

?????????--read-from-remote-server?? Readbinary logs from a MySQL server.從某個MySQL服務(wù)器上讀取binlog日志


實際是將讀出的binlog日志內(nèi)容,通過管道符傳遞給mysql命令凶伙。這些命令郭毕、文件盡量寫成絕對路徑;

我們需要恢復(fù)到11694函荣,命令如下:

報錯如下:

一是在MySQL的配置my.cnf/my.ini中將default-character-set=utf8 修改為character-set-server = utf8显押,但是這需要重啟MySQL服務(wù)扳肛,如果你的MySQL服務(wù)正在忙,那這樣的代價會比較大乘碑。

二是用--no-defaults 命令參數(shù)

5.7之后挖息,mysql不允許在命令行直接鍵入數(shù)據(jù)庫密碼,建議在輸入密碼提示之后在鍵入密碼兽肤,命令行得密碼可以忽略掉套腹,或者在my.cnf/my.ini中配置

最終命令如下:

D:\phpStudy\PHPTutorial\MySQL\data>mysqlbinlog --no-defaults mysql-bin.000001 --stop-position 11694 | mysql -uroot

去看下數(shù)據(jù)庫吧

mysql數(shù)據(jù)恢復(fù),使用binlog配置恢復(fù)未備份數(shù)據(jù)

id8资铡,9电禀,10在沒有備份文件得情況下也恢復(fù)成功,盡量還是要備份好文件笤休,binlog開啟后尖飞,會占用不小得空間,以及一部分mysql性能店雅。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末政基,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子底洗,更是在濱河造成了極大的恐慌腋么,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亥揖,死亡現(xiàn)場離奇詭異珊擂,居然都是意外死亡,警方通過查閱死者的電腦和手機费变,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門摧扇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人挚歧,你說我怎么就攤上這事扛稽。” “怎么了滑负?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵在张,是天一觀的道長。 經(jīng)常有香客問我矮慕,道長帮匾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任痴鳄,我火速辦了婚禮瘟斜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己螺句,他們只是感情好虽惭,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蛇尚,像睡著了一般芽唇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上佣蓉,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天披摄,我揣著相機與錄音,去河邊找鬼勇凭。 笑死疚膊,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的虾标。 我是一名探鬼主播寓盗,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼璧函!你這毒婦竟也來了傀蚌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蘸吓,失蹤者是張志新(化名)和其女友劉穎善炫,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體库继,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡箩艺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了宪萄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艺谆。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拜英,靈堂內(nèi)的尸體忽然破棺而出静汤,到底是詐尸還是另有隱情,我是刑警寧澤居凶,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布虫给,位于F島的核電站,受9級特大地震影響侠碧,放射性物質(zhì)發(fā)生泄漏狰右。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一舆床、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦挨队、人聲如沸谷暮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽湿弦。三九已至,卻和暖如春腾夯,著一層夾襖步出監(jiān)牢的瞬間颊埃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工蝶俱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留班利,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓榨呆,卻偏偏與公主長得像罗标,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子积蜻,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容