使用mycat/otter基于binlog进行mysql扩展数据同步

目的:将数据库DBA中的a表,实时同步到DBB库中的b表,b表与a表相比多了一个新的字段进行区分;

部署:

部署zk;

部署cancal;

部署 otter manager;

部署 otter node;

添加zk/node/canal到manager控制;

添加数据源、数据表管理

添加channel/pipeline/映射关系



eventProcessor:

 package com.alibaba.otter.node.extend.processor;
import java.sql.Types;
import java.util.List;


import com.alibaba.otter.node.extend.processor.AbstractEventProcessor;
import com.alibaba.otter.shared.etl.model.EventColumn;
import com.alibaba.otter.shared.etl.model.EventData;
import com.alibaba.otter.shared.etl.model.EventType;
/**
 * 业务自定义处理过程
 *
 * @author jianghang 2012-6-25 下午02:26:36
 * @version 4.1.0
 */
public class TestTranfer extends AbstractEventProcessor {


    /**
     * 自定义处理单条EventData对象
     *
     * @return {@link EventData} 返回值=null,需要忽略该条数据
     */
    public boolean process(EventData eventData){
             EventType et = eventData.getEventType();
        if(et == EventType.INSERT){
            insert(eventData);
        }
        
        if(et == EventType.UPDATE || et == EventType.DELETE){
            EventColumn misc = new EventColumn();
            misc.setColumnValue("122");
            misc.setColumnType(Types.INTEGER);
            misc.setColumnName("addli");
            List<EventColumn> ks = eventData.getKeys();
            ks.add(misc);
        }
        return true;
    }


    private void printList(List<EventColumn> list){
        for(EventColumn t:list){
            System.out.println(t.getColumnName() +" = " + t.getColumnValue());
        }
    }
    
    private void insert(EventData eventData) {
        EventColumn misc = new EventColumn();
        misc.setColumnValue("122");
        misc.setColumnType(Types.INTEGER);
        misc.setColumnName("addli");
        misc.setUpdate(true);
        List<EventColumn> cols = eventData.getUpdatedColumns();
        cols.add(misc);
        eventData.setColumns(cols);
    }
} 


测试用数据库脚本:

CREATE DATABASE /*!32312 IF NOT EXISTS*/`mycat_test` /*!40100 DEFAULT CHARACTER SET utf8 */;  
  
USE `mycat_test`;  
  
/*Table structure for table `sam_test` */  
  
DROP TABLE IF EXISTS `sam_test`;  
  
CREATE TABLE `sam_test` (  
  `id_` int(4) NOT NULL AUTO_INCREMENT,  
  `name_` varchar(64) NOT NULL,  
  `user_id` bigint(4) NOT NULL,  
  PRIMARY KEY (`id_`)  
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;  
CREATE DATABASE /*!32312 IF NOT EXISTS*/`mycat_test1` /*!40100 DEFAULT CHARACTER SET utf8 */;  
  
USE `mycat_test1`;  
  
/*Table structure for table `sam_test1` */  
  
DROP TABLE IF EXISTS `sam_test1`;  
  
CREATE TABLE `sam_test1` (  
  `id_` int(4) NOT NULL AUTO_INCREMENT,  
  `name_` varchar(64) NOT NULL,  
  `user_id` bigint(4) NOT NULL, `addli` int(6) not null, 
  PRIMARY KEY (`id_`)  
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;  





  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值