mysql错误记录

1、参数含义:
lower_case_table_names: 此参数不可以动态修改,必须重启数据库
lower_case_table_names = 1  表名存储在磁盘是小写的,但是比较的时候是不区分大小写
lower_case_table_names=0  表名存储为给定的大小和比较是区分大小写的 
lower_case_table_names=2, 表名存储为给定的大小写但是比较的时候是小写的

2、MySQL Row size too large (> 8126) 以及ROW_FORMAT=COMPRESSED requires innodb_file_format > Antel 的解决办法

innodb_strict_mode=0

从MySQL5.5.X版本开始,你可以开启InnoDB严格检查模式,尤其采用了页数据压缩功能后,最好是开启该功能。开启此功能后,当创建表(CREATE TABLE)、更改表(ALTER TABLE)和创建索引(CREATE INDEX)语句时,如果写法有错误,不会有警告信息,而是直接抛出错误,这样就可直接将问题扼杀在摇篮里。

开启InnoDB严格检查模式涉及的参数是innodb_strict_mode,支持动态开启,开启方式如下:
set global innodb_strict_mode=1

3、MySQL -P参数不起作用

一般情况下,很少在命令行使用-P参数指定端口登录MySQL,由于测试需要,指定了一下-P参数,发现并没有起到作用,无论更换任何端口,只要数据库账号密码正确,总能登录成功。于是查询了下,原来该参数需要和-h参数结合使用

4、MySQL8.0报错:Access denied; you need (at least one of) the SYSTEM_USER privilege(s) for this operation

1227 - Access denied; you need (at least one of) the SYSTEM_USER privilege(s) for this operation
我查阅了一下官方文档,原因是由于root用户没有SYSTEM_USER权限,把权限加入后即可解决:

grant system_user on *.* to 'root';

flush privileges;

5、Truncated incorrect DOUBLE value: 'xxx'的解决方法

线上执行sql时发现一条普通的update sql语句执行报错Truncated incorrect DOUBLE value: 'xxx'
仔细检查了一下sql语法并没有问题,怀疑是字段类型的问题
执行的sql为

UPDATE info SET STATE=1 WHERE STATE<>1
果然,检查表结构后发现state字段为varchar类型,where条件后的STATE<>1将1当做int类型使用,所以报错。正确的写法应该为

UPDATE info SET STATE='1' WHERE STATE<>'1'


6、[Err] 1267 - Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICI

分析:异常是排序规则编码混乱;我mysql是8.0.12版本,本次sql操作是连表查询,应该是两个表的条件字段编码格式不同所致。

给表2设置编码: alter table table_name default character set utf8mb4 collate=utf8mb4_general_ci;

给表2字段设置编码:ALTER TABLE table_name convert to CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

https://blog.csdn.net/weixin_41720239/article/details/99721242

7、MySQl报错之@@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_MODE = ON

今天在一台MySQL数据库的SLAVE里dump出来一个databases的数据,想导入到另一台机器的数据库里,但是报错:
报错原因是原数据库里开了gtid,解决办法:需要在mysqldump语句里 指定 --set-gtid-purged=on 参数;

方法一:在目标mysql上执行如下命令

1.进入mysql 执行 reset master;

mysql> reset master;
Query OK, 0 rows affected (0.03 sec)
mysql> exit;
Bye

方法二:到导入时添加参数-f

Warning: Using a password on the command line interface can be insecure.
ERROR 1839 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_MODE = ON.

报错原因是原数据库里开了gtid,需要在mysqldump语句里指定--set-gtid-purged=on参数;

在导入的时候加入-f参数即可,例如:

mysql -uroot -pSunstar2012Hecom888ser8686 -h47.93.xx.xx -f cus_DEMO < /alidata1/backup/gl/gl/cus_DEMO_gl.sql

8、2006 - MySQL server has gone away [ERR]

报错原因

  MySQL 对 max_allowed_packect 允许最大的数据包的大小有限制,我们执行的文件超过了这个限制就会报这个错误。可以通过 select @@max_allowed_packet; 查看当前最大限制(单位为字节 B)。

 解决方案
  通过 set global max_allowed_packet = maxNum; 增加 max_allowed_packect 的大小即可;

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值