栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

mysql 数据实时同步至sql server

mysql 数据实时同步至sql server

方式一 使用mysql插件udf
    下载 mysqludf https://github.com/mysqludf/lib_mysqludf_sys编译适合当前内核的源码 把lib_mysqludf_sys.so文件放到 mysql的安装目录中 lib/mysql/plugin/ 中在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';

    创建触发器 比如在插入式调用外部程序
    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日志实现数据同步,

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

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

      开起mysql 的binlog 日志 

        [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 等工具都可以分布式安装 负载均衡 支持容灾扩容等,适合数据量很大的项目同步

 

             

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/779452.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号