[發(fā)明專利]一種支持MySQL快速回滾數(shù)據(jù)的方法在審
| 申請?zhí)枺?/td> | 201910904004.5 | 申請日: | 2019-09-23 |
| 公開(公告)號: | CN110674151A | 公開(公告)日: | 2020-01-10 |
| 發(fā)明(設(shè)計)人: | 劉小龍;唐軍;周文龍 | 申請(專利權(quán))人: | 四川長虹電器股份有限公司 |
| 主分類號: | G06F16/23 | 分類號: | G06F16/23;G06F16/242;G06F16/21 |
| 代理公司: | 51213 四川省成都市天策商標專利事務(wù)所 | 代理人: | 胡慧東 |
| 地址: | 621000 四*** | 國省代碼: | 四川;51 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 回滾 數(shù)據(jù)庫 讀取文件 恢復(fù)過程 臨時文件 數(shù)據(jù)流 可執(zhí)行 客戶端 誤操作 歸檔 日志 停機 語句 重做 拼接 捕獲 抽取 偽裝 輸出 恢復(fù) | ||
本發(fā)明公開了一種支持MySQL快速回滾數(shù)據(jù)的方法,包括以下步驟:A.抽取數(shù)據(jù)庫的歸檔日志,獲取需要回滾的數(shù)據(jù)的event初始值和結(jié)束值;B.在程序客戶端偽裝成一個slave,不斷的獲取數(shù)據(jù)庫的重做數(shù)據(jù)流;C.捕獲DML事件,分別將insert/update/delete語句進行重新拼接;D.關(guān)閉臨時文件,讀取文件中回滾SQL內(nèi)容并輸出;通過本方法直接生成了可執(zhí)行的回滾SQL語句,可以實現(xiàn)快速的恢復(fù)誤操作數(shù)據(jù);恢復(fù)過程不需要停機,操作簡單方便且快速。
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)庫技術(shù)領(lǐng)域,尤其涉及一種支持MySQL快速回滾數(shù)據(jù)的方法。
背景技術(shù)
在MySQL數(shù)據(jù)庫的生產(chǎn)運維過程中,誤刪除數(shù)據(jù)、誤修改數(shù)據(jù)是經(jīng)常發(fā)生的事情。數(shù)據(jù)對任何一個項目都是非常重要的財產(chǎn),如何快速有效的回滾數(shù)據(jù)已經(jīng)成為一種考驗。一種快速的恢復(fù)方法是在系統(tǒng)層面,利用LVM的快照來獲取某個時間點的數(shù)據(jù)。但是快照功能是基于特定的時間點的,不能最大限度的減小可能的數(shù)據(jù)丟失。更傳統(tǒng)的恢復(fù)辦法是利用備份重新搭建實例,再應(yīng)用去除錯誤SQL之后的binlog來盡可能的恢復(fù)數(shù)據(jù)。但是此方法費時費力,甚至需要停機維護,并不適合快速回滾數(shù)據(jù)。
發(fā)明內(nèi)容
本發(fā)明的目的就在于為了解決上述問題而提供一種支持MySQL快速回滾數(shù)據(jù)的方法,通過解析數(shù)據(jù)庫的歸檔二進制日志文件,反向生成可執(zhí)行的回滾SQL語句,可以實現(xiàn)快速的恢復(fù)誤操作數(shù)據(jù)。
本發(fā)明通過以下技術(shù)方案來實現(xiàn)上述目的:
一種支持MySQL快速回滾數(shù)據(jù)的方法,包括以下步驟:
A.抽取數(shù)據(jù)庫的歸檔日志,獲取需要回滾的數(shù)據(jù)的event初始值和結(jié)束值;
在數(shù)據(jù)庫里誤操作數(shù)據(jù)之后,在歸檔日志文件里會記錄下所有的DML操作(即所有的增刪改動作)。通過抽取數(shù)據(jù)庫的歸檔二進制日志(即binlog文件),形成一個可讀的數(shù)據(jù)庫操作日志,這里面包含了已執(zhí)行的誤操作數(shù)據(jù)和SQL語句。由此定位到誤操作數(shù)據(jù)的范圍,并獲得需要回滾的數(shù)據(jù)的event(理解為一個獨立單元的事務(wù))初始值和結(jié)束值。event的位置均是由具體的file和position點位來確定的。
B.在程序客戶端偽裝成一個slave,不斷的獲取數(shù)據(jù)庫的重做數(shù)據(jù)流;
對于數(shù)據(jù)庫的主從架構(gòu),主庫的數(shù)據(jù)會不斷同步到從庫,來達到從庫數(shù)據(jù)一致性。由此可以用程序來實現(xiàn)一個客戶端,把自己偽裝成一個slave從庫,不斷的獲取主庫的binlog文件并解析。在步驟A中獲得的event區(qū)間內(nèi),啟動一個循環(huán)遍歷獲取binlog的event信息。若當前處理的event位置大于獲取的結(jié)束值,則退出循環(huán)。通過event初始值和結(jié)束值,在循環(huán)體內(nèi)獲取到范圍內(nèi)的event數(shù)據(jù)。
C.捕獲DML事件,分別將insert/update/delete語句進行重新拼接;
首先通過具體的數(shù)據(jù)庫和表名稱,來進行第一步過濾誤操作的數(shù)據(jù)。在每一次循環(huán)的event事件中,對各種DML操作做不同的處理。把delete型的改寫成insert型,insert型的改為delete型,update型的改前的值和改后的值調(diào)換。然后把改寫后的語句拼接成可執(zhí)行的SQL,這些SQL腳本就是對之前誤操作的反向操作語句。把拼接好的回滾SQL語句寫入到一個臨時文件,直到最后循環(huán)體結(jié)束。
D.關(guān)閉臨時文件,讀取文件中回滾SQL內(nèi)容并輸出;
若當前處理的event位置大于獲取的結(jié)束值,則退出循環(huán),并關(guān)閉打開的臨時文件。由此文件內(nèi)已經(jīng)寫入了處理過的回滾SQL語句,最后讀取文件中回滾SQL內(nèi)容并輸出。打印出的回滾SQL語句可以直接在數(shù)據(jù)庫的客戶端執(zhí)行,用于恢復(fù)范圍內(nèi)的誤操作數(shù)據(jù)。
本發(fā)明的有益效果在于:
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于四川長虹電器股份有限公司,未經(jīng)四川長虹電器股份有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201910904004.5/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 數(shù)據(jù)庫
- 數(shù)據(jù)庫管理系統(tǒng)及數(shù)據(jù)庫
- 數(shù)據(jù)庫構(gòu)筑裝置、數(shù)據(jù)庫檢索裝置、數(shù)據(jù)庫裝置、數(shù)據(jù)庫構(gòu)筑方法、以及數(shù)據(jù)庫檢索方法
- 數(shù)據(jù)庫和數(shù)據(jù)庫處理方法
- 數(shù)據(jù)庫系統(tǒng)、數(shù)據(jù)庫更新方法、數(shù)據(jù)庫以及數(shù)據(jù)庫更新程序
- 容器數(shù)據(jù)庫
- 數(shù)據(jù)庫同步方法及數(shù)據(jù)庫
- 一種MongoDB數(shù)據(jù)庫對象復(fù)制延遲監(jiān)控方法和裝置
- 數(shù)據(jù)分布式存儲方法、裝置、電子設(shè)備及存儲介質(zhì)
- 數(shù)據(jù)庫語句執(zhí)行方法及裝置





