MYSQL导入海量数据提速处理

背景

工作中2C/4G的ECS使用mysql导入60G的数据需要10多个小时,有没有更快的方式呢?网上查阅了一些资料,也翻了翻mysql的官方文档,答案是肯定的。

导入命令:

mysql -u[user] -p[password] < database_dump.sql &

提速关键参数设置

innodb_buffer_pool_size = 1G
innodb_log_buffer_size = 256M
innodb_log_file_size = 1G
innodb_write_io_threads = 16
innodb_flush_log_at_trx_commit = 0
max_allowed_packet=256M
wait_timeout=30000

核心参数说明

innodb_flush_log_at_trx_commit0:log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行。该模式下在事务提交的时候,不会主动触发写入磁盘的操作。
1:每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去,该模式为系统默认。
2:每次事务提交时MySQL都会把log buffer的数据写入log file,但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。
innodb_write_io_threads 写线程 默认四个,负责数据块的写入

上述参数可以根据ECS的规格调整。希望对大家有所帮助。

发表评论