mysql 数据实时同步至sql server

方式一 使用mysql插件udf

  1. 下载 mysqludf https://github.com/mysqludf/lib_mysqludf_sys
  2. 编译适合当前内核的源码 
  3. 把lib_mysqludf_sys.so文件放到 mysql的安装目录中 lib/mysql/plugin/ 中
  4. 在mysql中执行如下sql创建函数
    DROP FUNCTION IF EXISTS lib_mysqludf_sys_info;
    DROP FUNCTION IF EXISTS sys_get;
    DROP FUNCTION IF EXISTS sys_set;
    DROP FUNCTION IF EXISTS sys_exec;
    DROP FUNCTION IF EXISTS sys_eval;
     
    CREATE FUNCTION lib_mysqludf_sys_info RETURNS string SONAME 'lib_mysqludf_sys.so';
    CREATE FUNCTION sys_get RETURNS string SONAME 'lib_mysqludf_sys.so';
    CREATE FUNCTION sys_set RETURNS int SONAME 'lib_mysqludf_sys.so';
    CREATE FUNCTION sys_exec RETURNS int SONAME 'lib_mysqludf_sys.so';
    CREATE FUNCTION sys_eval RETURNS string SONAME 'lib_mysqludf_sys.so';

  5. 创建触发器 比如在插入式调用外部程序
    DROP TRIGGER IF EXISTS `wp_insert`;  
    CREATE DEFINER=`root`@`localhost` TRIGGER `wp_insert` AFTER INSERT ON `wp_users` FOR EACH ROW BEGIN  SET @xlog_return = (SELECT sys_eval(CONCAT(‘/usr/bin/php -f /home/wwwroot/1.php’)));   
    END   

    带入参数的调用,例如代入正在操作的ID,将上面SET替换成下面这样

    SET @xlog_return = (SELECT sys_eval(CONCAT(‘/usr/bin/php -f /home/wwwroot/1.php ‘,new.id)));   
    正在删除的ID

    SET @xlog_return = (SELECT sys_eval(CONCAT(‘/usr/bin/php -f /home/wwwroot/1.php ‘,old.id)));   

感觉适合少数据量并发不高的数据同步更新操作,脚本可以用shell python 脚本 在数据更新后 查询一次数据库 再通过sql将数据同步至sql server

参考mysql触发器调用外部脚本_shaynerain的博客-CSDN博客_mysql触发器调用外部程序

方式二 使用数据同步工具

工具有Canal、Maxwell、Databus、DTS等 监听mysql binlog日志实现数据同步,

  1. Canal 使用自定义client 实时同步至sqlserver 

    1. 在mysql里创建canal 用户 也可以使用已有的账号 root等 
      create user 'canal'@'%' identified by 'Canal@123456';
      -- 授权 *.*表示所有库
      grant SELECT, REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'canal'@'%' identified by 'Canal@123456';
    2. 开起mysql 的binlog 日志 

      1. [mysqld]
        # 打开binlog
        log-bin=mysql-bin
        # 选择ROW(行)模式 默认是mix模式 有事务只能用ROW 和mix
        binlog-format=ROW
        # 配置MySQL replaction需要定义,不要和canal的slaveId重复
        server_id=1

            3.安装canal server 

               参考 Canal原理及其使用_Quinto0的博客-CSDN博客_canal

           4. 配置好后编写 java canal client的代码 将canal server的数据拉取下来后解析message

一条一条的消费数据 ,另外配置sql server数据库 修改一些数据库方言 进行ddl dml操作 ,该方式只需要安装canal的服务端 另外再运行一个客户端 ,自定义消费支持性会好点,适合有要求,消费后ack,适合数据量不大的项目但 数据性要求高的项目,如果数据要求严谨 可以开定时任务去批量校验两边的数据是否一致

        2. 自定义kafka 消费者 ,先安装canal  debezium maxwell 等mysql 日志监听工具 ,再用服务区安装kafka server ,再数据同步工具上配置好kafka的信息地址,最后再开发好kafka client 消费kafka队列中的数据 kafka canal 等工具都可以分布式安装 负载均衡 支持容灾扩容等,适合数据量很大的项目同步

 

             

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值