问题描述
背景:WP 开发知识不多,但总体上是经验丰富的 PHP 开发人员。
因此,众所周知(或不知道,就像我不知道)DigitalOcean 的托管数据库系统设置为具有必需的主键(不可全局更改)。虽然我理解这样更好,但有时在 wordpress 网站上安装现有插件时,插件必须创建表,其中可能有也可能没有主键。
我有这些插件的列表,我会在可能的情况下向其发送改进请求,但作为一种解决方法,我想通过使用钩子和/或“必须使用的插件”来解决此问题wordpress 系统在每个 create table 语句(或者一般的每个 sql 语句,如果没有办法只关注 create table 语句)之前调用 SET SESSION sql_require_primary_key = OFF;
。
解决方法
现在 wp-cerber
遇到了同样的问题,并得到了 Digital Ocean 的回复:
我们目前已将变量 sql_require_primary_key 打开为 允许用户在表上创建主键以避免复制 问题、节点复制等。这在过去有效,但没有 强制执行,但我们收集的经验、时间和信息 从频繁的问题,例如。为一个节点创建一个新节点所需的时间 来自大表备份的服务。
主键对于某些管理操作也是必不可少的 没有备用或只读副本服务的服务;任何节点 替换是通过首先启动一个备用数据库来执行的,所有 来自旧 master 的数据被复制并且没有主键,这 过程可能需要很长时间或失败,失败的节点也是 替换为恢复备份,这需要播放二进制文件 日志,如果没有主键的大表,这可能不起作用 最近有变化。
如果您决定不使用主键继续,您可以使用两个 选项:
-
我们可以从我们的末端禁用主要需求
-
您可以使用 SET SESSION sql_require_primary_key = 0;
注 2 是针对单个会话的。退出后,您将 需要再次运行。