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

(0)

相关推荐

  • MySQL 5.7临时表空间如何玩才能不掉坑里详解

    导读 MySQL 5.7的目标是成为发布以来最安全的MySQL服务器,其在SSL/TLS和全面安全开发方面有一些重要的改变. MySQL 5.7起支持独立临时表空间,但个别时候也可能会踩坑的. MySQL 5.7起,开始采用独立的临时表空间(和独立的undo表空间不是一回事哟),命名ibtmp1文件,初始化12M,且默认无上限. 选项 innodb_temp_data_file_path 可配置临时表空间相关参数. innodb_temp_data_file_path = ibtmp1:12M:

  • MySQL中NOT IN填坑之列为null的问题解决

    前一段时间在公司做一个小功能的时候,统计一下某种情况下有多少条数据,然后修改的问题,当时感觉很简单,写了一个如下的 SQL: SELECT COUNT(*) FROM t1 where tl.c1 not IN (SELECT t2.c1 FROM t2); 预期的结果是:有多少条数据在 t1 中,同时不在 t2 中,结果为:0,也就是 t1 中数据都在 t2 中,但是很容易就发现某些数据在 t1 中不在 t2 中,所以就感觉很奇怪,这个 SQL 看着也没问题啊.经过一番查询原来是因为 t2 的

  • mysql 8.0.18 压缩包安装及忘记密码重置所遇到的坑

    http://www.cppcns.com/shujuku/mysql/283231.html  也可以参照这个8.0.18安装方法 1.下载zip安装包(解压到指定文件夹) 1)从mysql官网下载安装包 2)点击进入,按下图所标顺序点击进入下载页面 3)下载红框所标压缩包(注意此处是64位的,要下载32位的话点击go to Download Page进行切换) 4)解压到指定文件夹(把这个文件夹移动到你想安装mysql的地方,也就是你移动到的目录就是安装mysql的目录,比如我的放在G:\a

  • Mysql 5.7.19 免安装版遇到的坑(收藏)

    1.从官网下载64位zip文件. 2.把zip解压到一个位置,此位置为安装为安装位置 3.如果有以前的mysql 如果是install的,去控制面板卸载,还需要删除以前mysql留下来的残留文件.如果是免安装的,用mysqld -remove命令删除 ,卸载以前的文件记得要保留里面的data文件夹和my.ini文件.(data文件里面的东西可以恢复用:my.ini文件里面是配置参考配置) 以前有mysql服务的话 需要去停掉mysql服务 4.新建一个my.ini文件.里面内容和以前一样.要修改

  • 详解关于MySQL 8.0走过的坑

    今天手贱更新了MySQL 8.0 第一个问题:Navicat连接不上数据库 安装的mysql为localhost:3306,配置一切默认,安装后打开Navicat 12 新建连接,直接报错 authentication plugin 'caching_sha2_password' 身份验证插件不能被加载 查了下官方文档6.5.1.3 Caching SHA-2 Pluggable Authentication 原来在MySQL 8.0中,caching_sha2_password取代了mysql

  • 分享MySql8.0.19 安装采坑记录

    上篇文章给大家介绍了MySql8.0.19 安装过程,需要的朋友可以点击查看.https://www.jb51.net/article/178988.htm 1.ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. 解决方式如下: mysql> ALTER USER USER() IDENTIFIED BY 'Xiaoming250'

  • 浅谈mysql8.0新特性的坑和解决办法(小结)

    一.创建用户和授权 在mysql8.0创建用户和授权和之前不太一样了,其实严格上来讲,也不能说是不一样,只能说是更严格,mysql8.0需要先创建用户和设置密码,然后才能授权. #先创建一个用户 create user 'hong'@'%' identified by '123123'; #再进行授权 grant all privileges on *.* to 'hong'@'%' with grant option; 如果还是用原来5.7的那种方式,会报错误: grant all privi

  • 升级到MySQL5.7后开发不得不注意的一些坑

    前言 前段时间,将线上MySQL数据库升级到了5.7.考虑到可能产生的不兼容性,在升级之前,确实也是战战兢兢,虽然测试环境,开发环境早在半年前就已提前升级. 基于前期的调研和朋友的反馈,与开发相关的主要有两点: sql_mode MySQL 5.6中,其默认值为"NO_ENGINE_SU BSTITUTION",可理解为非严格模式,譬如,对自增主键插入空字符串'',虽然提示warning,但并不影响自增主键的生成. 但在MySQL 5.7中,其就调整为了严格模式,对于上面这个,其不会提

  • 详解记录MySQL中lower_case_table_names的坑

    1 起因 项目迁移数据库, 重新启动后, 报错"T_AAA表不存在", 但数据库中可以查看到该表并有数据 2 问题分析 通过重装系统与数据库, 确认系统与数据库纯净, 排除系统和数据库的原因 使用同一方式恢复两天前和一天前的数据备份, 同样不能启动项目, 排除数据内容的原因 使用mysqldump和导出SQL文件两种方式, 恢复一天前的数据, 同样不能启动项目, 排除恢复方式的原因 以上方式基本是运维人员参与, 等技术总监参与观察项目报错后, 猛然发现是表名大小写的问题, 通过测试最终

  • 详解oracle mysql 中的“不等于“ <> != ^= is not

    目录 oracle mysql 中的“不等于“ <> != ^= is not oracle mysql oracle中的!=与<>和^= oracle mysql 中的“不等于“ <> != ^= is not oracle oracle中的 != 与 <> 和 ^= 都是不等于,逻辑上没有区别.官方推荐 <>,因为跨平台,可移植,兼容性强. 不等于,隐含着不为空,即is not null. name <> 'Mike',会把名字不

  • 详解在MySQL中创建表的教程

    创建表的命令要求: 表的名称 表字段名称 每个字段的定义 语法: 下面是通用的SQL语法来创建一个MySQL表: CREATE TABLE table_name (column_name column_type); 现在,我们将创建下面的教程数据库表中. tutorials_tbl( tutorial_id INT NOT NULL AUTO_INCREMENT, tutorial_title VARCHAR(100) NOT NULL, tutorial_author VARCHAR(40)

  • 详解element-ui 组件el-autocomplete使用踩坑记录

    项目遇到一个比较麻烦的需求,保存用户填写的历史记录,项目使用的element-ui,自然就使用了el-autocomplete组件,然后就是各种踩坑,以下记录以下写代码过程中遇到的问题 createFilter(queryString, filed) { console.log("createFilter==" + queryString) return (item) => { switch (filed) { case 'cardNum': break case 'cardPa

  • 详解在Angular4中使用ng2-baidu-map的方法

    一.引言 之前在Angular4使用过百度地图,记录一下踩过的坑 二.实现 1.安装 npm install angular2-baidu-map 2.在app.module.ts配置 ak key在http://lbsyun.baidu.com/apiconsole/key中创建 import { BrowserModule } from '@angular/platform-browser' import { NgModule } from '@angular/core' import {

  • 详解在idea 中使用Mybatis Generator逆向工程生成代码

    通过MAVEN完成 Mybatis 逆向工程 1. POM文件中添加插件 在 pom 文件的build 标签中 添加 plugin 插件和 数据库连接 jdbc 的依赖. <build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <

  • 详解Mybatis-plus(MP)中CRUD操作保姆级笔记

    目录 一.什么是mybatis-plus 1.在java中访问数据库 2.Mybatis-plus简介 3.Mybatis-plus特性 二.第一个mybatis-plus开发 1.使用MP的步骤: 前提:数据库/表创建 2.mybatis-plus日志 三.MP操作CRUD 的 基本用法 1.添加数据后,获取主键值(MP可以自动实现主键回填) 2.更新数据 3.删除数据 4.查询数据 5.mybatis-plus中CRUD的底层实现原理 一.什么是mybatis-plus 1.在java中访问

  • 详解处理Java中的大对象的方法

    目录 String中的substring 集合大对象扩容 保持合适的对象粒度 Bitmap 把对象变小 数据的冷热分离 数据双写 写入 MQ 分发 使用 Binlog 同步 思维发散 小结 本文我们将讲解一下对于“大对象”的优化.这里的“大对象”,是一个泛化概念,它可能存放在 JVM 中,也可能正在网络上传输,也可能存在于数据库中. 那么为什么大对象会影响我们的应用性能呢? 第一,大对象占用的资源多,垃圾回收器要花一部分精力去对它进行回收: 第二,大对象在不同的设备之间交换,会耗费网络流量,以及

  • 详解PostgreSQL 语法中关键字的添加

    详解PostgreSQL 语法中关键字的添加 当PostgreSQL的后台进程Postgres接收到查询语句后,首先将其传递给查询分析模块,进行词法.语法和语义分析. 记录下在parser语法解析模块添加关键字. 几个核心文件简介 源文件 说明 gram.y 定义语法结构,bison编译后生成gram.y和gram.h scan.l 定义词法结构,flex编译后生成scan.c kwlist.h 关键字列表,需要按序排列 check_keywords.pl linux下会调用其进行关键字检查(顺

  • 详解shell脚本中的case条件语句介绍和使用案例

    #前言:这篇我们接着写shell的另外一个条件语句case,上篇讲解了if条件语句.case条件语句我们常用于实现系统服务启动脚本等场景,case条件语句也相当于if条件语句多分支结构,多个选择,case看起来更规范和易读 #case条件语句的语法格式 case "变量" in 值1) 指令1... ;; 值2) 指令2... ;; *) 指令3... esac #说明:当变量的值等于1时,那么就会相应的执行指令1的相关命令输出,值等于2时就执行指令2的命令,以此类推,如果都不符合的话

随机推荐