mysql触发器-表数据实时同步

今天遇到一个需求,是同一个实例里面的两个库中的几张表需要做单向同步,刚开始想直接使用Otter&Canal的架构去做同步。但是因为这个架构依赖的是binlog进行同步的,但是阿里云RDS对于binlog是有做定时清理操作的。所以如果用canal去通过binlog同步的话 一旦RDS的binlog 清理了 将无法同步,并且无法找回之前的数据。所以考虑到只是同步极少数的表,就用了mysql的触发器。

mysql的触发器只支持行级触发器不支持语句级触发器,行级触发器又分为单行触发器以及多行触发器。

单行触发器类似于:

create trigger tri_name after insert|delete|update on table_name for each row trigger_sql

多行触发器类似于:
DELIMITER $
create trigger cif_ofs_supplier_attribute_Insert after insert
on cif.ofs_supplier_attribute for each row
begin
INSERT INTO ofs.ofs_supplier_attribute(id,supplier_id,common_flag,is_deleted,gmt_created,gmt_modified) VALUES(new.id,new.supplier_id,new.common_flag,new.is_deleted,new.gmt_created,new.gmt_modified)
END$;
DELIMITER ;

其中DELIMITER 定好结束符为”$$”, 然后最后又定义为”;”, MYSQL的默认结束符为”;”.   after 代表是在触发之后操作,before代表在触发之前操作

触发器语句中使用了两种特殊的表:old 表和 new 表

old 表用于存储 DELETE 和 UPDATE 语句所影响的行的副本,

在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传输到 deleted 表中。old 表和触发器表通常没有相同的行。

Inserted 表用于存储 INSERT 和 UPDATE 语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到 new 表和触发器表中。new 表中的行是触发器表中新行的副本。

1.插入操作(Insert)

new表有数据,old表无数据

2.删除操作(Delete)

new表无数据,old表有数据

3.更新操作(Update)

new表有数据(新数据),old表有数据(旧数据)

表同步多行触发器例子:

inserted (插入):
DELIMITER $
create trigger cif_ofs_rel_supplier_role_Insert after insert
on cif.ofs_rel_supplier_role for each row
begin
INSERT INTO ofs.ofs_rel_supplier_role(id,supplier_id,role_code,is_deleted,gmt_created,gmt_modified) VALUES(new.id,new.supplier_id,new.role_code,new.is_deleted,new.gmt_created,new.gmt_modified);
END$;
DELIMITER ;

update(更新)
DELIMITER $
create trigger cif_ofs_rel_supplier_role_update after update
on cif.ofs_rel_supplier_role for each row
begin
update ofs.ofs_rel_supplier_role set id=new.id,supplier_id=new.supplier_id,role_code=new.role_code,is_deleted=new.is_deleted,gmt_created=new.gmt_created,gmt_modified=new.gmt_modified where id=old.id;
END$;
DELIMITER ;

delete(删除)
DELIMITER $
create trigger cif_ofs_rel_supplier_role_delete after delete
on cif.ofs_rel_supplier_role for each row
begin
delete from ofs.ofs_rel_supplier_role where id=old.id;
END$;
DELIMITER ;

查看触发器:
查看触发器方式有多种:

1.show triggers;

2.SELECT * FROM information_schema.`TRIGGERS`;

3.使用Navicat查看,选中对应的表 右键设计表结构 查看

删除触发器:
drop trigger trigger_name
---------------------
作者:噜噜噜的博客
来源:CSDN
原文:https://blog.csdn.net/qq_22543991/article/details/82344282
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/HKROnline-SyncNavigator/p/10973415.html

时间: 2024-10-27 07:18:09

mysql触发器-表数据实时同步的相关文章

Sqlserver2000连接Oracle11G数据库进行数据实时同步

 Sqlserver2000连接Oracle11G数据库进行数据实时同步 1,前提条件 已经有sqlserver2000环境,已经存在oracle11g环境,准备这两个数据库,建立各自的访问账号,两者之间需要ping通,telnet端口也要能通,目的是将sqlserver里面的数据自动同步到oracle数据库里面去.Sqlserver里面有链路服务器(linked server)可以实现. 2,在sqlserver上面建立odbc数据源 有2种方式:"Microsoft ODBC for Ora

