mysql跨库数据同步

双向同步

开启FEDERATED引擎

若需要创建FEDERATED引擎表,则目标端实例要开启FEDERATED引擎。从MySQL5.5开始FEDERATED引擎默认安装 只是没有启用,进入命令行输入show engines; FEDERATED行状态为NO。

mysql数据库配置文件,在最后一行添加 federated,然后再重启mysql服务
mysql跨库数据同步_第1张图片

使用CONNECTION创建FEDERATED表

CREATE TABLE `task_tmp` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '测试同步id'
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='测试数据同步'
ENGINE=FEDERATED  CONNECTION = 'mysql://root:密码@远程数据库ip:3306/fc/task';

ENGINE表选项应该是FEDERATED,并且CONNECTION表选项是给FEDERATED指明如何连接到远程服务器上的连接字符串之外, 这个表的结构必须完全与远程表的结构相同。FEDERATED引擎仅创建在本地数据库中存储构建表结构。

多对一的单向同步数据

使用FEDERATED引擎和触发器结合,实现多对一的单向数据同步功能
mysql跨库数据同步_第2张图片

配置

使用该流程时,省1,task数据表触发器到task_tmp表时报错:

MYSQL Statement violates GTID consistency: Updates to non-transactional tables can only be done in e…

为了保证InnoDB引擎 表通过触发器,可以向FEDERATED引擎 表插入数据
解决方案:
将GTID_MODE 和 enforce_gtid_consistency 关闭

gtid_mode模式一共4中状态,只能一级一级更改,OFF <-> OFF_PERMISSIVE <-> ON_PERMISSIVE <-> ON.

set @@global.gtid_mode=ON_PERMISSIVE;
select @@global.gtid_owned;--为空
SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
SET @@GLOBAL.GTID_MODE = OFF;
SET @@GLOBAL.enforce_gtid_consistency=OFF

-- 查看配置完结果
SELECT @@GLOBAL.GTID_MODE;
SELECT @@GLOBAL.enforce_gtid_consistency;

在这里插入图片描述
在这里插入图片描述

构建触发器

tindex_insert_after_sync_2: 触发器名称,自定义

-- ① 删除tindex_insert_after_sync_2的触发器
DROP TRIGGER IF EXISTS tindex_insert_after_sync_2;
-- ② 新增tindex_insert_after_sync_2触发器(insert),
-- test_sync_2_tmp ==》test_sync_2
CREATE TRIGGER tindex_insert_after_sync_2 after 
INSERT ON test_sync_2_tmp FOR EACH row  INSERT INTO test_sync_2 VALUES(new.id,new.path_name,new.full_path_id,new.create_time,new.update_time)

流程图

mysql跨库数据同步_第3张图片
bye

你可能感兴趣的:(MySQL,mysql,数据库,服务器)