MySQL有多种方法导入多个.sql文件(里面是sql语句),常用的有两个命令:mysql和source。

但是这两个命令的导入效率差别很大,具体请看最后的比较。

(还有sqlimport和LOAD DATA INFILE等导入方法,不过它们主要用于导入.csv或.xml文件数据,不是.sql文件)

假设我们有一个 users.sql 大文件,为方便我们将其拆分成:user1.sql、user2.sql、user3.sql 三个独立的小sql文件。

1、mysql命令导入

mysql命令导入多个sql文件方法:

$ for SQL in *.sql; do mysql -uroot -p"123456" mydb < $SQL; done

source命令需要首先进入MySQL命令行:

$ mysql -uroot -p"123456"

source user1.sql
source user2.sql
source user3.sql

注意,这里每行一条,必须以source命令开头。

然后用source命令执行该文件:

mysql > use mydb;mysql > source /home/gary/all.sql

对于百M级以上文件,如果光这样导入,速度是极其缓慢的,

根据MySQL官方建议,我们有几个措施可以极大提高导入的速度,如下:

对于MyISAM,调整系统参数:bulk_insert_buffer_size(至少单个文件大小的2倍以上)

对于InnoDB,调整系统参数:innodb_log_buffer_size(至少单个文件大小的2倍以上,导入完成后可以改回默认的8M,注意不是innodb_buffer_pool_size。)

除主键外,删除其他索引,导入完成后重建索引。

关闭自动提交:autocommit=0。(请勿用set global autocommit=1;命令来关闭,否则整个MySQL系统都会停止自动commit,innodb log buffer很快就会爆满,5和6项也请仅在会话中有效,正确做法请往下看)

关闭唯一索引检查:unique_checks=0。(关闭了这一项会影响on duplicate key update的效果)

关闭外键检查:foreign_key_checks=0。

insert值写在一条语句内,如:INSERT INTO yourtable VALUES (1,2), (5,5), ...;

有自增列的,设置:innodb_autoinc_lock_mode的值为2,

其中,第1-2、8条在修改my.cnf文件,然后重启MySQL:

bulk_insert_buffer_size=2G;innodb_log_buffer_size=2G;innodb_autoinc_lock_mode=2;
#删除索引DROP INDEX index_name ON talbe_nameALTER TABLE table_name DROP INDEX index_nameALTER TABLE table_name DROP PRIMARY KEY# 添加索引ALTER TABLE table_name ADD INDEX index_name (column_list)ALTER TABLE table_name ADD UNIQUE (column_list)ALTER TABLE table_name ADD PRIMARY KEY (column_list)
for SQL in *.sql;do  echo $SQL;  sed -i '1i\SET autocommit=0;\nSET unique_checks=0;\nSET foreign_key_checks=0;' $SQL  sed -i '$a\COMMIT;\nSET autocommit=1;\nSET unique_checks=1;\nSET foreign_key_checks=1;' $SQLdone

4、mysql和source效率比较

在sql文件较小的情况下,source速度比mysql高,

在实际测试导入时,5个合计25M的sql文件,mysql命令的速度比source要快2秒(我自己的测试,不代表普遍的结果),

可以粗略得出,在导入大的sql文件时,建议使用mysql命令。

更多相关文章

  1. python list.sort()根据多个关键字排序的方法实现
  2. android 当系统存在多个Launcher时,如何设置开机自动进入默认的La
  3. 【android】监听网络变化连续多个广播的问题解决
  4. android sqlite 一次创建多个表
  5. android同一个程序中使用多个地图出现混乱怎么办?!
  6. Android中如何取得联系人,如何得到一个联系人下面的多个号码
  7. Android开发中高效的数据结构用SparseArray代替HashMap
  8. Android(安卓)Preference的使用总结(很全很详细)以及SharedPrefere
  9. Android(安卓)15本经典教程和150多个实例源码

随机推荐

  1. android ONVIF 组播探测在线摄像机
  2. android使用ant编译找不到apkbuilder.jar
  3. android RelativeLayout(相对布局)详细说
  4. Android加载图片导致内存溢出(Out of Memo
  5. Android国际化设置问题
  6. Ubuntu搭建Eclipse+JDK+SDK的Android
  7. vim+ctags+cscope 打造Android源码阅读工
  8. Android事件分发机制源码分析
  9. 【视频课程】Android应用开发典型案例分
  10. Delphi XE5 android openurl