MySQL - 触发器或复制更好吗?

时间:2014-02-19 04:09:46

标签: mysql triggers replication

我想将某个数据库中的某个表复制到同一服务器中的另一个数据库中。该表包含完全相同的字段。

我正在考虑使用MySQL Replication复制该表,但有些人说它会增加IO,所以我找到另一种方法来创建3个触发器(插入,更新和删除),它将执行完全相同的事情,就像我期望的那样

我的问题是,哪种方式更好?是否使用MySQL复制更好,即使它在同一台服务器中或使用Trigger复制数据更好。

感谢。

3 个答案:

答案 0 :(得分:1)

我不知道你的目标是什么,但我得到了我的使用VIEW功能。

我有两个不同的应用程序,使用不同的数据库但在同一个Mysql服务器中。 Application2需要从Application1获取一些数据。一般来说,这是一个微不足道的情况,您可以根据需要处理USE DB1;USE DB2;,但我的编程框架对多个DB的效果不佳。

所以,让我们看看我的解决方案......

这是我的选择查询来检索此数据:

SELECT id, name FROM DB1.customers;

因此,使用DB2作为默认架构,我创建了一个VIEW:

USE DB2;
CREATE VIEW app1_customers AS SELECT id, name FROM DB1.customers;

现在,我可以将DB2中的这些数据作为带有常规SELECT语句的常规表进行检索。

SELECT * FROM DB2.app1_customers;

希望ts有用。 BR

答案 1 :(得分:0)

假设您在同一台服务器上有两个数据库,即DB1DB2,该表名为tbl1并且它位于DB1,您可以像查询表一样这样:

USE DB1;
SELECT * FROM tbl1;

USE DB2;
SELECT * FROM DB1.tbl1;

这样您就不需要复制数据并担心额外的空间和额外的代码。您可以在同一服务器上查询另一个数据库中的表。复制和触发器不是你的答案。您还可以创建一个视图来封装SQL语句。

答案 2 :(得分:-1)

绝对触发是要走的路。拥有另一台服务器(从机)将需要为安装,日志,CPU和内存使用节省几MB。

我会使用触发器来保持两个表相等。如果要创建具有相同列定义和数据使用的表:

USE db2;
CREATE TABLE t1 AS SELECT * FROM db1.t1;

之后,继续为Update,Insert和Delete statemetns创建触发器。

此外,您可以将新表更改为不同的引擎(如MEMORY)或添加索引以查看是否可以改进某些内容。