背景
工作中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_commit | 0: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的规格调整。希望对大家有所帮助。