繁体   English   中英

共享主机中的Mysql复制

[英]Mysql replication in shared hosting

我需要做一些mysql复制。 一些信息:

  • 我有两个数据库实例,在共享主机中,所以我不能使用Mysql Replication(我没有访问配置文件)。
  • 这是一个非盈利项目(教育),所以我们买不起自己的服务器。
  • 如果主服务器停机几分钟,通常没有那么糟糕,但是存在特定的日子,我们真的需要备份解决方案,与主服务器同步(网站的时间限制事件)。

现在系统在每个表的每一行使用修订号,我们定期检查这些号码的修改(并更新相应的行)。 这很慢。

我想到的是每个SELECT / INSERT / UPDATE查询都记录在一个特定的表中,“从服务器”定期向“主服务器”询问该表的内容并应用相应的查询。

你对这个想法有什么看法?

我知道它并不完美,服务器可能会在所有查询传播之前关闭,但我希望尽可能减少可能的问题,尽可能少的代码行。

实施它的最佳方式是什么?

  • 在php代码中,在每个SELECT / INSERT / UPDATE上我都可以在特定的表中执行其他插入(我只是插入查询)
  • 有触发器吗?

我成功地使用了触发器和联合表的组合来模拟从一台服务器上的MyISAM表到共享托管环境中不同服务器上的MyISAM表的数据复制。

我的主表上的任何插入/更新/删除都通过AFTER INSERT / AFTER UPDATE / AFTER DELETE触发器复制到同一服务器上的联合表。 然后,该联合表将更改推送到另一台服务器上的表。

由于RolandoMySQLDBA在服务器故障上非常有帮助地记录了这个方法,所以我不能不赞成这种方法:
MySQL存储过程是否能够插入/更新到远程备份MySQL服务器?

以下是我实施的步骤:

在SERVER2上......

  • 我创建了一个表(让我们称之为slave_table ),其中的列与主表中的列匹配(让我们称之为master_table )在SERVER1上。

在SERVER1上......

  • 我创建了一个表(让我们称之为federated_table ),其列与master_table中的列匹配,指定了一个FEDERATED存储引擎和一个CONNECTION字符串,以引用SERVER2上的slave_table ... CONNECTION='mysql://username:password@SERVER2:port/database/slave_table';

  • 我将AFTER INSERTAFTER UPDATEAFTER DELETE触发器添加到master_table ,其中包含SQL命令...
    INSERT INTO federated_table VALUES (NEW.id,NEW.title);
    UPDATE federated_table SET id=NEW.id,title=NEW.title WHERE id=OLD.id;
    DELETE FROM federated_table WHERE id=OLD.id; 分别。

我希望能帮助处于类似情况的人。

两个想法:

  1. 一个cron,它在备份数据库表中找到max(ID)s,然后获取主数据库中的所有记录。

  2. 要包含我的评论中的建议,请将您的写入直接复制到第二个数据库,而不是将查询写入表中。 这可能会导致一些开销,但可能是最容易实现的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM