【问题标题】:MySQLDump one INSERT statement for each data rowMySQL为每个数据行转储一条 INSERT 语句
【发布时间】:2012-09-08 11:51:48
【问题描述】:

使用以下语句:

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 语句? 感谢您的帮助!

【问题讨论】:

    标签: mysqldump


    【解决方案1】:

    Use:

    mysqldump --extended-insert=FALSE 
    

    请注意,多次插入会比一次大插入慢。

    【讨论】:

    • --skip-extended-insert 对我来说似乎是正确的语法(使用 mysqldump 版本 10.13)
    • 慢一点,是的,但是很多文本编辑器在处理非常长的文本行时遇到问题,如果表格有大量数据,就会发生这种情况。
    • mysqldump --opt --skip-extended-insertmysqldump --opt --extended-insert=FALSE 工作
    • 天啊!我迁移到了一个新版本,这导致了这个问题,并且我的许多自动化脚本都失败了。我以为我搞砸了,但这似乎很容易解决。感谢分享!
    • 这很好,因为现在我可以在两个不同的数据库转储上执行 git diff 并清楚地了解更改的内容。
    【解决方案2】:

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

    --扩展插入,-e

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

    --选择

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

    因为--opt选项默认是开启的,所以你只需要指定它的反面,--skip-opt就可以关闭几个默认设置。有关选择性启用或禁用受 --opt 影响的选项子集的信息,请参阅 mysqldump 选项组的讨论。

    --跳过扩展插入

    关闭扩展插入

    【讨论】:

      【解决方案3】:

      对于 MariaDB,您将使用

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

      MaraiDB mysqldump Docs

      【讨论】:

        猜你喜欢
        • 2015-04-03
        • 2013-02-14
        • 1970-01-01
        • 2019-02-14
        • 1970-01-01
        • 2019-07-22
        • 2011-12-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多