详解记录MySQL中lower_case_table_names的坑
1起因
项目迁移数据库,重新启动后,报错"T_AAA表不存在",但数据库中可以查看到该表并有数据
2问题分析
通过重装系统与数据库,确认系统与数据库纯净,排除系统和数据库的原因
使用同一方式恢复两天前和一天前的数据备份,同样不能启动项目,排除数据内容的原因
使用mysqldump和导出SQL文件两种方式,恢复一天前的数据,同样不能启动项目,排除恢复方式的原因
以上方式基本是运维人员参与,等技术总监参与观察项目报错后,猛然发现是表名大小写的问题,通过测试最终确定原因:
使用rpm包安装数据库,自动初始化时将lower_case_table_names设置为0,表名大小写敏感,数据库中为小写,代码中为大写
3解决方案
- 删除已初始化的数据库,即base_dir,data_dir等
- 重新初始化数据库,将lower_case_table_names设置为1
- 重新恢复备份数据
4总结
MySQL8.0及以上版本,只能在初始化的时候设置lower-case-table-names参数,无法通过修改my.cnf实现(在my.cnf中增加配置会报错)
初始化数据库不需要卸载整个MySQL重装,只需要使用mysqld命令即可
base_dir等用户组应为mysql,linux下命令为:
chown-Rmysql.mysqlMySQL数据路径(即base_dir)
linux下递归创建目录
mkdir-pmysql/lib/mysql-files
MySQL重新初始化
mysqld-initialize--lower-case-table-names=1
MySQL8.0以上,需要先创建用户再赋权
createuser'test'@'%'identifiedby'test'; --withoption可以把权限赋予其它用户 grantallprivilegesontest.*to'test'@'%'withoption;
到此这篇关于详解记录MySQL中lower_case_table_names的坑的文章就介绍到这了,更多相关MySQLlower_case_table_names内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。