首先检查数据源库是否支持触发器,show ENGINES,如果FEDERATED是NO,表示未开启,如需开启,再mysql配置文件中,添加federated配置到mysqld下面。
一、同服务器不同库触发器同步,这里只举例插入数据同步
source_table数据源表user库,target_table目标表user-test库
DROP TRIGGER if EXISTS test.source_table;
CREATE TRIGGER source_table
AFTER INSERT ON test.source_table
for EACH ROW
BEGIN
INSERT INTO `user-test`.target_table(id,name,age,gender,phone)
VALUES(new.id,new.name,new.age,new.gender,new.phone);
END;
新增插入数据后,目标数据库数据发生变化,随之新增一条数据
INSERT INTO test.source_table(id,material_type,material_texture,replace_texture,serial_number)
VALUES(3000,'james',2,'男',13388888888)
二、不同服务器不同库触发器同步,新增
使用CREATE SERVER创建FEDERATED表
CREATE SERVER fedlink
FOREIGN DATA WRAPPER mysql
OPTIONS(
HOST '10.10.1.1',
PORT 6001,
USER 'user1',
PASSWORD '123@abc',
DATABASE 'user-test'
);
创建目标表
DROP TABLE if EXISTS `target_table`;
CREATE TABLE `target_table`(
id int PRIMARY KEY not null AUTO_INCREMENT,
name VARCHAR(100),
age int(100),
gender CHAR(10),
phone VARCHAR(100)
)ENGINE=FEDERATED DEFAULT CHARSET=utf8 CONNECTION='fedlink/source_table';
这里还可以用另一种方式,之所以用上面这种方式,是因为密码上有@特殊字符;
另一种方式:
DROP TABLE IF EXISTS `表名`;
CREATE TABLE `表名` (
字段信息
) ENGINE=InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '表描述' ROW_FORMAT = Compact ENGINE=FEDERATED CONNECTION = 'mysql://user:password@ip:port/databaseName/tableName';
查询test库中触发器
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_SCHEMA='test';
注意:以上皆为双向同步数据