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;