zoukankan      html  css  js  c++  java
  • 从mysqldump整库备份文件中恢复单表

    最近,系统更新出现了问题,比较紧急,需要对三张表进行回档。由于我们都是采用mysqldump进行每天全备整库,数据量比较大,一个备份文件大概有70G,需要从这个70G文件中恢复三张表,真是蛋疼至极啊,搞了整整一个下午,下面就介绍下具体操作。

    1、采用grep查找:由于mysqldump文件导出的是insert into ...values(),(),()...这种形式,其实多行都是属于一行文本的。

     cat fullbk20151108031001 | grep --ignore-case  'insert into `t_user`' > user.sql

    结果:15G大小的文件大概2小时之类能够搞定,但是对于70G的文件,迟迟没有结果,干着急啊,于是乎,就想换个命令吧。希望能快点

    2、采用sed命令:

    sed -n '/INSERT INTO `t_user_pve_ranking`/p' fullbk20151108031001

    又等了好久,还是没有出结果啊,坐不住了,开发开始深深的鄙视我们了,最后,死马当活马医吧,把这个70G大文件切分成多个小文件,然后在小文件中进行sed:

    3、采用split切分大文件方法:

        split [参数选项] infile [outfile]

      split 把输入的文件拆分为若干体积或长度相等的文件,输入文件保持不变,只是把结果拆分结果写到outfileaa、outfileab ... ... 等文件中。如果我们不指定outfile,被拆分后的文件会写到 xaa、xab ... ...。
        常用参数:

            -l n 把infile拆分为具有n行的段,默认值为1000

            -b n[bkm] 以体积为单位的拆分,约定每拆分后每个文件的大小 ,b代表512B,k代表1KB,m代表1MB。

            -C bytes[bkm] 把bytes的最大值放入文件,坚持增加完整的行;
    #按1000行一个文件进行切分,最好在后台运行
    split -l 1000 fullbk20151108031001 &

    然后在通过sed命令进行一个一个文件查找:

    sed -n '/INSERT INTO `t_user_pve_ranking`/p' aaa
    sed -n '/INSERT INTO `t_user_pve_ranking`/p' bbb
    ........

    这样,每个小文件查找很快,这里可以写个shell脚本,循环遍历的。

    最后通过这种方法找到了表。简直就是坑爹啊,我不知道还有其他更好的方式了,反正mysqldump备份大库恢复指定表很慢很慢的,强烈建议使用innobackupex,我测试了也就半个小时就可以搞定了。

  • 相关阅读:
    php八种常用函数
    已知二叉树的前序中序遍历,如何得到它的后序遍历?
    PTA_Have fun with numbers(C++)
    PTA_输入符号及符号个数打印沙漏(C++)
    Web安全之SQL注入
    南京邮电大学//bugkuCTF部分writeup
    修改或添加HTTP请求头
    第二次作业
    博客作业1
    linux python 串口
  • 原文地址:https://www.cnblogs.com/wangsicongde/p/7588548.html
Copyright © 2011-2022 走看看