2016-07-06 58 views
0

所以我有一個二進制日誌需要永久恢復,因爲一些寫得不好的代碼每隔一秒鐘就會更新一個表格,對於當前登錄的每個用戶。當然,恢復過程正在恢復這些行中的每一行,並使腳本比需要的時間更長。如何從MySQL二進制日誌中刪除特定的查詢

更新此文件以從所有二進制日誌中刪除特定查詢的最快方法是什麼?我有這個PHP腳本,我測試過它在一個較小的文件上工作,但preg_replace似乎有一些限制(或者只是PHP作爲一個整體),當它涉及到文件大小。

這裏是我的PHP線:

file_put_contents("/logs/restore.sql",preg_replace("/use(?:.|\n)+?update `notifi(?:.|\n)+?COMMIT\/\*\!\*\/;/mui",'',file_get_contents("/logs/restorex.sql"))); 

正則表達式中似乎有與較小的文件中偉大的工作,它只是我不與任何其他語言一樣好(PHP是我的主要語言)知道我應該使用什麼,或者如何將該正則表達式實現爲其他東西。

+0

** grep **會更快 - 使用_-v_標誌來指示您只想保留那些沒有您標識的內容的行。 – user2182349

+0

你認爲你可以幫助我嗎?我是一個bash noob,我不知道從哪裏開始我可以找到的示例 –

+0

您可以發佈一小部分測試數據嗎?也許兩條你不想匹配的線和一條線? – user2182349

回答

1

如果你願意在該表扔掉所有的數據,

ALTER TABLE notifications ENGINE=BLACKHOLE; 

然後,因爲他們什麼都不做的查詢將被壓縮。

+0

這真是難以置信,我甚至都不認爲會有這樣的事情存在。下次我必須從binlogs恢復時,我一定會記下這一點 –