【问题标题】:Import of 8GB mysql dump takes a long time导入 8GB mysql dump 需要很长时间
【发布时间】:2011-05-23 07:05:10
【问题描述】:

我有一个使用 mysqldump 创建的 InnoDB 表的 8GB MYSQL 数据库转储。我使用以下方式导入数据:

mysql -uroot -p my_db < dump.sql

一个 5 GB 的数据库转储在一小时内导入。 8 GB 转储需要 50 小时并且还在不断增加。当我用

检查进程列表时

显示进程列表;

大多数时候只有一个 INSERT 查询可见,状态为“'freeing items”

除了复制原始文件之外,还有其他方法可以加快导入过程吗?

【问题讨论】:

    标签: mysql import mysqldump


    【解决方案1】:

    真正的诀窍是确保最大的单个表适合 innodb 缓冲池。如果没有,那么插入(当然还有导入)会非常慢。

    不要紧整个数据库的大小,但要最大的单表。

    对于大得多的数据库,您可能需要考虑传输数据库的替代方法,例如文件系统快照。如果您的机器运行相同版本的数据库、操作系统和架构,这当然效果最好。

    【解决方案2】:

    机器有多少内存?我的第一个猜测是机器有 6gb 或 8gb 的内存,mysql 能够将第一个转储完全保存在内存中,但在第二次导入时以某种方式交换了硬核。您能否在导入时运行vmstat 5 进行几次迭代,看看系统交换的频率有多大?

    【讨论】:

    • 它有 8GB。一旦可用的内存变得紧张,我将重新运行导入并报告 vmstat 数字。
    • 唯一想到的另一件事是禁用转储上的索引,然后在数据进入表后添加它们。来自 mysqldump 文档:dev.mysql.com/doc/refman/5.1/en/mysqldump.html --disable-keys, -K 对于每个表,用 /*!40000 ALTER TABLE tbl_name DISABLE KEYS / 包围 INSERT 语句;和 /!40000 ALTER TABLE tbl_name ENABLE KEYS */;陈述。这使得加载转储文件更快,因为索引是在插入所有行之后创建的。此选项仅对 MyISAM 表的非唯一索引有效。
    • @opsguy DISABLE KEYS 是 MyISAM 主义。
    • @MarkR 我知道,它是 InnoDB 的事实是在我的禁用键评论之后添加的 :-)
    • @opsguy 我重新运行了一次,但没有注意到 vmstat 正在进行任何交换。 mysqld 似乎并没有消耗大量的内存。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多