千家信息网

MySQL查询报错:ERROR 1146 (42S02): Table 'craw.sitePageConfig' doesn't exist

发表于:2024-11-29 作者:千家信息网编辑
千家信息网最后更新 2024年11月29日,今天一同事咨询mysql的问题,在mysql主库访问某个表报错, 但是备库上可以,感觉有点奇怪。即使不同步,也不能说主库不能访问啊。既然是主备,就从主备同步开始查。各种show master stat
千家信息网最后更新 2024年11月29日MySQL查询报错:ERROR 1146 (42S02): Table 'craw.sitePageConfig' doesn't exist今天一同事咨询mysql的问题,在mysql主库访问某个表报错, 但是备库上可以,感觉有点奇怪。即使不同步,
也不能说主库不能访问啊。

既然是主备,就从主备同步开始查。各种show master status\G, show binary logs , 在备库上show slave status\G,
在备库上看到:
Salve_IO_Runing : NO
Salve_SQL_Runing : YES
显然已经不同步了,看到Relay_Master_Log_File是 mysql-bin.000064, 但是在主库上show binary logs查看的是:67,68,69,
已没有了 64,65,66 。

在备库上也看到了Last_IO_Error的报错很明显,1236严重错误,Could not find first log file name in binary log index file.

不同步确认了,那么为啥主库的表也不能访问呢。权限确认了,没有问题。遇到的最多的应该就是大小写问题了,这个也是mysql
做的比较差的地方。 在主库查询全部是小写的表,没有报错,查询大小写混合的表,都报错,提示一样 :

ERROR 1146 (42S02): Table 'craw.sitePageConfig' doesn't exist

查询my.cnf下的lower_case_table_names参数,发现果然,参数是1,默认是0来的,查看my.cnf文件修改日期,是2天前,而备
库上的my.cnf是半年前的。大致找到原因后,如何进行解决呢 ? 改回来 ?

改回来(改为0)其实应该是OK的。待验证。其实在Linux/Unix下会碰到这种错误,在windows下不会。 为什么呢。因为MySQL中
数据库相当于数据目录下的目录,表相当于目录下的文件,而Linux/Unix系统是区分大小写的(windows不区分),创建了大小写混合
的库或表后,我们在修改参数lower_case_table_names=1 ,这时MySQL将所有SQL中的表名都翻译为了小写(为了大小写不敏感),
但是Linux下没有全部是小写的这个文件或目录(表或库)。 就出现了找不到的情况。

如果你是windows平台下开发的,完了之后放到Linux上,很可能会碰到这个错误。必须去掉大小写敏感。

0