代码之家  ›  专栏  ›  技术社区  ›  deadprogrammer

操作巨型MySQL转储文件

  •  5
  • deadprogrammer  · 技术社区  · 16 年前

    获取单个表的数据、删除单个表或将整个转储文件分解为每个包含单个表的文件的最简单方法是什么?我通常会做很多vi regex咀嚼,但我敢打赌,用awk/perl等做这些事情有更简单的方法。Google结果的第一页会带回一堆不工作的perl脚本。

    5 回复  |  直到 16 年前
        1
  •  11
  •   mercutio    16 年前

    当我需要从sql转储中提取一个表时,我使用grep、head和tail的组合。

    grep -n "CREATE TABLE" dump.sql
    

    这会给你每个表的行号,所以如果你的表在第200行,后面的在第269行,我会:

    head -n 268 dump.sql > tophalf.sql
    tail -n 69 tophalf.sql > yourtable.sql
    

    有人想在这里做吗?

    还有一点可能有助于启动bash循环:

    grep -n "CREATE TABLE " dump.sql  | tr ':`(' '  ' | awk '{print $1, $4}'
    

    这提供了一个很好的行号和表名列表,比如:

    200 FooTable
    269 BarTable
    
        2
  •  9
  •   Brad Mace Mike King    13 年前

    省去很多麻烦和使用 mysqldump -T

    documentation :

    生成以制表符分隔的数据文件。对于每个转储表,mysqldump 创建表,以及包含其 数据。选项值是要在其中写入文件的目录。

    在列值和每行末尾的换行符之间。这个 可以使用--fields xxx和

    注意
    仅当mysqldump在 并且服务器必须具有在目录中写入文件的权限 你指定的。

        3
  •  4
  •   Brad Mace Mike King    13 年前

    This shell script splitted.sql .

    它能够理解正则表达式,因为我添加了 sed -r

    MyDumpSplitter还可以将转储拆分为单独的表转储。

        4
  •  2
  •   elhoim    15 年前
        5
  •  0
  •   jodu    11 年前

    我已经晚了一点,但是如果它能帮助任何人,我不得不分割一个巨大的SQL转储文件,以便将数据导入到另一个Mysql服务器。

    split-l 1000 import.sql已拆分的文件

    上面将每1000行拆分一次sql文件。

    希望这对某人有帮助