蓝忧无泪 发表于 2014-5-29 22:15:26

mysql导入大容量SQL文件与及source 命令



mysql在通过导入sql文件可能会出现下面二个问题:

1.如果sql文件过大,会出现"MySQL server has gone away"问题;

2.如果sql文件数据有中文,会出现乱码

解决问题:

问题1:出现MySQL server has gone away"问题,是因为mysql默认的"max_allowed_packet"变量值过小.
查看目前配置

show VARIABLES like '%max_allowed_packet%';

显示的结果为:

+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+

说明目前的配置是:1048576/1024/1024 = 1M

修改max_allowed_packet值:

方法1: SET GLOBAL max_allowed_packet = 500*1024*1024;(经测试无效)

方法2: 直接修改配置文件,重启mysql
             windows中修改my.ini文件,在linux中修改my.cnf文件.
             C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.5\my.ini(安装mysql时的,指定的数据文件目录)

            


            重启mysql后,在查看修改后的max_allowed_packet值

            


问题2:登录时指定字符集编码
            mysql -uroot -P3308 -p123456- -default-character-set=utf8(-P是指指定端口号)
            
         
最后通过source命令 即可成功导入:
            sourceE:ydj\test.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
======================================




页: [1]
查看完整版本: mysql导入大容量SQL文件与及source 命令