首页 > 数据库 >MySQL8 设置大小写敏感

MySQL8 设置大小写敏感

时间:2024-04-17 14:33:04浏览次数:31  
标签:case lower MySQL8 Mysql 敏感 大小写 names 表名 table

https://blog.csdn.net/xhmico/article/details/136680013


今天对我本地的数据库迁移服务器上,完成之后启动项目报错

 

说数据库中不存在 quartz_LOCKS 这张表

 

我打开服务器上面的数据上面展示的表名是 quartz_LOCKS,然后通过查询 lower_case_table_names 配置可知

show variables like 'lower_case_table_names';
1


lower_case_table_names=0,表示 表名区分大小写,且按照用户指定存储

lower_case_table_names 各参数含义:

0:表名区分大小写,且按照用户指定存储
1:表不区分大小写,使用小写存储
2:表不区分大小写,按照用户指定存储
按理说只要将 lower_case_table_names 的值设置为 1 或者 2 就行了

接着我去修改了服务器上 my.cnf (或者 my.ini)文件

 

添加以下配置:

[mysqld]
lower_case_table_names = 1
1
2


接着再重启 mysql

# 重启 mysql
systemctl restart mysqld
1
2


mysql 启动失败

原因分析:
根据提示使用 systemctl status mysqld.service 命令显示 mysqld.service 的状态信息,

 

退出状态码为 1,这通常意味着在启动过程中遇到了某种错误,为了确定具体的错误原因,查看更详细的日志

# 查询 mysql 日志
sudo tail -n 100 /var/log/mysqld.log
1
2


从日志上说明 MySQL 服务器启动失败的原因是 lower_case_table_names 的设置不一致。MySQL 的 lower_case_table_names 配置项决定了表名在存储和比较时是否应该转换为小写,这个设置必须在服务器和数据字典之间保持一致,否则服务器将无法正确启动

[ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('1') and data dictionary ('0').

指出服务器期望 lower_case_table_names 设置为 1(意味着表名在存储和比较时应转换为小写),但是数据字典(即已有的数据库表元数据)的 lower_case_table_names 设置是 0(意味着表名区分大小写)

从 mysqld.log 日志文件打印的信息来看,导致 Mysql 启动失败的原因就是因为设置了 lower_case_table_names=1 这个参数,之前在本地使用的 Mysql 是 5.7 版本的,而服务器上面的 Mysql 版本确是 8.0

查看 Mysql 官方文档可知

lower_case_table_names can only be configured when initializing the server.
Changing the lower_case_table_names setting after the server is initialized is prohibited.

在 Mysql-8.0 版本时,lower_case_table_names 变量是一个系统变量,它只能在 MySQL 服务器初始化时设置,并且一旦服务器初始化完成,就不应该再更改这个设置。这是因为在 MySQL 的数据字典和文件系统层面,这个设置影响到了表名和目录名的大小写敏感性和转换规则。如果在服务器运行时改变这个设置,可能会导致数据不一致和其他严重问题

解决方案:
通过分析可知 Mysql8 在初始化之后是不能修改 lower_case_table_names 这个参数的

那要解决这个问题有两种方案,要么就是更改现有的表明,要么就初始化数据库,更改配置

方案一
如果你的表比较少的话,可以通过 RENAME TABLE 语句来更改它们,例如:将 my_table 更新为 MY_TABLE

RENAME TABLE my_table TO MY_TABLE;
1
但是,如果你有很多表需要更改,这种方法可能会很繁琐

也可以编写一个脚本来查询数据库中的所有表名,并自动为它们生成 RENAME TABLE 语句,然后执行这些语句来更改表名

方案二
初始化数据库,再更改 lower_case_table_names 配置,在初始化数据时,需要清空数据库中所有的数据并恢复到初始状态,所以务必做好数据备份

在初始化数据库时需要先将数据库关闭

# 关闭 mysql
systemctl stop mysqld
1
2
Mysql 数据库的数据库存储在 /var/lib/mysql 下,在重新初始化数据库之前,需要删除现有的数据目录

sudo rm -rf /var/lib/mysql
1


注意:此操作不可逆,务必做好数据备份

再重新创建一个新的数据目录

sudo mkdir /var/lib/mysql
1


授权 Mysql 对于 /var/lib/mysql 目录的所有权

sudo chown -R mysql:mysql /var/lib/mysql
1


初始化数据库

sudo mysqld --initialize
1


到此为止初始化的步骤已经完成,接着就去修改 /etc/my.cnf 文件中的 lower_case_table_names 配置

 

在 /var/log/mysqld.log 这个文件中查找 Mysql 的密码

cat /var/log/mysqld.log
1


rtAVCTaNg0*b

再启动 Mysql

# 启动 mysql
systemctl start mysqld
1
2


连接 Mysql

# 连接 MySQL
mysql -u root -p
1
2


修改 root 密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
1


再通过以下命令查看下 lower_case_table_names 的值是否为你所设置的

show variables like 'lower_case_table_names';
1


可以看到已经成功修改为 1 了


————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/xhmico/article/details/136680013

标签:case,lower,MySQL8,Mysql,敏感,大小写,names,表名,table
From: https://www.cnblogs.com/myibm/p/18140668

相关文章

  • mysql8修改数据目录
    mysql8修改数据目录停止mysqlsystemctlstopmysqld修改配置文件/etc/my.cnf#datadir=/var/lib/mysql#socket=/var/lib/mysql/mysql.sockdatadir=/data/mysqlsocket=/data/mysql/mysql.sock迁移数据文件mkdir/datarsync-az/var/lib/mysql/data/创建socke......
  • mysql8.0忘记密码后重置密码
    免密验证修改配置文件vim/etc/mysql/mysql.conf.d/mysqld.cnf在配置文件中添加一行skip-grant-tables重启mysqlsystemctlrestartmysql登录mysqlmysql-uroot-p,提示输入密码直接回车即可将密码清空,然后退出usemysql;updateusersetauthentication_string=''wher......
  • mysql8.0的root用户无了,添加root用户
    修改配置文件,跳过登陆验证sudovim/etc/mysql/mysql.conf.d/mysqld.cnf添加root用户usemysql;insertintouser(User,authentication_string,ssl_cipher,x509_issuer,x509_subject)values('root','','','','');添加权限updateuser......
  • mysql8.0管理用户
    --使用mysql数据库USEmysql;--创建用户CREATEUSERmyuserIDENTIFIEDBY'mypass';--查看用户SELECTuser,host,authentication_stringFROMUSERWHEREUSER='myuser';--修改用户密码updateusersetauthentication_string=''whereuser='m......
  • docker安装mysql8
    一、开始安装#新建挂载目录mkdir-p/opt/docker/mysql/datamkdir-p/opt/docker/mysql/confvim/opt/docker/mysql/conf/my.cnf[root@centos01mysql]#cdconf/[root@centos01conf]#lsmy.cnf[root@centos01conf]#catmy.cnf[client]default-character-set=utf8mb4[m......
  • git默认忽略文件名称大小写
    0.现象当将文件名称test修改为Test时,git提交记录检测不到变化1.原因Git默认设置忽略文件名大小写是因为不同操作系统对文件名大小写的处理方式不同,为了避免在不同操作系统之间出现文件名大小写不一致的问题,Git默认忽略文件名大小写。2.修改默认不忽略gitconfigcore.ig......
  • 目录扫描&敏感信息泄露
    好久没有更新了,这段时间博主忙着学习和打靶场去了,以及处理学校里面的一些琐事。现在打的也差不多了,就将从中用到的工具和学到的知识做一个总结,篇幅太大,所以我分成好几篇来写,都放在《打靶学习总结里面》,好了,废话不多说,直接进入正题目录扫描可以用dirsearch安装之前建议先更新,更新......
  • MySQL8.0加密规则修改为mysql_native_password
    参考https://blog.csdn.net/lcy1619260/article/details/132302008用软件登陆的Mysql8数据库时,报错:Authenticationplugin'caching_sha2_password'cannotbeloaded出现这个原因是mysql8之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2......
  • 使用 `omit` 函数移除敏感信息
    exportdefaultfunctionomit<Textendsobject,KextendskeyofT>(obj:T,fields:K[]|readonlyK[],):Omit<T,K>{constclone={...obj};if(Array.isArray(fields)){fields.forEach(key=>{deleteclone[key];......
  • 我的内心有点敏感了 虽然也是因为生活中这种恶心人的存在
    一个敏感细腻的男生,后来想在知乎上提问“那些敏感细腻的男生长大后都怎么样了?”,发现已经有几乎一模一样的问题,然后开始想楼主应该也是一个敏感细腻的男生,就好像在世界的某一处存在着一份我熟悉的温暖。一个敏感细腻的男生,从小时候就学会观察父母、朋友的脸色,努力达到周围人都......