mysql - 请问有innodb 引擎的表导入900w 的数据,用了快9个小时。有什么快速的方法吗。正常是多少小时一般。
PHP中文网
PHP中文网 2017-04-17 15:35:07
0
3
529

1.导入备份的数据到表中,表是innodb引擎,900w多条,导入时用了将近9小时
2.下面是sh脚本代码片段

`$MYSQL -u$dbUser -h$dbHost -p$dbPassword --default-character-set=utf8 $dbName < $mysqlImportFile`

3.问题:
1)时间是否正常导了这么长时间
2)有没有更快速的方法
3)网上找的方法是先关闭事务

 SET autocommit=0;
 在脚本里应该如何写呢?    
PHP中文网
PHP中文网

认证高级PHP讲师

全部回覆(3)
洪涛

1、索引可以先去掉,導完了再加上。
2、把binlog關了。 (減少寫磁碟)
3、buffer_pool能調多大調多大。 (減少寫磁碟)
4、redo_log大小能多大多大(減少checkpoint)
5、flush neighbors開啟(增加順序寫磁碟)
6、flush_at_trx_commit=0(減少寫入磁碟)
7 、5.7可以直接像拷貝myisam表一樣拷貝ibd,不知道會不會快(沒過做比較)

刘奇

修改/etc/my.cnf配置
新增autocommit=0;
註解掉log-bin=mysql-bin(暫時不沒有主從設定需求)
匯入速度果然快了很多

注意導入後刪除掉autocommit=0;不然修改表的操作會不能執行,必須手動提交才可以。

洪涛

開啟事務批次導入,速度是很快的,我在Ubuntu(i5-3230M)上PHP平​​均每秒能插入超過5000條記錄到5.6,也就是導入900萬數據估計只需9000000/5000/60 = 30分鐘.
需要注意的是,MySQL InnoDB裡,每個寫入操作比如INSERT/UPDATE/DELETE等都會被當做一個事務自動提交.
所以需要先SET AUTOCOMMIT=0禁掉自動提交後再START TRANSACTION開啟事務,最後手動COMMIT提交.

另外,減少寫入日誌操作也能加快寫入效能:
停用log-bin 二進位日誌.
停用general_log 稽核日誌.
innodb_flush_log_at_trx_commit 設為0,禁止每次提交交易都寫入日誌.
加大innodb_buffer_pool_size.

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板