当前位置:
首页 > 技术 > mysql source命令导入超大文件

mysql source命令导入超大文件

利用mysql source命令超大文件导入方法,下面收集了两种解决办法,一种是把数据库分文件导出然后再导入,另一种是修改my.ini配置文件
mysql -u root -p --default-character-set=utf8; //先登录一下,并指定编码,防止乱码

导入1G的数据,但是在怎么都导入不了,用命令行就可以轻松搞定了。用mysql source命令可以导入比较大的文件。

?代码如下
mysql>use dbtest;
mysql>set names utf8;
mysql>source D:/www/sql/back.sql;

通过source命令导入多个文件,可以新建一个sou.sql文件,里面存放下面的命令
例如:

?代码如下
source d:/a1.sql;
source d:/a2.sql;

当你运行

这样就可以在一个source命令里面导入多个sql文件了。

但这样会有一个问题,如果有一100个这样的文件我们一个个去写命令肯定很麻烦,下面我百度搜索到一个解决办法

?代码如下
新建一个all.sql
vim all.sql
在里面写入:
source 1.sql
source 2.sql
......
source 53.sql
source 54.sql
然后只要
mysql> source all.sql

另一种大文件导入解决办法,这个是用服务器管理权限的用户了

mysql source 命令导入大的sql

在mysql的安装目录下 找到 my.ini文件 加入以下代码:

?代码如下
interactive_timeout = 120
wait_timeout = 120
max_allowed_packet = 32M

小例子
mytest_emp_dept.sql文件,内容如下:

?代码如下
CREATE TABLE emp(eid INT PRIMARY KEY AUTO_INCREMENT, ename VARCHAR(20) NOT NULL, esex VARCHAR(10), deptid INT NOT NULL);
CREATE TABLE dept(deptid INT PRIMARY KEY AUTO_INCREMENT, dname VARCHAR(20) NOT NULL,daddress VARCHAR(200));
INSERT INTO emp(ename,esex,deptid) VALUES('chris','M',1),('edge','M',1),('kelly','W',2),('maryse','W',2);
INSERT INTO dept(dname,daddress) VALUES('development','beijing'),('accounting','shanghai');
SELECT ename,esex,dname,daddress FROM emp,dept WHERE emp.deptid=dept.deptid ORDER BY ename;

 

导入sql的命令行如下:

?代码如下
source "路径名"+/mytest_emp_dept.sql

 


注:导入过程中如果出现Invalid default value,如下

Invalid default value for 'comment_date'

Table 'Testdb.comments' doesn't exist

Query OK, 0 rows affected, 1 warning

因为Mysql5.6以后timestamp设定默认值规则改变,不能为‘0000 00-00 00:00:00’

解决方法:
查看sql_mode:
mysql> show session variables like '%sql_mode%';
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| sql_mode | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

修改sql_mode,去掉NO_ZERO_IN_DATE,NO_ZERO_DATE:
mysql> set sql_mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
Query OK, 0 rows affected, 1 warning (0.00 sec)

重新执行