You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用MariaDB复制功能,实时同步单表新增数据至远程库

仅同步MariaDB特定表至远程数据库的即时方案

针对你需要实时同步主机1上DB1.table1新增条目到远程库的需求,以下是几个精准可行的方案,解决全库复制和导出导入延迟的问题:

方案1:配置表级主从复制(原生支持,稳定实时)

MariaDB的复制功能可以通过配置限制仅同步指定库表,而非全量同步:

  1. 主库(主机1)配置:
    修改主库的my.cnf或my.ini配置文件,添加以下参数(仅记录目标库的binlog):

    # 仅记录DB1的操作日志
    binlog-do-db=DB1
    # 忽略系统库,避免不必要的日志
    binlog-ignore-db=mysql
    binlog-ignore-db=information_schema
    binlog-ignore-db=performance_schema
    

    重启主库生效。

  2. 远程从库配置:
    在远程库的配置文件中添加以下参数,限制仅同步DB1的table1:

    # 仅同步DB1库
    replicate-do-db=DB1
    # 仅同步DB1下的table1表
    replicate-do-table=DB1.table1
    

    完成主从初始化(仅同步table1的初始数据)后,重启从库,后续主库table1的新增条目会实时同步到远程库。

方案2:触发器+远程写入(轻量即时,单条触发)

通过在主库table1上创建AFTER INSERT触发器,每条新记录插入时直接同步到远程库:

  1. 确保远程库已创建结构完全一致的table1,且主库服务器能访问远程库并拥有写入权限。
  2. 在主库执行以下SQL创建触发器:
    DELIMITER //
    CREATE TRIGGER sync_table1_new_rows
    AFTER INSERT ON DB1.table1
    FOR EACH ROW
    BEGIN
        -- 直接写入远程库,替换为你的远程库连接信息(或用FEDERATED映射表)
        INSERT INTO [远程库IP或域名].[远程库名].table1 
        (列1, 列2, 列3) -- 替换为table1的实际列名
        VALUES (NEW.列1, NEW.列2, NEW.列3);
    END //
    DELIMITER ;
    
    若直接远程连接有问题,可先在主库创建FEDERATED引擎的映射表,指向远程库的table1,触发器操作映射表即可。

方案3:CDC工具(灵活无侵入,适合复杂场景)

使用Change Data Capture工具(如Debezium)监听主库binlog,捕获table1的INSERT事件并推送到远程库:

  • 该方案无需修改数据库配置,不影响主库写入性能,支持跨不同类型数据库同步;
  • 需部署Debezium服务(通常搭配Kafka Connect),配置监听DB1.table1的INSERT操作,实时将事件同步到远程库。

方案对比

方案优点缺点
表级复制官方原生支持,稳定可靠,无额外代码需配置主从,有一定运维成本
触发器同步轻量即时,单条触发生效增加主库写入开销,远程库不可用可能导致主库插入失败
CDC工具无侵入,灵活适配复杂场景需额外部署服务,复杂度较高

内容的提问来源于stack exchange,提问作者piyali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:15:22