【问题标题】:WordPress & DigitalOcean Managed Database SQL Require Primary Key issueWordPress 和 DigitalOcean 托管数据库 SQL 需要主键问题
【发布时间】:2021-06-19 23:15:39
【问题描述】:

背景:WP 开发知识不多,但一般来说都是经验丰富的 PHP 开发人员。

所以,每个人都可能知道(或不知道,就像我不知道)DigitalOcean 的托管数据库系统设置为具有必需的主键(不可全局更改)。虽然我理解这样更好,但有时在 WordPress 网站上安装现有插件时,插件必须创建表,其中可能有也可能没有主键。

我有一个此类插件的列表,我将在可能的情况下向其发送改进请求,但作为一种解决方法,我想通过使用钩子和/或“必须使用的插件”来解决这个问题WordPress 系统在每个 create table 语句之前调用SET SESSION sql_require_primary_key = OFF;(或者一般的每个 sql 语句,如果没有办法只关注 create table 语句)。

  1. 这是一个“好”且可行的解决方法吗?
  2. 我怎样才能做到这一点(我应该调用什么钩子)?

【问题讨论】:

  • 您是否尝试过验证它们是否允许您在创建表之前禁用主键要求?看起来如果您创建没有主键的表,这些表将无法正确复制,这就是他们现在强制执行此要求的原因。
  • @MarkB 谢谢你的评论。我不知道这是原因。所以我唯一的解决方案似乎是迁移我的数据库,因为我无法控制我的客户使用的一些插件,并且为每个插件手动创建数据库是不现实的,因为每次更新都可能创建一个新的......真是太可惜了……
  • @MarkB;也:是的。我已经验证过了。因为,当我手动创建表时(并通过 SQL 编辑器禁用 sql_require_primary_key 选项);即使没有主键,也可以成功创建表。
  • 是的,我也对此感到非常沮丧。因此,我目前正在将某些内容从 DO 转移到 Lightsail,因为 Lightsail 没有此类索引要求。
  • @MarkB 如果您不介意我问:这是否意味着此类数据库无法复制?即使我转移到 AWS 或单独的 SQL droplet 集群?

标签: mysql wordpress primary-key digital-ocean wordpress-hook


【解决方案1】:

现在与wp-cerber 有同样的问题,并得到了 Digital Ocean 的回复:

我们目前开启了变量 sql_require_primary_key 使用户能够在表上创建主键以避免复制 问题,节点复制等。这在过去有效,但没有 强制执行,但经验、时间和我们收集的信息 从频繁的问题前。为一个节点创建一个新节点所花费的时间 从带有大表的备份中提供服务。

主键对于某些管理操作也必不可少 没有备用或只读副本服务的服务;任何节点 替换是通过首先启动一个备用服务器来执行的,所有 来自旧主服务器的数据被复制并且没有主键,这 过程可能需要很长时间或失败,失败的节点也是 替换为恢复备份,这需要播放二进制文件 日志,如果没有主键的大表有 最近发生了变化。

如果您决定不使用主键继续,您可以继续使用两个 选项:

  1. 我们可以从我们这边禁用主要要求

  2. 您可以使用 SET SESSION sql_require_primary_key = 0;

注意第 2 条是针对单个会话的。注销后,您将 需要再次运行。

以下网址有更多信息 https://www.digitalocean.com/docs/databases/mysql/how-to/create-primary-keys/#how-digitalocean-uses-primary-keys

【讨论】:

  • 你解决了吗?我从他们那里得到了同样的回应。
  • 很遗憾没有。
猜你喜欢
  • 2020-10-06
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 2019-06-14
相关资源
最近更新 更多