• 设备
    • 今日
    • 3

    mysql数据恢复-日志文件提取删除数据


    1.误删除,如上图数据

    2.马上进入mysql,输入以下命令,重新创建新的日志文件mysql-bin.000002, 则误删的记录就保留在旧日志文件mysql-bin.000001中,如下图

    mysql> FLUSH LOGS;

    cp /app/mysql/data/mysql-bin.000001 /opt/tmp


    3. cd /opt/tmp, 用mysqlbinlog导出相应误删的时间段内的删除记录

    mysqlbinlog \

    --start-datetime="2019-10-24 17:10:00" \

    --stop-datetime="2019-10-24 17:20:00" \

    --base64-output=decode-rows \

    --result-file=deldata.txt \

    -v /app/mysql/data/mysql-bin.000001


    4. 去除不相关的内容:根据关键字: DELETE FROM `yqy_show`.`tmp_citypb`

    注意: grep -A 9中的9代表误删表的字段总数+1的值,如上图,我的表中8个字段;若此数值过大或过小,数据会有误差,如用50,,则需长时间导出数据,同时导出的数据会多了些无用数据,若此数据过小,数据会不完整.

    grep -A 9 "DELETE FROM \`yqy_show\`.\`tmp_citypb\`" ./deldata.txt > 201910.txt

    cat 201910.txt  //提取的部分数据如下

    ### DELETE FROM `yqy_show`.`tmp_citypb`

    ### WHERE

    ###   @1=1

    ###   @2=20186

    ###   @3=20

    ###   @4='杭州市'

    ###   @5='0571'

    ###   @6='SYS_CITY'

    ###   @7=1210

    ###   @8=121015

    5. 创建数据导出脚本bintosql.sh,若有字段含有时间戳, 即类型为: timestamp,假设第3个字段为时间戳, 需用函数FROM_UNIXTIME()转换.若没有时间戳字段,将以下的14,15行注释掉就好.

    注: 脚本内,两个:$col -le 8 中的8 ,为该表的8个字段总数.

    filename=$1

    tabname=$2

    fpath=/opt/tmp

    insertsql=$fpath/$tabname".sql"

    cat $fpath/$filename|grep "###   @" > $tabname.tmp

    s1="INSERT INTO \`yqy\`.\`$tabname\` VALUES"

    line_str=""

    while read line

    do

    col=`echo "$line" | awk -NF "=" '{print $1}' | sed 's/###   @//g'`

    val=`echo "$line" | awk -NF "=" '{print $2}'`

    if [[ $col -eq 1 ]]; then

    line_str="("$val

    # elif [[ $col -eq 3 ]]; then

    # line_str=$line_str",FROM_UNIXTIME("$val")"

    elif [[ $col -le 8 ]]; then

    line_str=$line_str","$val

    fi

    if  [[ $col -eq 8 ]]; then

    line_str=$line_str"),"

    s1=$s1$line_str

    fi

    done < $tabname.tmp

    #echo $s1|sed 's/.$//'

    s2=`echo $s1|sed 's/.$//'`

    #echo $s2

    echo $s2";" > $insertsql


    7. 提取deldata.txt中的误删数据,将自动生成insert sql脚本(如下则生成sql脚本:201910.sql)

    sh /opt/tmp/bintosql.sh 201910.txt 201910


    8. 在查询编辑器中,执行201910.sql中的内容,如下图,所删除的3条记录,恢复成功.


    来自:PC 广东省广州市
    上一篇: MAC系统java开发环境搭建教程
    您可能还喜欢这些:

    2 1条评论

    评论审核已开启 记住我的个人信息 回复后邮件通知我