在 Rocky Linux 8 上使用 yum
(或 dnf
)安装 MySQL 8 后,如果需要 禁用表名大小写敏感(即强制表名存储为小写),需修改配置文件并重新初始化数据目录。以下是具体步骤:
步骤 1:修改 MySQL 配置文件
1. 编辑 MySQL 配置文件(默认路径):
vi /etc/my.cnf
或(如果存在):
vi /etc/my.cnf.d/mysql-server.cnf
2. 在 [mysqld]
段落下添加以下参数:
[mysqld]
lower_case_table_names=1
参数说明:
lower_case_table_names=1
:表名存储为小写,比较时不区分大小写。- 注意:MySQL 8 仅在初始化时允许修改此参数,后续更改需重新初始化数据目录!
步骤 2:停止 MySQL 服务
systemctl stop mysqld
步骤 3:删除原有数据目录(谨慎操作!)
rm -rf /var/lib/mysql/*
此操作会删除所有数据库数据,确保已备份重要数据!
步骤 4:重新初始化 MySQL 数据目录
mysqld --initialize --user=mysql --lower-case-table-names=1
关键点:
--initialize
:初始化数据目录。--user=mysql
:指定运行用户。--lower-case-table-names=1
:确保初始化时应用配置。
步骤 5:启动 MySQL 服务
systemctl start mysqld
步骤 6:验证配置
1. 登录 MySQL:
mysql -u root -p
(输入初始化时生成的临时密码,可通过 grep 'temporary password' /var/log/mysqld.log
查看)
2. 检查参数是否生效:
SHOW VARIABLES LIKE 'lower_case_table_names';
输出应为:
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_table_names | 1 |
+------------------------+-------+
常见问题解决
1. 初始化报错 --lower-case-table-names=1
无效
- 原因:MySQL 8 要求此参数必须在首次初始化时设置,且不能后续修改。
- 解决:确保数据目录
/var/lib/mysql/
为空,重新执行初始化命令。
2. 表名仍区分大小写
- 原因:可能未正确删除旧数据目录或配置文件未生效。
检查:
cat /var/lib/mysql/auto.cnf | grep lower_case_table_names
如果存在旧配置,需彻底清理数据目录。
3. 权限问题
若启动失败,检查日志:
journalctl -u mysqld
修复权限:
chown -R mysql:mysql /var/lib/mysql
chmod 750 /var/lib/mysql
总结
- 关键步骤:修改配置文件 → 删除数据目录 → 重新初始化。
- 仅限新装:此方法适用于首次安装或可接受数据丢失的情况。
- 生产环境:建议在测试环境验证后再操作,避免数据风险。
⚠️ 注意:MySQL 8 默认不允许在初始化后修改 lower_case_table_names
,因此必须通过重新初始化实现。