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

标签 sql database split mysql csplit

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

  1. 仅转储结构 - Structure.sql
  2. 转储所有表数据 - data.sql
  3. 拆分data.sql并将每个表数据信息放入单独的文件 - table1.sql、table2、sql、table3.sql ... tablen.sql
  4. 将每个表拆分为更小的文件(每个文件 1k 行)
  5. 提交本地 git 存储库中的所有文件
  6. 将所有目录复制到远程安全服务器

我在执行第 4 步时遇到问题。

例如,我将 table1.sql 分成 3 个文件:table1_a.sqltable1_b.sqltable1_c.sql。 如果在新转储上有新记录,那很好 - 它只是添加到 table1_b.sql 中。

但是,如果 table1_a.sql 中存在已删除的记录,则所有后续记录都将移动,并且 git 会将文件 table1_b.sql 和 table1_c.sql 视为已更改,但这是不行的。

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

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

最佳答案

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

(除了更明显的 XY 答案,这是我的本能 react 。)

关于sql - 如何将大sql转储文件分割成小块并维护原始文件中的每条记录,尽管后来删除了其他记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38567600/

相关文章:

database - 我知道大局,但不能把它放在适当的位置

java - 无法在带有 ^(插入符号)符号的字符串上使用 String.split

c# - 为什么 Regex.Split 在正则表达式上拆分时保留分隔符

mysql - 如何对按父表中的列分组的子表中的行求和

c# - MVC C# web 服务连接两个表并合并输出

sql - PostgreSQL - 根据从另一个表中选择插入行,并用新插入的行更新该表中的 FK

android - 拦截数据库错误 "file is encrypted or is not a database"

android - 在 Android 中存储和搜索大文本数据的最佳方式

python - 在Python中,当满足条件时重新排列数据框中的单词顺序?

mysql - 在 innoDB 中优化 MySQL LIKE '%string%' 查询