MySQLDump每个数据行一个INSERT语句

用以下语句:

mysqldump --complete-insert --lock-all-tables --no-create-db
--no-create-info --extended-insert --password=XXX -u XXX
--dump-date yyy > yyy_dataOnly.sql

我得到如下INSERT语句:

INSERT INTO `table` VALUES (1,'something'),(2,'anything'),(3,'everything');

在我的案例中,我需要的是这样的东西:

INSERT INTO `table` VALUES (1,'something');
INSERT INTO `table` VALUES (2,'anything');
INSERT INTO `table` VALUES (3,'everything');
是否有一种方法告诉“mysqldump”为每一行创建一个新的INSERT语句? 谢谢你的帮助!< / p >
141010 次浏览

使用:< a href = " https://stackoverflow.com/a/1293575/13627 " > < / >

mysqldump --extended-insert=FALSE

注意,多个插入比一个大插入慢。

在新版本中,对标志进行了更改: 来自文档:

——extended-insert - e

使用包含多个VALUES列表的多行语法编写INSERT语句。这将导致转储文件更小,并在重新加载文件时加快插入速度。

——选择

这个选项默认启用,是——add-drop-table——add-locks——create-options——disable-keys——extended-insert——lock-tables——quick——set-charset组合的简写。它提供了一个快速转储操作,并生成一个转储文件,可以快速地重新加载到MySQL服务器中。

因为——opt选项在默认情况下是启用的,所以您只指定它的相反——skip-opt来关闭几个默认设置。有关选择性地启用或禁用受——opt影响的选项子集的信息,请参阅mysqldump选项组的讨论。

——skip-extended-insert

关闭扩展插入

对于MariaDB,您将使用

mysqldump -u root -p'secret' --skip-extended-insert dbnamehere > y.sql

MaraiDB mysqldump 文档

对于那些不想--skip-extended-insert
的人

.性能下降

这可能是工作
//没有找到正式的解决方案,只需使用sed格式化

使用sed


mysqldump ... | sed 's/),(/),\n  (/g'

//在第一个项目之前没有换行符。


mysqldump ... | sed -e 's/),(/),\n  (/g' -e 's/VALUES (/VALUES\n  (/g'

//在第一个项目前添加换行符。

输出

0. 原:

INSERT INTO `role_permission` VALUES (1328,106,1),(1329,171,1),(1330,144,1),(1331,147,1),(1333,157,1),(1334,88,1);

1. 成为:

INSERT INTO `role_permission` VALUES (1328,106,1),
(1329,171,1),
(1330,144,1),
(1331,147,1),
(1333,157,1),
(1334,88,1);
INSERT INTO `role_permission` VALUES
(1328,106,1),
(1329,171,1),
(1330,144,1),
(1331,147,1),
(1333,157,1),
(1334,88,1);


http://blog.lavoie.sl/2014/06/split-mysqldump-extended-inserts.html

< a href = " https://stackoverflow.com/q/15750535回答- 19961480 " > https://stackoverflow.com/q/15750535回答- 19961480 解决方案来自这里,我没有完全测试