【赵强老师】利用数据库触发器实现数据的同步

一.什么是触发器 数据库触发器是一个与表相关联的,存储的PL/SQL 语句.每当一个特定的数据操作语句(insert update delete)在指定的表上发出时,Oracle自动执行触发器中定义的语句序列. 触发器的应用场景如下: 复杂的安全性检查 数据的确认 数据库审计 数据的备份和审计 二.创建Oracle触发器的语法 CREATE [OR REPLACE] TRIGGER trigger_name {BEFORE | AFTER } {INSERT | DELETE | UPDATE

关于Mysql删除表数据的两种方式对比

1.delete from table_name 一行一行删除,只删除表数据,auto_increament仍停留在最后一天数据的下一个值. 2.truncate table_name 快捷删除表数据.先删除整个表,然后重新建表结构.auto_increament从1开始. 关于Mysql删除表数据的两种方式对比,布布扣,bubuko.com

sersync基于rsync+inotify实现数据实时同步

一.环境描述 需求:服务器A与服务器B为主备服务模式,需要保持文件一致性,现采用sersync基于rsync+inotify实现数据实时同步 主服务器A:192.168.1.23 从服务器B:192.168.1.243 实时同步/var/atlassian目录到从服务器. 二.实施 1.从服务器192.168.1.243 rsync服务搭建 1.1安装软件包 wget http://rsync.samba.org/ftp/rsync/src/rsync-3.1.1.tar.gz tar xf r

oracle 、sql server 、mysql 复制表数据

我们知道在oracle 中复制表数据的方式是使用 create table table_name as select * from table_name 而在sql server  中是不能这么使用的 语句如下: select * into table_name from table_name; 而在 mysql 中有两种方式 1. create table a like b 2. 类似oracle的方式 create table table_name as select * from tabl

rsync + inotify 用来实现数据实时同步

一.简介 1.rsync 比其cp.tar备份的方法,rsync的优点是,安全性高.备份迅速.支持增量备份.只能做对实时性要求不高的数据备份,例如:备份文件服务到远端从服务器.在本地磁盘上做数据镜像等 增量备份:就是rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输.但是对于大量文件达到千万量级别时,扫描所有文件是非常耗时的. 如果发生改变的只是其中的一小部分的话,这是非常低效的方式. rsync 不能实时的去监测,同步数据,虽然它可以通过 linux 守护进程的方式进行触发同步,两

rsync+inotify实现数据实时同步备份

在实际生产环境当中,我们总会遇见需要把一些重要数据进行备份,且随着应用系统规模的增大,对数据的安全性.可靠性.时效性要求还是比较高的, 因此我自己有在用rsync+inotify来实现数据实时同步备份,下面记录下操作步骤,以防日后自己忘记. 实验背景: 操作系统          IP         机器名        角色 CentOS 7.2       172.16.22.1     nginx01        数据源(服务器端) CentOS 7.2       172.16.22

rsync与inotify实现数据实时同步

Rsync与Inotify 单一的rsync只可以进行数据同步,单一的inotify只可以实时监控文件,两者结合使用刚好满足数据实时同步的需求,下面就用一个数据发布服务器和两个web服务器实例解析rsync+inotify实现实时同步. 数据发布服务器 192.168.1.5 (rsync+inotify) web服务器 192.168.1.6 192.168.1.7 (rsync) 首先在web服务器上部署rsync 192.168.1.6配置 [[email protected]~]# yu

Linux下Rsync+Inotify-tools实现数据实时同步

说明: 一.先安装好rsync的服务端和客户端: http://douya.blog.51cto.com/6173221/1573968 二.安装,使用inotify-tools,实时同步 1.查看服务器内核是否支持inotify ll /proc/sys/fs/inotify   #列出文件目录,出现下面的内容,说明服务器内核支持inotify -rw-r--r-- 1 root root 0 Mar  7 02:17 max_queued_events -rw-r--r-- 1 root r