一、登录MySQL
登录 MySQL
mysql -u root -p
查看当前大小写敏感设置
SHOW VARIABLES LIKE 'lower_case_table_names';
返回值含义:
- 0 = 大小写敏感(区分大小写)
- 1 = 大小写不敏感(不区分大小写)
- 2 = 表名存储为给定的大小写但是以小写比较
二、修改配置文件
注意:如果MySQL中已存在了很多库和表及各种数据,修改前先备份数据
# 备份所有数据库
mysqldump -u root -p --all-databases > backup.sql
然后再:
- 打开配置文件:
# 适用于CentOS、RHEL、Fedora
sudo vi /etc/my.cnf
# 或(适用于Ubuntu、Debian):
sudo vi /etc/mysql/my.cnf
- 在 [mysqld] 部分添加或修改:
[mysqld]
lower_case_table_names=1
三、重启 MySQL 服务
只有重启后,才能永久生效。
# CentOS/RHEL
sudo systemctl restart mysqld
# Ubuntu
sudo systemctl restart mysql
如果重启失败,报错类似:
Job for mysqld.service failed because the control process exited with error code. See “systemctl status mysqld.service” and “journalctl -xe” for details.
- 按提示查看错误日志:
# 查看服务状态
systemctl status mysqld.service
# 查看详细日志
journalctl -xe
# 查看 MySQL 错误日志
sudo tail -f /var/log/mysqld.log
- 其实这时候错误发生的主要原因是配置文件里的参数改了,但没有生效:
2024-10-29T11:32:10.290204Z 1 [ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server (‘1’) and data dictionary (‘0’).
2024-10-29T11:32:10.290444Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
解决的办法就是:
1)先停止 MySQL 服务:
sudo systemctl stop mysqld
2)再次备份数据(如果有重要数据)
sudo cp -r /var/lib/mysql /var/lib/mysql_backup
3)删除数据目录:
sudo rm -rf /var/lib/mysql/*
4) 确认配置文件设置:
sudo vi /etc/my.cnf
# 在 [mysqld] 部分确保有:
[mysqld]
lower_case_table_names=1
5)重新初始化 MySQL:
sudo mysqld --initialize --user=mysql
6)设置正确的权限:
sudo chown -R mysql:mysql /var/lib/mysql
sudo chmod -R 755 /var/lib/mysql
7)启动 MySQL,并检查服务器状态
sudo systemctl start mysqld
sudo systemctl status mysqld
8)验证设置:
# 登录 MySQL(使用临时密码)
mysql -u root -p
# 检查设置
SHOW VARIABLES LIKE 'lower_case_table_names';
这个时候注意使用的是新的临时密码,因为前面5)的时候重新初始化了mysql,所以以前的密码全部重置了。
- 查看临时密码:
sudo grep 'temporary password' /var/log/mysqld.log
验证完成后,就可以重新对MySQL进行安全性配置和远程访问配置了:安装配置mysql 8.0(含设置mysql为大小写不敏感)及远程访问设置
6752

被折叠的 条评论
为什么被折叠?



