详解记录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参数, ⽆法通过修改myf实现(在myf中增加配置会报错)
初始化数据库不需要卸载整个MySQL重装, 只需要使⽤mysqld命令即可
base_dir等⽤户组应为mysql, linux下命令为:
chown -sql MySQL数据路径(即base_dir)
linux下递归创建⽬录
安装mysql初始化数据库失败mkdir -p mysql/lib/mysql-files
MySQL重新初始化
mysqld -initialize --lower-case-table-names=1
MySQL8.0以上, 需要先创建⽤户再赋权
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内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论