要想实现本地数据库和远程数据库中的某一些表实时同步数据。需要在本地数据库创建一个类似于映射表
1、检查服务器A上的mysql是否支持fedrated数据引擎
mysql> show engines;
查看mysql的 FEDERATED 数据引擎,一般都是关闭状态,需要在
配置my.ini文件
[mysqld]
federated #添加该属性
[client] port=3306 default-character-set=utf8 [mysqld] # 开启事件 event_scheduler=ON # 设置为自己的MYSQL的安装目录 basedir=D:\mysql-5.7.29-winx64 # 设置为自己的MYSQL的数据目录 datadir=D:\mysql-5.7.29-winx64\data port=3306 character_set_server=utf8 sql_mode=NO_ENGINE_SUBSTITUTION #开启查询缓存 explicit_defaults_for_timestamp=true # skip-grant-tables federated
2、在服务器A上创建federated引擎表,该引擎表与服务器B上要更新的表结构相同
比如我想把本地的某一个数据表(t_rebiao)数据同步到远程服务器的数据表(t_rebiao)中,需要在本地创建一个远程数据表的映射表"bak_rebiao"
CREATE TABLE `bak_rebiao` ( `Sample_ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '自动增长的编号', `Sample_DateTime` datetime(0) NULL DEFAULT NULL COMMENT '采样日期时间', `Sample_JinshuiWendu` double(18, 2) NULL DEFAULT NULL COMMENT '进水温度', `Sample_HuishuiWendu` double(18, 2) NULL DEFAULT NULL COMMENT '回水温度', `Sample_ShunshiLiuliang_Jinshui` double(18, 2) NULL DEFAULT NULL COMMENT '进水管瞬时流量', `Sample_LeijiLiuliang_Jinshui` double(18, 2) NULL DEFAULT NULL COMMENT '进水管累计流量', `Sample_ShunshiReliang_Jinshui` double(18, 2) NULL DEFAULT NULL COMMENT '进水管瞬时热量', `Sample_LeijiReliang_Jinshui` double(18, 2) NULL DEFAULT NULL COMMENT '进水管累计热量', `Sample_ShunshiLiuliang_Huishui` double(18, 2) NULL DEFAULT NULL COMMENT '回水管瞬时流量', `Sample_LeijiLiuliang_Huishui` double(18, 2) NULL DEFAULT NULL COMMENT '回水管累计流量', `Sample_ShunshiReliang_Huishui` double(18, 2) NULL DEFAULT NULL COMMENT '回水管瞬时热量', `Sample_LeijiReliang_Huishui` double(18, 2) NULL DEFAULT NULL COMMENT '回水管累计热量', `Sample_JinshuiYali` double(18, 2) NULL DEFAULT 0.00 COMMENT '进水压力', `Sample_HuishuiYali` double(18, 2) UNSIGNED ZEROFILL NULL DEFAULT 000000000000000.00 COMMENT '回水压力', `Sample_Code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '计量点代码', PRIMARY KEY (`Sample_ID`) USING BTREE, INDEX `IX_Sample_Code`(`Sample_Code`) USING BTREE COMMENT '计量点代码', INDEX `IX_Sample_DateTime`(`Sample_DateTime`) USING BTREE COMMENT '采集时间' ) ENGINE=FEDERATED CONNECTION='mysql://user:password@ip:port/db_name/table_name';
说明:CONNECTION='mysql://user:password@ip:port/db_name/table_name';对应的参数要根据自己需要修改
user:数据库账号
password:数据库登录密码
ip:远程服务器ip
port:数据库端口
db_name:数据库名称
table_name:数据表名称
3、在服务器A 上创建基于本地表的触发器
BEGIN INSERT INTO `bak_rebiao` SELECT * FROM `t_rebiao` WHERE Sample_ID = NEW.Sample_ID; END