【问题标题】:Duplicate MySQL db as slave, ignoring one row将 MySQL 数据库复制为从属,忽略一行
【发布时间】:2016-11-13 17:25:19
【问题描述】:

我正在设置 Wordpress 的“从属”实例(第二个数据库,第二次安装 Wordpress),并希望第二个数据库成为主数据库的从属,除了哪些插件处于活动状态。

我会使用 replicate_wild_ignore_table 之类的东西,但不幸的是,插件在 Wordpress 中处于活动状态的记录是表格中的一行,而不是整个表格。

我们需要 Wordpress 的第二个实例,因为我们需要它来做一些与主实例不同的事情,并且它需要与主实例不同的插件处于活动状态。但是,从数据库需要与数据库中的大多数其他表具有完全相同的数据。所以我的想法是第二个数据库是主数据库的从属,除了wp_options 表中的插件行。

这是解决此问题的最佳方法吗?如果是这样,我们将不胜感激。

到目前为止,我的计划是使用本指南同步两个数据库:https://torbjornzetterlund.com/how-to-setup-a-mysql-replication-database-for-wordpress/

本质上,这种方法归结为主将其事务写入此日志:

log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = wordpressdb

然后slave读取这个日志并更新自己:

relay-log               = /var/log/mysql/mysql-relay-bin.log
log_bin                 = /var/log/mysql/mysql-bin.log
binlog_do_db            = wordpressdb

当然还有更多,但这就是魔法发生的地方。

【问题讨论】:

  • 如何同步数据库?
  • 用此信息更新了问题。

标签: mysql database wordpress


【解决方案1】:

首先,将副本设置为与其主副本相同。

连接到副本数据库并通过更改数据禁用某些插件。见https://perishablepress.com/quickly-disable-or-enable-all-wordpress-plugins-via-the-database/

但是有人可以在主服务器上重新启用插件,并且该更改将流向副本并在那里重新启用它。您可以在副本上的 wp_options 表上创建触发器,以确保您不希望插件保持非活动状态。

CREATE TRIGGER disable_all_plugins BEFORE UPDATE ON wp_options
FOR EACH ROW SET NEW.option_value = IF(NEW.option_name='active_plugins', 'a:0:{}', NEW.option_value);

(该触发器未经测试,我仅将其作为起点。您有责任了解它的作用并根据您的需要进行更改。)

确保master使用基于语句的二进制日志,因为row-based binary logs don't execute triggers on the replica

【讨论】:

  • 感谢@Bill Karwin 提供的信息,看起来像这样。明天将试一试。如果它对我有用,我会勾选这个作为答案。
  • 这成功了,我能够扩展它以完成使其顺利滚动所需的其他一些触发器更新。再次感谢!
【解决方案2】:

也许你可以试试WP Migrate DB Pro。这是我用来将开发站点迁移到实时站点的插件。

该插件可以在站点之间拉取或推送数据,包括媒体文件。它允许您不迁移 active_plugins 设置,因此您可以保留其他站点使用他们自己的插件。

请查看视频了解更多详情。 https://youtu.be/fHFcH4bCzmU?t=3m37s

它支持WP-CLI,所以你可以写一些代码来自动化这个过程。

【讨论】:

  • 另一种有趣的方法。会看看这个。谢谢@ucheng。
  • 这个插件超级有趣!也将对这种方法进行测试,尽管 Bill Karwin 回答的是对原始问题的更直接的回答。无论如何,再次感谢。
  • 别担心! @PaulIsLoud
猜你喜欢
  • 1970-01-01
  • 2017-10-25
  • 1970-01-01
  • 2014-09-01
  • 2014-11-29
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多