lower_case_table_names 设置为0时,表名因为大小写不同而找不到。

简介: binlog恢复时,agent日志里面有下面的提示

binlog恢复时,agent日志里面有下面的提示:


Start to execute mysqlbinlog cmd: "/usr/bin/mysqlbinlog" "--stop-datetime=2020-06-12 10:00:01" "--exclude-gtids=9880af88-c491-11e8-b030-3ce8246a5f07:1-325771407,fd4bdcd9-87a8-11e9-9d4e-3ce8246a5ecf:1-2805639000" -
Restoring /data/log/4018/dblogs/bin/binlog.397357
ERROR 1146 (42S02) at line 189666: Table 'SysDB.StatusTable' doesn't exist


说这个表不存在,经查,这个表明明是存在的!

困惑呀!想了好久,怀疑是参数lower_case_table_names 的问题,检查了一下,发现这个参数设置成了0。

与大小写区分相关的参数是low_case_table_names,在UNIX中默认是0,在WINDOWS中默认是1,在macOS中默认是2,该参数只有在启动时设置才生效。对应三个值的含义:

1.low_case_table_names=0

库名和表名按照创建语句中的大小写原样存储,命名比较区分大小写。如果在不区分大小写的平台中强制设置low_case_table_names=0,当以不同大小写去使用MyISAM表时,可能会造成索引损坏;

2.low_case_table_names=1

库名和表名按照小写存放,命名比较不区分大小写;

3.low_case_table_names=2

库名和表名按照创建语句中的大小写原样存储,但在查找的时候,MySQL会将它们转换成小写,命名比较不区分大小写。

对于Innodb,应该在所有平台都设置low_case_table_names=1。

根据参数的定义,想当然的将这个参数改成了2,重新启动,发现没有生效,error log中提示这个参数被自动设置为0了。


[Warning] lower_case_table_names was set to 2,even though your the file system ‘/home/test/var/lib/data1/’ is casesensitive. Now settinglower_case_table_names to 0 to avoid future problems.

查看官方文档,里面有“On Linux, a value of 2 is not supported; the server forces the value to 0 instead.”

改成1,行了!

相关文章
|
数据库
Unknown column ‘字段名‘ in ‘field list‘解决方法
Unknown column ‘字段名’ in 'field list’英语翻译过来就是未知列的字段名在字段表中,也就是说数据库表中的字段名在实体类中找不到。 解决方案如下: 查看实体类的属性名和数据库表中的名字是否一致(注意数据库表字段中是否有空格或者下划线)
3578 0
|
5月前
|
存储 关系型数据库 MySQL
lower_case_table_names 修改为何不生效
lower_case_table_names 是 MySQL 和 MariaDB 中的一个系统变量,它决定了数据库和表名在存储和引用时的大小写敏感性。这个变量有以下几个可能的值: 0:表名存储为给定的大小写,并区分大小写。这是大多数 Unix 系统的默认设置。 1:表名在存储和引用时都转换为小写,不区分大小写。这是 Windows 和 macOS 的默认设置。 2:表名存储为给定的大小写,但引用时不区分大小写。 如果你尝试修改 lower_case_table_names 的值但发现它不生效,可能是由以下几个原因造成的: 配置文件位置不正确:确保你在正确的配置文件中进行了修改。对于 MyS
977 2
Zp
|
SQL
在写左关联时SQL语句出现 Duplicate column name 'NAME'名字重复错误解决方法
在写左关联时SQL语句出现 Duplicate column name 'NAME'名字重复错误解决方法
Zp
465 0
|
关系型数据库 MySQL 索引
mysql更新varchar类型字段长度报错:ERROR 1074 (42000): Column length too big for column ‘value‘ (max = 21845);
mysql更新varchar类型字段长度报错:ERROR 1074 (42000): Column length too big for column ‘value‘ (max = 21845);
|
SQL Oracle 关系型数据库
FAQ系列 | lower_case_table_names迷思
FAQ系列 | lower_case_table_names迷思
|
SQL 关系型数据库 MySQL
【MySQL】根据相同值,拼接指定字段值,还可添加前缀后缀(GROUP_CONCAT()、CONCAT()、GROUP BY 联用)
【MySQL】根据相同值,拼接指定字段值,还可添加前缀后缀(GROUP_CONCAT()、CONCAT()、GROUP BY 联用)
468 0
【MySQL】根据相同值,拼接指定字段值,还可添加前缀后缀(GROUP_CONCAT()、CONCAT()、GROUP BY 联用)
|
存储 关系型数据库 MySQL
【MySQL】lower_case_table_names参数详解
简介: lower_case_table_names 是mysql设置大小写是否敏感的一个参数。
1008 0