详解记录MySQL中lower_case_table_names的坑

 更新时间:2021年03月07日 10:32:44   作者:Houtaroy  
这篇文章主要介绍了详解记录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 -R mysql.mysql MySQL数据路径(即base_dir)

linux下递归创建目录

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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • DQL数据查询语句使用示例

    DQL数据查询语句使用示例

    DQL(Data Query Language 数据查询语言):用于查询数据库对象中所包含的数据。DQL语言主要的语句:SELECT语句。DQL语言是数据库语言中最核心、最重要的语句,也是使用频率最高的语句
    2022-12-12
  • mysql模糊查询结果取反问题

    mysql模糊查询结果取反问题

    这篇文章主要介绍了mysql模糊查询结果取反问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • mysql表的清空、删除和修改操作详解

    mysql表的清空、删除和修改操作详解

    这篇文章主要详细介绍了mysql表的清空、删除和修改操作的方法,以及一些常用的mysql的常用操作,非常的简单实用,有需要的可以参考下
    2014-09-09
  • Mysql 执行一条语句的整个过程详细

    Mysql 执行一条语句的整个过程详细

    这篇文章主要介绍了Mysql 执行一条语句的整个详细过程,Mysql的逻辑架构整体分为两部分,Server层和存储引擎层,下面文章内容具有一定的参考价值,需要的小伙伴可以参考一下,希望对你有所帮助
    2022-02-02
  • MySQL中的distinct与group by比较使用方法

    MySQL中的distinct与group by比较使用方法

    今天无意中听到有同事在讨论,distinct和group by有什么区别,下面这篇文章主要给大家介绍了关于MySQL去重中distinct和group by区别的相关资料,需要的朋友可以参考下
    2023-03-03
  • MySQL rand函数实现随机数的方法

    MySQL rand函数实现随机数的方法

    在mysql中,使用随机数写一个语句能一下更新几百条MYSQL数据吗?答案是肯定的,使用MySQL rand函数,就可以使现在随机数
    2016-09-09
  • MySQL 根据表名称生成完整select语句详情

    MySQL 根据表名称生成完整select语句详情

    这篇文章主要介绍了MySQL 根据表名称生成完整select语句,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • mysql分区表的增删改查的实现示例

    mysql分区表的增删改查的实现示例

    增删查改在数据库中是很常见的操作,本文主要介绍了mysql分区表的增删改查的实现示例,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • mysql 5.7.20 win64 安装及配置方法

    mysql 5.7.20 win64 安装及配置方法

    这篇文章主要介绍了mysql 5.7.20 win64 安装及配置方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-11-11
  • navicat创建MySql定时任务的方法详解

    navicat创建MySql定时任务的方法详解

    这篇文章主要介绍了navicat创建MySql定时任务的方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10

最新评论