我使用pkg install mysql57-server
命令将我的FreeBSD服务器从MySQL 5.6升级到5.7,并启用了对InnoDB引擎的支持。在解决了已更改的配置问题后,我可以成功运行mysql_upgrade -u root -p
,它报告几乎所有现有表都不存在 - 因为它们存储在具有 StudlyCaps 文件名的磁盘上
我有
lower_case_table_names = 0
在当前和活动配置文件( /usr/local/etc/mysql/my.cnf )中,但是当我在show variables like 'lower_case_table_names';
解释器中运行mysql
时获得
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_table_names | 1 |
+------------------------+-------+
1 row in set (0.00 sec)
我也试过
root@localhost [none]> set lower_case_table_names=0;
ERROR 1238 (HY000): Variable 'lower_case_table_names' is a read only variable
在the MySQL documentation for lower_case_table_names我发现了这条评论:
如果您使用的是InnoDB表,则应在所有平台上将此变量设置为1,以强制将名称转换为小写。
似乎有人决定“你应将此变量设置为1”表示“此变量必须为1”并删除了更改它的功能。
在其他问题中,这意味着phpMyAdmin
现在以全部小写字母显示表名,而不是使用它们构建的更易读的 StudlyCaps 。我还担心这会破坏我的网站所有,其中PHP代码是使用设计的 StudlyCaps 表名编写的。
有没有办法解决恢复MySQL 5.6的问题?
答案 0 :(得分:0)
问题原来是由5.7升级安装的/usr/local/etc/mysql/my.cnf
文件,该文件覆盖了我所知道并正在编辑的/usr/local/etc/my.cnf
中的设置。
删除(重命名)有问题的“默认”文件后,我可以在lower_case_table_names=0
中设置/usr/local/etc/my.cnf
,并在重新启动服务器时识别出更改。
我想我跑了
find / -name "my*.cnf"
查找任何活动配置文件。要么我没有看到/usr/local/etc/mysql
中的那个或者(更有可能)我没有意识到它会覆盖我在/usr/local/etc/my.cnf
中设置的值:我的(无效)假设是一旦配置文件被发现MySQL将停止寻找另一个。