服务器之家

服务器之家 > 正文

详解记录MySQL中lower_case_table_names的坑

时间:2021-04-21 21:18     来源/作者:Houtaroy

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下命令为:

 
1
chown -R mysql.mysql MySQL数据路径(即base_dir)

linux下递归创建目录

 
1
mkdir -p mysql/lib/mysql-files

MySQL重新初始化

 
1
mysqld -initialize --lower-case-table-names=1

MySQL8.0以上, 需要先创建用户再赋权

 
1
2
3
create user 'test'@'%' identified by 'test';
-- with option 可以把权限赋予其它用户
grant all privileges on test.* to 'test'@'%' with option;

到此这篇关于详解记录MySQL中lower_case_table_names的坑的文章就介绍到这了,更多相关MySQL lower_case_table_names内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://juejin.cn/post/6936167942329466893

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
返回顶部