MySQL如何快速导入数据如何快速导入数据
前言:前言:
日常学习和工作中,经常会遇到导数据的需求。比如数据迁移、数据恢复、新建从库等,这些操作可能都会涉及大量数据的导入。有时候导入进度慢,电
脑风扇狂转真的很让人崩溃,其实有些小技巧是可以让导入更快速的,本篇文章笔者会谈一谈如何快速的导入数据。
注:本篇文章只讨论如何快速导入由逻辑备份产生的SQL脚本,其他文件形式暂不讨论。
1.尽量减小导入文件大小尽量减小导入文件大小
首先给个建议,导出导入数据尽量使用MySQL自带的命令行工具,不要使用Navicat、workbench等图形化工具。特别是大数据量的时候,用MySQL自带
的命令行工具导出和导入比用Navicat等图形化工具要快数倍,而且用Navicat等图形化工具做大数据量的操作时很容易卡死。下面简单介绍下怎么用
MySQL自带的命令行工具做导入导出。
# 导出整个实例
mysqldump -uroot -pxxxxxx --all-databases > all_database.sql
# 导出指定库
mysqldump -uroot -pxxxxxx --databases testdb > testdb.sql
# 导出指定表
mysqldump -uroot -pxxxxxx testdb test_tb > test_tb.sql
# 导入指定SQL文件 (指定导入testdb库中)
mysql -uroot -pxxxxxx testdb < testdb.sql
导入的SQL脚本内容大多是先建库建表,然后插入数据,其中耗时最长的应该是insert插入数据了。为了减小文件大小,推荐使用扩展插入方法,即多行
一起批量insert,类似这样:insert into table_name values (),(),(),…,(); 。使用扩展插入比一条条插入,文件大小要小很多,插入速度要快好几倍。使用
mysqldump导出的文件默认是使用批量插入的方法,导出时可使用–skip-extended-insert 参数改为逐条插入。下面以一张一千万的数据表为例,测试下不
同方式导出的文件插入时的速度。
上图可以看出,使用扩展插入的SQL脚本导入大概需要10分钟左右,而一条条插入的SQL脚本导入时间过长,大概1个小时仍然没有导完,一个2个多G的
文本导入一个多小时仍未结束,等不及的笔者就手动取消了? 不过还是可以看出多条一起insert比一条条插入数据要节省数倍的时间。
2.尝试修改参数加快导入速度尝试修改参数加快导入速度
在MySQL中,有一对大名鼎鼎的“双一”参数,即 innodb_flush_log_at_trx_commit 与 sync_binlog 。为了安全性这两个参数默认值为1,为了快速导入脚
本,我们可以临时修改下这两个参数,下面简单介绍下这两个参数:
评论5