为了响应政府的数据请求,我的公司收到了一个 20+ GB 的 .sql 文件。我没有太多选择来获取不同格式的数据,因此我需要选择如何在合理的时间内导入数据。我使用 Navicat 的批处理执行工具在高端服务器(Win 2008 64 位,MySQL 5.1)上运行它。它已经运行了 14 个小时,并且没有任何即将完成的迹象。
有谁知道此类交易有更高速度的选择吗?或者考虑到文件很大,这是我应该期待的吗?
Thanks
我猜你的意思是这是一个由mysqldump
作为数据库的备份,因此它包含主要内容CREATE TABLE
and INSERT
声明。
(但严格来说,SQL 脚本可以包含任何内容,例如长时间运行的存储过程的定义和执行、导致死锁的查询等。我假设这是not案子。)
鉴于您有备份文件并且无法更改文件类型,您可以执行以下操作来加快恢复速度:
禁用外键检查:SET FOREIGN_KEY_CHECKS=0 http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_foreign_key_checks(记得重新启用
然后)。也禁用唯一检查:SET UNIQUE_CHECKS=0 http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_unique_checks
-
确保您的key_buffer_size http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_key_buffer_size如果使用 MyISAM 表,则设置得尽可能大。默认为 8MB,最大为 4GB。我想尝试 1GB。
这些第一条建议来自 Baron Schwartz 的帖子:http://lists.mysql.com/mysql/206866 http://lists.mysql.com/mysql/206866
确保您的innodb_buffer_pool_size http://dev.mysql.com/doc/refman/5.1/en/innodb-parameters.html#sysvar_innodb_buffer_pool_size如果使用 InnoDB 表,则设置得尽可能大。默认为 8MB,最大为 4GB。我想尝试 1GB。
Set innodb_flush_log_at_trx_commit = 2 http://dev.mysql.com/doc/refman/5.1/en/innodb-parameters.html#sysvar_innodb_flush_log_at_trx_commit如果您使用 InnoDB 表,则在恢复期间。
-
@Mark B 在下面添加了一个很好的建议禁用按键 http://dev.mysql.com/doc/refman/5.1/en/alter-table.html在恢复期间。您可以这样做:
ALTER TABLE <table-name> DISABLE KEYS;
...run your restore...
ALTER TABLE <table-name> ENABLE KEYS;
但该命令一次仅影响一张表。您必须为每个表发出单独的命令。也就是说,通常情况下,一个表比其他表大得多,因此您可能需要仅禁用该大表的键。
另外,如果包含恢复的 SQL 脚本删除并重新创建表,这将避免禁用键。您必须找到某种方法来插入命令以在创建表之后和插入行之前禁用键。您可能需要发挥创意sed
在将 SQL 脚本提供给 mysql 客户端之前对其进行预处理。
使用 Percona Server 版本的 mysqldump,以及--innodb-优化键 http://www.percona.com/doc/percona-server/5.5/management/innodb_expanded_fast_index_creation.html option.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)