mysql8.0 错误

mysql 8.0 倒入数据报错

        今天数据库从5.6切换到8.0测试的时候,倒入数据到8.0版本报错,错误提示:2006 mysql server has gone away。
        经过查询得知,导入SQL数据库结构+数据时,如果sql操作时间过长;或者是传送的数据太大(咧如使用insert…values的语句过长);就会报这个错误。登录服务器查看了数据库连接超时的时间默认是8小时,问题应该不是出现在这里。登录老版本数据查看该数据库表的数据,发现该表存放是json的数据格式数据,而且很大,很长。根据这点消息,可以简单的知道问题

        这种情况可以通过修改max_allowed_packed的配置参数来避免,修改my.cnf加大max_allowed_packet的值即可。

  • 解决办法
            找到mysql目录下的my.ini配置文件,加入以下配置或者修改以下配置
    1
    max_allowed_packet=300M

参数详解

  • max_allowed_packet: mysql根据配置文件会限制server接受的数据包大小。如果一次插入数据库中的数据太大的话就会失败,官方介绍
            这里我刚开始修改的是200M,还是出现这个错误,然后我看了一下sql文件大小是在260多M,索性我就把这个参数调整为300M,在执行倒入数据ok。这个参数调大不会影响服务器的性能,可以参考官方说明。

mysql 1067 - Invalid default value for

        mysql 8.0 在倒入数据的时候提示: 1067 - Invalid default value for ‘xxx_date’。查询结果得知跨版本升级引起的默认值不兼容问题,登录老服务器查看该字段是一个时间字段,是一个datetime类型,而且默认是0,然后看了一下导出的数据数据格式居然是0000-00-00,该类型可能是默认值被限制了,查看 sql_mode。

查看 sql_mode
1
2
3
4
5
6
7
mysql> show 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_ENGINE_SUBSTITUTION |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.02 sec)

        NO_ZERO_IN_DATE,NO_ZERO_DATE这两个参数限制时间不能为0

临时修改
1
2
mysql> set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
Query OK, 0 rows affected, 1 warning (0.00 sec)

这个我操作了,没成功,我用的永久修改成功导入的。不知道为啥,可能是姿势不对

永久修改

        可以直接修改my.cnf文件,在[mysqld]下面添加如下列:

1
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
坚持原创技术分享,您的支持将鼓励我继续创作!
0%