【问题标题】:Speeding up mysql dumps and imports [closed]加快mysql转储和导入[关闭]
【发布时间】:2010-09-09 04:31:45
【问题描述】:

是否有任何记录在案的技术可以加快 mySQL 转储和导入?

这将包括 my.cnf 设置、使用 ramdisk 等。

只寻找记录在案的技术,最好有显示潜在加速的基准。

【问题讨论】:

    标签: mysql backup restore


    【解决方案1】:

    在转储中使用扩展插入应该可以加快导入速度。

    【讨论】:

    • 如果你这样做,如果转储相当大,你很有可能无法导入回来
    • 为什么 MySQL 客户端无法处理带有扩展插入的中等大小的转储?
    • 我的猜测是客户端对于它正在读取的每一行都有一个固定大小的缓冲区,并且扩展插入超出了该限制。
    • fwiw 我已经使用扩展插入导入了一个 10GB 的转储,它完美无缺。
    【解决方案2】:
    1. 获取一份高性能 MySQL。很棒的书。
    2. 转储中的扩展插入
    3. 使用 --tab 格式转储,以便您可以使用 mysqlimport,即 比 mysql 快
    4. 使用多个线程导入,每个表一个。
    5. 尽可能使用不同的数据库引擎。导入到 像 innodb 这样的大量事务引擎非常慢。插入 进入非事务性引擎,如 MyISAM 的速度要快得多。
    6. 查看 Maakit 工具包中的表格比较脚本,看看是否可以 更新您的表,而不是转储它们并导入它们。但 您可能在谈论备份/恢复。

    【讨论】:

      【解决方案3】:

      关闭外键检查并打开自动提交。

      【讨论】:

        【解决方案4】:

        如果您要导入 InnoDB,您可以做的最有效的事情就是放入

        innodb_flush_log_at_trx_commit = 2
        

        在您的 my.cnf 中,暂时在导入运行时。如果需要 ACID,可以回1

        【讨论】:

        • 我想知道,将它设置为0 会不会更快?
        • 真的不明白这是做什么的,但它加快了我的大型 innoDB 数据库转储的恢复速度。对于 MyISAM dbs 增加 key_buffer_size 有帮助(达到可用内存的 30%)。
        • 只是好奇,SET autocommit=0 是否会使这变得不必要?
        【解决方案5】:

        http://www.maatkit.org/ 有一个 mk-parallel-dump 和 mk-parallel-restore

        如果您一直希望使用多线程 mysqldump,请不要再希望了。该工具并行转储 MySQL 表。它是一个更智能的 mysqldump,既可以作为 mysqldump 的包装器(具有合理的默认行为),也可以作为 SELECT INTO OUTFILE 的包装器。它专为处理非常大数据量的高性能应用程序而设计,在这些应用程序中,速度非常重要。它利用多个 CPU 和磁盘来更快地转储数据。

        在 mysqldump 中还有各种潜在的选项,例如在导入转储时不创建索引 - 而是在完成时整体进行。

        【讨论】:

        【解决方案6】:

        我猜你的问题也取决于瓶颈在哪里:

        • 如果您的网络是瓶颈,您还可以查看-C/--compress 标志到mysqldump
        • 如果您的计算机内存不足(即开始交换),您应该购买更多内存。

        另外,查看mysqldump--quick 标志(如果您使用的是MyIsam,则查看--disable-keys)。

        【讨论】:

        • Reference--disable-keys '仅对 MyISAM 表的非唯一索引有效'。
        • kapep - 感谢您的更正。我已经更新了答案。
        【解决方案7】:

        如果您只有 MyIsam 表,mysqlhotcopy 也可能是您的替代方案。

        【讨论】:

          【解决方案8】:

          使用索引但不要太多,激活查询缓存,使用狮身人面像用于大数据库,这里有一些很好的提示http://www.keedeo.com/media/1857/26-astuces-pour-accelerer-vos-requetes-mysql(法语)

          【讨论】:

          • 您不应该只提供指向另一个站点的链接作为答案,因为该站点将来可能会过时。相反,请单击此答案上的“编辑”链接,并在此处包含该页面中解决方案的基本部分。见:meta.stackexchange.com/q/8259
          【解决方案9】:

          另一种选择是 http://www.mydumper.org - 多线程 mysql 备份/恢复,比 mysqldump 快 3 到 10 倍,并且可以处理 MyISAM 和 InnoDB 以及 Drizzle http://vbtechsupport.com/1695/

          【讨论】:

          猜你喜欢
          • 2017-09-27
          • 2023-01-18
          • 1970-01-01
          • 2018-05-22
          • 1970-01-01
          • 2011-06-10
          • 2018-08-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多