将多个.sql表转储文件合并到单个文件中

are*_*ete 9 mysql shell

假设我有数据库A和表b.给定多个.sql文件b1,b2,...,bn,每个文件对应一个b的互斥表转储,我将如何将所有文件b1,b2,...,bn组合成一个.sql表文件?或者我如何将单个文件的导入合并到一个表中?

Bil*_*win 19

没有特殊工具可以做到这一点.您可以简单地连接文件:

$ cat b1.sql b2.sql b3.sql > b_all.sql
Run Code Online (Sandbox Code Playgroud)

除了这些.sql文件的典型内容是DROP TABLE,然后是CREATE TABLE,然后是很多INSERT语句.如果每个单独的转储文件都是这样格式化的,那么如果按顺序还原它们,则每个转储文件都将DROP TABLE并擦除前一个文件导入的数据.

您可以在没有DROP/CREATE语句的情况下创建转储文件:

$ mysqldump --no-create-info <database> <table> ...
Run Code Online (Sandbox Code Playgroud)

但是如果您已经拥有转储文件(无法重新转储它们),并且您希望除了第一个文件之外的所有文件中除去DROP/CREATE语句:

$ ( cat b1.sql ; cat b2.sql b3.sql | sed -e '/^DROP TABLE/,/^-- Dumping data/d' ) > b_all.sql
Run Code Online (Sandbox Code Playgroud)