MySQL导入大数据量sql文件
MySQL导入数据的方式有多种
- 使用工具导入sql文件 : 导入文件不大的时候使用方便
- 终端使用命令导入 :导入文件很大的时候使用
- 数据库内使用source导入 : 导入文件很大的时候使用
ps: 第二和第三种方法没有进行比较,这里主要介绍第二种方法
临时修改参数
innodb_flush_log_at_trx_commit 这个参数默认是 1 ,可设置为0、1、2
- innodb_flush_log_at_trx_commit 设置为 0,log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行.该模式下,在事务提交的时候,不会主动触发写入磁盘的操作。
- innodb_flush_log_at_trx_commit设置为 1,每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去。
- innodb_flush_log_at_trx_commit设置为 2,每次事务提交时MySQL都会把log buffer的数据写入log file.但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。
sync_binlog sync_binlog默认值为1,可设置为[0,N)
- 当 sync_binlog =0,像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。
- 当 sync_binlog =N (N>0) ,MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。
# 1.进入MySQL命令行,临时修改这两个参数
mysql -uroot -p
# 2.修改参数
set global innodb_flush_log_at_trx_commit = 2;
set global sync_binlog = 2000;
# 3.退出命令行
exit
# 4.导入数据库文件
mysql -uroot -ppassword testdb < testdb.sql
# 5.导入成功之后,再把参数修改回去
set global innodb_flush_log_at_trx_commit = 1;
set global sync_binlog = 1;