我需要保持两个不同的数据库同步。触发器似乎是最好的事情,但这两个数据库位于不同的主机上。我见过的大多数触发器教程似乎都假设触发器在同一个数据库上更新不同的表,或者至少在同一主机上更新。
有没有办法配置数据库来更新具有触发器的完全不同的服务器上的另一个数据库?
答案 0 :(得分:-1)
不。这不能通过常规触发器完成。
MySQL允许用其他语言编写用户定义函数;这提供了访问MySQL内部不可用资源的优势。可以从触发器调用用户定义函数,但这种方法存在一些明显的缺点;我不认为你(或其他任何人)真的想走那条路。我只是提到它,因为它可用。
作为替代方案,您可以有一个单独的进程,从MySQL外部运行进行同步。
从触发器中,您可以将行插入"事务"表。外部流程可以轮询"事务"用于新行的表,并连接到其他数据库(甚至是非MySQL数据库)并发布DML,或做任何事情,并标记"事务中的行"表已完成,失败或其他。但这将是一种异步方法,而不是同步方式,并且触发器不会有任何方式知道"如果在远程系统上成功完成了交易。
作为另一种选择,MySQL提供复制功能,二进制日志可以运送到远程数据库,以保持" slave"从" master"。
复制的数据库但是,如果你问是否可以使用DML触发器中提供的原生语法来实现这一点,答案是否定的,那就不会发生。
还有其他数据库(例如Oracle和SQL Server)支持从数据库内部到远程数据库的连接(Oracle"数据库链接"以及SQL Server"链接服务器"。这些也支持两阶段提交,因此您可以进行真正的"多数据库"事务。