Ubuntu 16.0.4下MySQL 5.7.22无法设置lower_case_table_names变量问题
解决MySQL 5.7.22在Ubuntu 16.04下配置lower_case_table_names失败的问题
这问题我之前帮人排查过好几次,核心是你搞混了MySQL服务器(mysqld)和客户端(mysql)的配置段!
问题根源
lower_case_table_names是MySQL服务器专属的配置参数,用来控制表名的大小写敏感规则,它不属于客户端(mysql命令)的配置项。你之前把这个参数加到了[mysql]段里,客户端启动时会读取这个段的配置,但它根本不认识这个参数,所以才会报错unknown variable 'lower_case_table_names=1'。
另外,这个参数属于启动时生效的只读参数,不能通过SET语句动态修改,所以你进入SQL命令行后改不了它也很正常。
正确的配置步骤
1. 修改服务器配置文件
Ubuntu 16.04搭配MySQL 5.7时,服务器的默认配置文件是/etc/mysql/mysql.conf.d/mysqld.cnf,不是你修改的~/.my.cnf(这个文件主要给客户端用,或者覆盖客户端配置)。
- 打开配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf - 在
[mysqld]这个段下面添加一行:lower_case_table_names = 1 - 保存并退出编辑器(nano里按
Ctrl+O然后回车,再按Ctrl+X)
2. 重要前置检查
修改这个参数前,必须确保你的数据库中没有已创建的大写表名/库名!如果存在大写名称的对象,先手动把它们改成小写,否则服务重启后会找不到这些对象,甚至导致数据损坏。
3. 重启MySQL服务并验证
- 先停止服务:
sudo systemctl stop mysql - (可选但推荐)备份数据目录,防止意外:
sudo cp -r /var/lib/mysql /var/lib/mysql_backup - 启动服务:
sudo systemctl start mysql - 进入MySQL客户端验证配置:
执行查询:mysql -u root -p
如果返回结果是SELECT @@lower_case_table_names;1,说明配置已经生效了。
为什么之前的操作都失败?
- 把参数加到
[mysql]段:客户端不识别服务器的配置参数,直接报错 - 用命令行
--lower_case_table_names=1启动客户端:同样是给客户端传递了服务器专属的参数,客户端无法处理 - 用
SET语句修改:这个参数是只读的,只能在服务器启动时初始化,运行时无法修改
内容的提问来源于stack exchange,提问作者dam
相关产品推荐
相关产品推荐

