ilias - ILIAS LMS v6.1:使用 php 7.4 和 MySQL 8 在设置脚本中无法通过 DB 选择
问题描述
我无法通过设置脚本 (/setup/setup.php) 中的数据库选择。我的设置:
- Ubuntu 20.04
- PHP 7.4.9
- MySQL 8.0.21
- Ilias 6.1(今天也尝试了 6.2,但遇到了同样的问题)
我知道数据库服务器和客户端工作正常(大约有十几个其他 LAMP 应用程序在其上运行,并在 CLI 上检查了与 mysql 的特定 ilias 连接)。但是脚本不断地回到我身边:
“无法访问数据库。请检查凭据以及数据库是否存在”
我尝试过变体:
- 本地主机与 127.0.0.1
- MyISAM 与 InnoDB 引擎
我在 /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 数组,则不会返回错误代码 - 但安装脚本仍然会返回错误上面提到的消息。
对不起,如果我忽略了一些明显的东西,但任何线索将不胜感激。
干杯,小野
解决方案
我不确定我的解决方案是否与您的解决方案 100% 相关,但是我遇到了类似的问题。有趣的是,安装手册中有两个错误:
- 以下陈述是错误的:
授予锁定表。TO'ilias@localhost';
实际上应该是
授予锁定表。TO 'ilias'@'localhost';
- 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。
推荐阅读
- html - 保持网格项目内容的高度,从而防止它们匹配其父高度 - CSS
- android - Flutter Android Manifest 意外元素
在发现 - python - Python 忽略“if”语句,可能是范围问题?
- php - Laravel 表单验证在更新时限制图像数量
- javascript - React/JS - 动态渲染图像
- python-3.x - 如果满足条件,则创建熊猫数据框的索引名称列表
- javascript - 我想让它成为一个全局变量,但我不知道我做错了什么替换图像 src 代码
- python - 脚本错误(Pillow 已经安装,但它说不是)
- jquery - 有没有更好的方法来过滤 GET 调用中的数据,如下所示?(NodeJs 和 MongoDb)
- shell - 根据搜索条件复制行