mysql传输数据到中间表_mysql通过中间表实现数据的“部分复制” -电脑资料

本文介绍了如何使用MySQL的中间表策略实现数据的部分复制。主要步骤包括在主库上为每个从库创建中间表,仅对中间表进行复制操作,从库上的中间表通过触发器与实体表同步。在测试过程中,展示了数据分发、复制的过程,并讨论了触发器与复制的交互以及自治事务在MySQL中的应用。

一、基本思路

1.在主库上,为不同的从库建立各自的中间表

2.主库与从库之间只对“中间表”进行复制操作

3.从库上,“中间表”通过触发器,实现与“实体表”的数据同步

二、主库结构与配置

主库结构:

主库配置:

三、从库结构与配置

(以其中的一个从库为例)

从库结构:

其中从库“中间表”上触发器内容如下:

use rel_db;

drop trigger if exists slave_trigger_before_insert_staffinfo_middle_100;

DELIMITER //

create trigger slave_trigger_before_insert_staffinfo_middle_100 before insert on staffinfo_middle_100 for each row

begin

insert into staffinfo values(new.i_userid,new.v_username);

end;

//

DELIMITER ;

从库配置:

四、测试

a)准备数据

1.主库数据初始化

2.从库数据初始化

3.从库开启复制功能

b)数据分发与复制

4.主库分发数据

use rel_db;

drop procedure if exists master_data_dispatch;

DELIMITER //

create procedure master_data_dispatch()

begin

declare i int;

declare v_name varchar(30);

declare staffinfo_cursor CURSOR FOR SELECT i_userid,v_username FROM staffinfo;

declare CONTINUE HANDLER FOR SQLSTATE '02000' SET i =null;

OPEN staffinfo_cursor;

FETCH staffinfo_cursor INTO i,v_name;

WHILE ( i is not null) DO

if (i>=100)and(i<200)and(not exists(select * from staffinfo_middle_100 where i_userid=i)) then

insert into staffinfo_middle_100 values(i,v_name);

else if (i>=200)and(i<300)and(not exists(select * from staffinfo_middle_200 where i_userid=i)) then

insert into staffinfo_middle_200 values(i,v_name);

end if;

end if;

FETCH staffinfo_cursor INTO i,v_name;

END WHILE;

CLOSE staffinfo_cursor;

end

//

DELIMITER ;

call master_data_dispatch;

5.从库“实体表”查询数据

五、说明

1.一旦设置了replicate-do-db,后面的replicate-ignore-db将不起作用(待进一步验证)

replicate-do-table、replicate-ignore-table与之类似

2.主库触发器中(已正确指定difiner)的插入操作无法被同步到从库:只是把触发器的

调用语句写进了二进制文件,从库中不存 在该触发器,mysql通过中间表实现数据的“部分复制”》(https://www.unjs.com)。

3.TRIGGER 一般来说是和引发的SQL是在同一个事务中的,也就是说,只要SQL或TRIGGER只

要有一个出错(包括引发的自定义错误),系统就会自动ROLLBACK,不需要也不能在TRIGGER

中写ROLLBACK语句.这个是和SQLSERVER不同的,SQLSERVER一般是自动COMMIT的.两

种数据库机制不一样.如果想SQL中ROLLBACK,TRIGGER中COMMIT,就要用到自治事务了。

4.自治事务可以把SQL的提交和回滚和TRIGGER中的提交和回滚分开。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值