【问题标题】:MySQL - Trigger or Replication is better?MySQL - 触发器或复制更好?
【发布时间】:2014-02-19 04:09:46
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

  • 为什么需要两张数据完全相同的表?您可以从另一个视图创建一个虚拟表。

标签: mysql triggers replication


【解决方案1】:

我不知道你的目标是什么,但我已经开始使用 VIEW 功能了。

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

那么,让我们看看我的解决方案...

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

SELECT id, name FROM DB1.customers;

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

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

现在我可以使用常规 SELECT 语句在 DB2 中检索这些数据作为常规表。

SELECT * FROM DB2.app1_customers;

希望有用。 BR

【讨论】:

    【解决方案2】:

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

    USE DB1;
    SELECT * FROM tbl1;
    
    USE DB2;
    SELECT * FROM DB1.tbl1;
    

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

    【讨论】:

    • 抱歉,回复太长了。您的建议对解决我的问题非常有帮助,目前我在 DB2 中创建了一个视图,该视图将从 DB1.table 中获取数据。我以前担心如果将来客户端想将数据库的 1 移动到其他服务器,那么它将无法正常工作。不过谢谢,我现在可以用这个方法了。
    • @wm90 如果在另一台服务器上使用复制,不要使用触发器。
    【解决方案3】:

    绝对触发是要走的路。拥有另一台服务器(从属服务器)将需要为安装、日志、cpu 和内存使用预留几个 MB。

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

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

    之后,继续创建更新、插入和删除状态的触发器。

    您还可以将新表更改为不同的引擎(例如 MEMORY)或添加索引以查看是否可以改进。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多