如何将大sql转储文件拆分成小块并在原始文件中维护每个记录,尽管后来删除了其他记录

时间:2016-07-25 12:19:46

标签: sql database split mysqldump csplit

这是我想要做的事情(MySQL示例):

  1. 仅转储结构 - structure.sql
  2. 转储所有表格数据 - data.sql
  3. 拆分data.sql并将每个表数据信息分开放置文件 - table1.sql ,table2,sql,table3.sql ... tablen.sql
  4. 将每个表拆分为较小的文件(每个文件1k行)
  5. 提交本地git存储库中的所有文件
  6. 将所有目录交给远程安全服务员
  7. 我遇到#4步问题。

    例如,我将table1.sql拆分为3个文件: table1_a.sql table1_b.sql table1_c.sql 。 如果在新转储中有新的记录很好 - 它只是添加到table1_b.sql。

    但是如果table1_a.sql中有已删除的记录,则所有下一条记录都将移动,git会将文件table1_b.sql和table1_c.sql视为已更改,但不行。

    基本上它破坏了在SCM中保留sql备份的整个想法。

    我的问题:如何将大的sql转储文件拆分成小块并在原始文件中维护每条记录,尽管后来的其他记录被删除了?

2 个答案:

答案 0 :(得分:0)

根本不要分开它们。或者按PK值的范围拆分它们。或者将它们拆分为每个文件1 db行(并在tablename之后命名文件+主键的内容)。

(除了更明显的XY回答,这是我本能的反应。)

答案 1 :(得分:0)

要在终端中执行500行的文件中拆分SQL转储:

$ split -l 5000 hit_2017-09-28_20-07-25.sql dbpart-