从navicat中导入sql文件过大解决

2019-4-4 dingshangchao 数据库


通过navicat向本地mysql数据库中导入sql文件。

第一个sql文件(多个表)大小为967M,导入成功;

第二个sql(单个表)大小为50.1M,导入失败。

1.navicat中按F6进入mysql的命令界面

输入命令: mysql>show VARIABLES like '%max_allowed_packet%';

显示:

+--------------------------+------------+
| Variable_name            | Value      |
+--------------------------+------------+
| max_allowed_packet       | 4194304    |
| slave_max_allowed_packet | 1073741824 |
+--------------------------+------------+
2 rows in set

1)显示:最大允许包(max_allowed_packet)等于4M最大允许包(slave_max_allowed_packet)等于1G

2)至此,发现:第一个sql967M,此sql文件包含若干个表。大小在主从之间,导入成功。但是第二个sql50.1M,此sql只包含一个表,导入失败,提示:Got a packet bigger than 'max_allowed_packet' bytes

3)猜想:

这个max_allowed_packet所指的packet限制的是应该单个表而不是整个sql文件的大小,因为导入sql时是一张一张表得连续insert,所以限制的是一张表的大小,显然第二个sql文件是单个表大于4M

另外,不是还有个slave_max_allowed_packet,它的大小1G是大于两个sql文件的,为什么第二个sql还是失败了,这个应该是限制sql文件大小的,而第一次导入的sql中的都是若干个小表,第二次导入的sql是一张大的日志表。

 

2.现在,把max_allowed_packet设置大于50.1M试试,我设置为160M,输入命令

mysql>set global max_allowed_packet = 1024*1024*160;

Query OK, 0 rows affected;

再次导入这个50.1Msql,成功!没报错!

证明猜是对的,max_allowed_packet就是来限制单个表的大小,而不是sql文件大小。

max_allowed_packet 针对的是一个事务中的一行记录大小,当一行记录超过了限制的大小,将会报错。sql文件中每次insert完进同一张表的所有数据被称为一个数据包(packetmax_allowed_packet就是来限制这个的大小的阈值,大于这个值,mysqlI/O连接会关闭,就会报这个错。

网站备案号:京ICP备11043289号-1 北京市公安局网络备案 海1101084571
版权所有 北京育灵童科技发展有限公司 Copyright © 2002-2024 www.elight.cn, All Rights Reserved