首页 > 解决方案 > ILIAS LMS v6.1:使用 php 7.4 和 MySQL 8 在设置脚本中无法通过 DB 选择

问题描述

我无法通过设置脚本 (/setup/setup.php) 中的数据库选择。我的设置:

我知道数据库服务器和客户端工作正常(大约有十几个其他 LAMP 应用程序在其上运行,并在 CLI 上检查了与 mysql 的特定 ilias 连接)。但是脚本不断地回到我身边:

“无法访问数据库。请检查凭据以及数据库是否存在”

我尝试过变体:

我在 /Services/Database/classes/PDO/class.ilDBPdo.php 中添加了一些调试语句,返回的错误代码为 42000。因此在 my.cnf 中添加了以下内容: sql_mode = "IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

这里有一些有趣的事情:如果我从 /Services/Database/classes/PDO/class.ilDBPdo.php 的第 98 行的函数调用中删除 $options 数组,则不会返回错误代码 - 但安装脚本仍然会返回错误上面提到的消息。

对不起,如果我忽略了一些明显的东西,但任何线索将不胜感激。

干杯,小野

标签: ilias

解决方案


我不确定我的解决方案是否与您的解决方案 100% 相关,但是我遇到了类似的问题。有趣的是,安装手册中有两个错误:

  1. 以下陈述是错误的:

授予锁定表TO'ilias@localhost';

实际上应该是

授予锁定表TO 'ilias'@'localhost';

  1. sql-mode 不应包含“no_auto_create_user”

sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

实际上应该是

sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

因为 NO_AUTO_CREATE_USER 是 mysql 自 5.7 以来的默认值。请参阅将 NO_AUTO_CREATE_USER sql_mode 行为设为默认值

这实际上让我查看了 Services/Database/classes/PDO/class.ilDBPdoMySQL.php,我在其中找到了这一行:

$this->pdo->query("SET SESSION sql_mode = 'IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';");

我删除了 NO_AUTO_CREATE_USER 并能够完全设置 ILIAS。


推荐阅读