insert的trigger里面,在插入之后,自动把插入数据插入到B表
delete的trigger里面,在删除之前,检查B表的数据和A表是否一致,如果不一致,insert或update, 然后执行删除
GTID 对于单源复制还是很方便,但是对于多源复制,这里就需要特别注意:
要先停止所有的从库 stop slave
然后清理本机所有的 GTID,reset master
再进行 SET @@GLOBAL.GTID_PURGED='xxxxx' gtid 设置
这里就会引入一个问题,如果是级联复制的情况下,reset master 的时候,会把本机的所有 binlog 清理掉。如果下一级的从库存在延迟,没有及时的把 binlog 传过去,就会造成主从中断,这里我们该怎么避免呢?看这里:做 reset master 的时候,先看看下游的从库是否存在很大的延迟。如果存在,把当前的 binlog 和后面未同步的 binlog 全部备份下;
待添加好从库的 channel 后,再把未同步的 binlog 文件手动拷贝到 binlog 目录;
更新下 mysql-bin.index 文件;
注意,binlog 不能同名,需要手动更新下文件。一、准备工作源数据库ORACLE 目标数据库MongoDB,在源数据库添加删除、更新触发器
二、 *** 作步骤
添加表输入组件,连接ORACLE触发器记录表
添加JAVA代码组件,进行步骤跳转,根据输入的数据判断是删除或者更新,如果是删除,则跳转至MongoDB Delete步骤中,如果是更新的话,跳转至字段选择步骤中。JAVA代码中的详细信息如下:
import java.util.List
import org.pentaho.di.core.exception.KettleException
import org.pentaho.di.core.row.RowDataUtil
import org.pentaho.di.core.row.RowMeta
import org.pentaho.di.core.row.RowMetaInterface
import org.pentaho.di.core.row.ValueMeta
import org.pentaho.di.trans.Trans
import org.pentaho.di.trans.TransMeta
private Object[] previousRow//上一行
private RowSet t1 = null//业务表步骤
private RowSet t2 = null//删除步骤
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
{
Object[] r = getRow()//获取输入行
if ( first ) {
if ( getInputRowMeta() == null ) {
setOutputDone()//设置输出完成
return false
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)