导入dump.sql
最常用的方法就是:
mysql -uroot database_name < dump.sql
但是如果dump.sql
文件比较大的话,导入过程将会很漫长,下面是通过调整/etc/my.cnf
的相关参数,来加快导入速度。
1. log-bin
即是binlog
,binlog
主要有两种用途,一是数据恢复,而是数据同步,在快速导入的场景下关闭binlog
将会有效提升导入速度:
#log_bin=bin
注意:在给master
导入数据的时候注意不要将该参数设置为off
,因为master
和slave
是通过binlog
同步数据,关闭binlog
会导致数据不一致。
2. innodb_flush_log_at_trx_commit
大批量导入数据,调整innodb_flush_log_at_trx_commit
将会非常有效,该参数有三个选项:
1 -- 是默认值,每次事务提交时都会把 log-buffer 的数据写入 log file,并且 flush 中去;
2 -- 每次事务提交时都会把 log-buffer 的数据写入 log file 。但是 flush 操作并不会同时进行。该模式下,MySQL 会每秒执行一次 flush 操作;
0 -- log-buffer 将每秒一次地写入 log file 中,并且 log file 的 flush 操作同时进行。该模式下,在事务提交的时候,不会主动触发写入磁盘的操作。
在应用中该参数到底设置多少取决于应用系统对数据安全和效率的重视程度,但是在快速导入dump.sql
到数据库这样的应用场景下,建议设置为0:
innodb_flush_log_at_trx_commit=0
3. innodb_log_buffer_size
这个参数是innodb
存储引擎的事务日志所使用的缓冲区大小,配合innodb_flush_log_at_trx_commit=0
使用,在导入数据的时候可以将该参数相应调大一点:
innodb_log_buffer_size=128M
4. innodb_log_file_size
这个参数是innodb
日志文件大小,增大该文件大小可以有效减少IO
。
innodb_log_file_size=1G
注意:如果导入目标数据库不是新装数据库,修改这个值有可能会导致数据库启动不起来。
5. innodb_write_io_threads
该参数是服务.ibd
文件的后台IO
的线程数,默认是4,在当前情况下可以适当调大一点:
innodb_write_io_threads=16
注意:不要超过服务器CPU
核心的数量。
6. innodb_doublewrite
该参数默认值是1,一般slave
会通过设置成0来提升数据库性能,在master
中非常不建议设置为0,但是在当前场景下可以暂时将该参数设置为0:
innodb_doublewrite=0
7. 总结:
为了快速导入数据,/etc/my.cnf
参数调整为:
#log_bin=bin
innodb_flush_log_at_trx_commit=0
innodb_log_buffer_size=128M
innodb_log_file_size=1G
innodb_write_io_threads=16
innodb_doublewrite=0
!!!注意:上述参数调整只是为了快速导入数据,导入完成后,需要将以上参数调整到之前的值,以保证数据安全。
ref:
http://dba.stackexchange.com/questions/83125/mysql-any-way-to-import-a-huge-32-gb-sql-dump-faster
http://blog.itpub.net/124805/viewspace-1050519/
http://blog.itpub.net/22664653/viewspace-1063134/
http://www.cnblogs.com/whiteyun/archive/2011/12/01/2270132.html
http://blog.csdn.net/summerhust/article/details/7589049
http://database.chinaunix.net/a2011/1123/1278/000001278369_1.shtml