Jon*_*gan 3 mysql high-speed-computing database-restore navicat large-files
我的公司提交了一个20多GB的.sql文件,以响应来自gov't的数据请求.我没有很多选项来获取不同格式的数据,因此我需要选择如何在合理的时间内导入数据.我使用Navicat的批量执行工具在高端服务器(Win 2008 64bit,MySQL 5.1)上运行它.它已经运行了14个小时,并没有显示接近完成的迹象.
有没有人知道这种交易的更高速度选项?或者这是我应该期望的大文件大小?
谢谢
我猜你的意思是它是一个由mysqldump数据库备份产生的文件,所以它主要包含CREATE TABLE和INSERT语句.
(但严格地说,SQL脚本可以包含任何内容,例如长时间运行的存储过程的定义和执行,导致死锁的查询等.我会假设情况并非如此.)
以下是您可以采取的一些措施来加速恢复,因为您拥有备份文件并且无法更改文件类型:
禁用外键检查:( SET FOREIGN_KEY_CHECKS=0记得以后重新启用).也禁用唯一检查:SET UNIQUE_CHECKS=0
key_buffer_size如果使用MyISAM表,请确保将其设置为尽可能大.默认值为8MB,最大值为4GB.我试试1GB.
这些第一个提示来自Baron Schwartz的一篇文章:http: //lists.mysql.com/mysql/206866
innodb_buffer_pool_size如果使用InnoDB表,请确保将其设置得尽可能大.默认值为8MB,最大值为4GB.我试试1GB.
innodb_flush_log_at_trx_commit = 2如果使用InnoDB表,则在还原期间设置.
@Mark B在下面添加了一个很好的建议,以便在恢复期间禁用密钥.这是你如何做到的:
ALTER TABLE <table-name> DISABLE KEYS;
...run your restore...
ALTER TABLE <table-name> ENABLE KEYS;
Run Code Online (Sandbox Code Playgroud)
但是该命令一次只影响一个表.您必须为每个表发出单独的命令.也就是说,通常情况下,一个表比其他表大得多,因此您可能需要仅为该一个大表禁用密钥.
此外,如果包含还原的SQL脚本删除并重新创建表,则会绕过禁用键.在创建表之后和插入行之前,您必须找到一些方法来插入禁用键的命令.sed在将SQL脚本提供给mysql客户端之前,您可能需要具有创造性来预处理SQL脚本.
使用带有--innodb-optimize-keys选项的Percona Server版本的mysqldump .