【问题标题】:Data no longer accessible after upgrade from MySQL 5.6 to 5.7从 MySQL 5.6 升级到 5.7 后无法再访问数据
【发布时间】:2016-08-14 02:12:25
【问题描述】:

我使用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) 中,但是当我在 mysql 解释器中运行 show variables like 'lower_case_table_names'; 时,我得到了

+------------------------+-------+
| 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。我还担心这会破坏我的 所有 使用设计的 StudlyCaps 表名编写 PHP 代码的网站。

有没有办法解决这个无法恢复到 MySQL 5.6 的问题?

【问题讨论】:

  • 您可以使用 mysql 转储切换到不区分大小写的表名。您的 php 代码通常不会中断,除非您实际上使用了两次表名。不过 =0 应该可以工作。确保您在[mysqld] 下拥有该选项。检查列出的 here 可能优先的任何其他配置文件。运行mysqld --verbose --help检查启动服务器时将使用哪个值(如果你用=0启动mysql 5.7并且它不起作用,它只会退出,而不是切换到=1,所以它可能在某处设置为1 )。

标签: mysql upgrade freebsd case-sensitive


【解决方案1】:

问题原来是由 5.7 升级安装的 /usr/local/etc/mysql/my.cnf 文件,它覆盖了我知道并正在编辑的 /usr/local/etc/my.cnf 中的设置。

一旦我删除(重命名)有问题的“默认”文件,我就能够在/usr/local/etc/my.cnf 中设置lower_case_table_names=0,并在我重新启动服务器时识别更改。

我以为我跑了

find / -name "my*.cnf"

查找任何活动的配置文件。要么我没有看到 /usr/local/etc/mysql 中的那个,要么(更有可能)我没有意识到它会覆盖我在 /usr/local/etc/my.cnf 中设置的值:我的(无效)假设是一旦找到配置文件 MySQL会停止寻找另一个。

【讨论】:

    猜你喜欢
    • 2015-10-11
    • 1970-01-01
    • 2021-07-08
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 2021-05-13
    • 1970-01-01
    相关资源
    最近更新 更多