MySQL 8 禁用表名大小写敏感

Linux · 今天 · 1 人浏览

在 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,因此必须通过重新初始化实现。
Jason
Jason 注销
Theme Jasmine