<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        MySQL遭遇DELETE誤操作的回滾

        來源:懂視網 責編:小采 時間:2020-11-09 13:57:08
        文檔

        MySQL遭遇DELETE誤操作的回滾

        MySQL遭遇DELETE誤操作的回滾:方法: 條件:開啟Binlog,Format為Row。 步驟: 1.通過MySQL自帶工具mysqlbinlog 指定導出操作的記錄: mysqlbinlog --no-defaults --start-datetime='2012-12-25 14:56:00' --stop-datetime='2012-12-25 14:5
        推薦度:
        導讀MySQL遭遇DELETE誤操作的回滾:方法: 條件:開啟Binlog,Format為Row。 步驟: 1.通過MySQL自帶工具mysqlbinlog 指定導出操作的記錄: mysqlbinlog --no-defaults --start-datetime='2012-12-25 14:56:00' --stop-datetime='2012-12-25 14:5

        方法: 條件:開啟Binlog,Format為Row。 步驟: 1.通過MySQL自帶工具mysqlbinlog 指定導出操作的記錄: mysqlbinlog --no-defaults --start-datetime='2012-12-25 14:56:00' --stop-datetime='2012-12-25 14:57:00' -vv mysql-bin.000001 /home/zhoujy/rest

        方法:

        條件:開啟Binlog,Format為Row。

        步驟:

        1.通過MySQL自帶工具mysqlbinlog 指定導出操作的記錄:

        mysqlbinlog
        --no-defaults
        --start-datetime='2012-12-25 14:56:00'
        --stop-datetime='2012-12-25 14:57:00'
        -vv mysql-bin.000001 > /home/zhoujy/restore/binlog.txt

        2.數據取出來之后,需要把數據解析反轉,原始數據:

        ### DELETE FROM test.me_info
        ### WHERE
        ### @1=2165974 /* INT meta=0 nullable=0 is_null=0 */
        ### @2='1984:03:17' /* DATE meta=0 nullable=1 is_null=0 */
        ### @3=NULL /* DATE meta=765 nullable=1 is_null=1 */
        ### @4=2012-10-25 00:00:00 /* DATETIME meta=0 nullable=0 is_null=0 */
        ### @5='' /* VARSTRING(765) meta=765 nullable=1 is_null=0 */
        ### @6=0 /* TINYINT meta=0 nullable=1 is_null=0 */
        ### @7='' /* VARSTRING(765) meta=765 nullable=1 is_null=0 */
        ### @8=-1 (4294967295) /* INT meta=0 nullable=1 is_null=0 */
        ### @9=0 /* MEDIUMINT meta=0 nullable=1 is_null=0 */
        ### @10=NULL /* MEDIUMINT meta=0 nullable=1 is_null=1 */
        ### @11=2 /* TINYINT meta=0 nullable=1 is_null=0 */
        ### @12=0 /* TINYINT meta=0 nullable=1 is_null=0 */
        ### @13='' /* VARSTRING(765) meta=765 nullable=1 is_null=0 */
        ### @14='' /* VARSTRING(765) meta=765 nullable=1 is_null=0 */
        ### @15=0 /* MEDIUMINT meta=0 nullable=1 is_null=0 */
        ### @16=320 /* INT meta=0 nullable=1 is_null=0 */
        ……………………
        ……………………
        ……………………

        Row格式的binlog記錄的格式如上面所示,需要做的工作就是吧Delete的操作轉換成Insert操作,發上面的都是有一定規律的,并且需要注意的是:

        1、字段類型 DATETIME 日期。在日志中保存的格式為 @4=2012-10-25 00:00:00,需要將2012-10-25 00:00:00加上引號。

        2、負數。在日志中保存的格式為 @1=-1 (4294967295), -2(4294967294),-3(4294967293),需要將()里面的數據去掉,,只保留@1=-1。

        3、轉義字符集。如:'s,,等。

        上面3點清楚之后,可以寫一個腳本(水平有限,在提升中,寫的不好看):

        #!/bin/env python
        # -*- encoding: utf-8 -*-
        #-------------------------------------------------------------------------------
        # Name: restore.py
        # Purpose: 通過Binlog恢復Delete誤操作數據
        # Author: zhoujy
        # Created: 2012-12-25
        # update: 2012-12-25
        # Copyright: (c) Mablevi 2012
        # Licence: zjy
        #-------------------------------------------------------------------------------
        def read_binlog(file,column_num):
        f=open(file)
        num = '@'+str(column_num)
        while True:
        lines = f.readline()
        if lines.strip()[0:3] == '###':
        lines=lines.split(' ',3)
        if lines[1] == 'DELETE' and lines[2] =='FROM': #該部分替換Delete為Insert
        lines[1] = "INSERT"
        lines[2] = 'INTO'
        lines[-1] = lines[-1].strip()
        if lines[1].strip() == 'WHERE':
        lines[1] = 'VALUES ('
        if ''.join(lines).find('@') <> -1 and lines[3].split('=',1)[0] <> num: #num為列數,要是小于最大的列數,后面均加,
        lines[3] = lines[3].split('=',1)[-1].strip()
        if lines[3].strip(''').strip().find(''') <> -1:
        lines[3] = lines[3].split('/*')[0].strip(''').strip().strip(''').replace('','').replace(''',''') #這里過濾掉轉義的字符串
        lines[3] = ''' + lines[3] + '','
        elif lines[3].find('INT meta') <> -1: #過濾Int類型的字段為負數后帶的(),正數不受影響
        lines[3] = lines[3].split('/*')[0].strip()
        lines[3] = lines[3].split()[0] + ','
        elif lines[3].find('NULL') <> -1:
        lines[3] = lines[3].split('/*')[0].strip()
        lines[3] = lines[3] + ','
        else:
        lines[3] = lines[3].split('/*')[0].strip(''').strip().strip(''').replace('','').replace(''',''') #這里過濾掉轉義的字符串
        lines[3] = ''' + lines[3].strip('''' ') + '','
        if ''.join(lines).find('@') <> -1 and lines[3].split('=',1)[0] == num: #num為列數,要是小于最大的列數,后面均加);
        lines[3] = lines[3].split('=',1)[-1].strip()
        if lines[3].find(''') <> -1:
        lines[3] = lines[3].split('/*')[0].strip(''').strip().strip(''').replace('','').replace(''',''') #同上
        lines[3] = ''' + lines[3] + '');'
        elif lines[3].find('INT meta') <> -1: #同上
        lines[3] = lines[3].split('/*')[0].strip()
        lines[3] = lines[3].split(' ')[0] + ');'
        elif lines[3].find('NULL') <> -1:
        lines[3] = lines[3].split('/*')[0].strip()
        lines[3] = lines[3] + ');'
        else:
        lines[3] = lines[3].split('/*')[0].strip(''').strip().strip(''').replace('','').replace(''',''') #同上
        lines[3] = ''' + lines[3].strip('''' ') + '');'
        print ' '.join(lines[1:])
        if lines == '':
        break
        if __name__ == '__main__':
        import sys
        read_binlog(sys.argv[1],sys.argv[2])

        執行腳本:

        python restore.py binlog.txt 36 > binlog.sql

        命令行中的36 表示 需要還原的表的字段有36個,效果:

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        MySQL遭遇DELETE誤操作的回滾

        MySQL遭遇DELETE誤操作的回滾:方法: 條件:開啟Binlog,Format為Row。 步驟: 1.通過MySQL自帶工具mysqlbinlog 指定導出操作的記錄: mysqlbinlog --no-defaults --start-datetime='2012-12-25 14:56:00' --stop-datetime='2012-12-25 14:5
        推薦度:
        標簽: 操作 mysql 遭遇
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 四虎国产精品免费久久| 最近中文字幕mv免费高清在线| 性xxxxx免费视频播放| 人人玩人人添人人澡免费| 亚洲精品线路一在线观看| 色多多www视频在线观看免费| 在线免费观看国产视频| 国产AV无码专区亚洲AV男同| 国产精品福利片免费看| 亚洲精品无码成人片久久| 中文字幕无码日韩专区免费| 国内自产少妇自拍区免费| 亚洲男同gay片| va亚洲va日韩不卡在线观看| 九九免费久久这里有精品23| 亚洲午夜久久久影院| 久久永久免费人妻精品下载| 亚洲一区免费在线观看| 国产一区二区三区免费视频 | 最新久久免费视频| 亚洲AV无码AV男人的天堂| 国产精品亚洲专区无码牛牛| 亚洲 另类 无码 在线| 国产三级在线免费| 亚洲一区二区免费视频| 国产猛烈高潮尖叫视频免费| 免费国产污网站在线观看不要卡| 国产亚洲精品a在线观看app| 91精品免费久久久久久久久| 亚洲av无码专区在线电影天堂| 免费观看黄色的网站| 亚洲国产欧美国产综合一区 | 一区二区三区免费视频网站| 亚洲成人中文字幕| 久久精品无码一区二区三区免费| 四虎影视永久在线精品免费| 337p欧洲亚洲大胆艺术| 野花香在线视频免费观看大全 | 亚洲男人的天堂网站| 日韩亚洲变态另类中文| 国产亚洲精品第一综合|