我正在尝试使用来自 Compose.io 的 Mysql 服务 默认情况下,此服务具有复制(3 个节点) 当我尝试通过 Drush 或 WebUI 安装 Drupal 时,出现了一些错误:
无法将值插入数据库服务器上的测试表。我们尝试使用命令 INSERT INTO {drupal_install_test} (id) VALUES (1) 插入一个值,服务器报告以下错误:SQLSTATE[HY000]: General error: 3098 该表不符合外部插件的要求。 : 插入 {drupal_install_test} (id) VALUES (1);数组 ( ) .
无法更新数据库服务器上测试表中的值。我们尝试使用命令 UPDATE {drupal_install_test} SET id = 2 更新一个值,服务器报告了以下错误:SQLSTATE[HY000]: General error: 3098 The table does not compliance the requirements by an external plugin.: UPDATE {drupal_install_test } 设置 id = 2;数组 ( ) .
无法从数据库服务器上的测试表中删除值。我们尝试使用命令 DELETE FROM {drupal_install_test} 删除一个值,服务器报告了以下错误: SQLSTATE[HY000]: General error: 3098 The table does not compliance the requirements by an external plugin.: DELETE FROM {drupal_install_test};数组 ( ) .
当复制开启时,每个表都需要有一个主键,显然 Drupal 默认不添加这些。
是否有任何解决方法可以将 Drupal 配置为使用启用复制的 Mysql 数据库?
请注意,Compose.io 不会向用户公开副本,只会向用户公开主副本。
最佳答案
这显然是新的 Group Replication 返回的错误消息特征。
是的,Group Replication 要求所有表都有一个主键。
https://dev.mysql.com/doc/refman/5.7/en/group-replication-requirements.html说:
Every table that is to be replicated by the group must have a defined primary key, or primary key equivalent where the equivalent is a non-null unique key.
不幸的是,Drupal 用于测试安装的测试表没有主键(或等效项)。
这已作为问题报告给 Drupal:https://www.drupal.org/project/drupal/issues/2856362
Drupal 8.5 或更高版本中可能会有一个修复程序,但与此同时,该问题中的评论者可能会提出有用的补丁。基本上,您只需将几个文件中的 drupal_install_test 表的创建更改为:
CREATE TABLE {drupal_install_test} (id INT NOT NULL PRIMARY KEY)
关于mysql - 使用 Mysql 复制的 Drupal 8 安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47784729/