Mysql怎样提高导入速度?

Mysql提高导入速度

我们在利用source导入数据到mysql时,会由于数据量大(百M级)比较大,速度及其缓慢。要怎么处理这种问题呢?

一般sql文件导入数据库命令是:

mysql>use mysql_db;

mysql>source /tmp/mysqlfile.sql

根据Mysql官方建议,有几个措施可以提高导入速度:

1.对于MyISAM,调整系统参数:bulk_insert_buffer_size(至少单个文件大小的2倍以上)

2.对于InnoDB,调整系统参数:innodb_log_buffer_size(至少单个文件大小的2倍以上,导入完成后可以改回默认的8M,注意不是innodb_buffer_pool_size。)

3.除主键外,删除其他索引,导入完成后重建索引。

4.关闭自动提交:autocommit=0。(请勿用set global autocommit=1;命令来关闭,否则整个MySQL系统都会停止自动commit,innodb log buffer很快就会爆满,5和6项也请仅在会话中有效,正确做法请往下看

5.关闭唯一索引检查:unique_checks=0。(关闭了这一项会影响onduplicate key update的效果)

6.关闭外键检查:foreign_key_checks=0。

7.insert值写在一条语句内,如:INSER TINTO yourtable VALUES(1,2),(5,5),...;

8.有自增列的,设置:innodb_autoinc_lock_mode的值为2,

其中,第1-2、8条在修改my.cnf文件,然后重启MySQL:

[mysqld]

bulk_insert_buffer_size=2G;

innodb_log_buffer_size=2G;

innodb_autoinc_lock_mode=2;

第3条用到的命令:

#删除索引

DROPINDEX index_name ON talbe_name

ALTER TABLE table_name DROP INDEX index_name

ALTER TABLE table_name DROP PRIMARY KEY

# 添加索引ALTER TABLE table_name ADD INDEX index_name (column_list)

ALTER TABLE table_name ADD UNIQUE (column_list)

ALTER TABLE table_name ADD PRIMARY KEY (column_list)

第4-6条写在.sql中,批量bash脚本如下:

for SQL in *.sql;

do

         echo $SQL;  

         sed -i '1i\SET autocommit=0;\nSET unique_checks=0;\nSET foreign_key_checks=0;' $SQL

           sed -i '$a\COMMIT;\nSET autocommit=1;\nSET unique_checks=1;\n SET foreign_key_checks=1;' $SQL

done

你可能感兴趣的:(Mysql怎样提高导入速度?)