最近才考虑数据库迁移,想起了之前做DTS踩过的那些坑。

基于数据库迁移,比如从源A库迁移到源B库,包括但不限于数据库上云。

数据库迁移方案有两种场景:

(1)、停机迁移方案

这种方案是允许停服的场景,通过mysqldump就搞定了,就不说了。

(2)、在线不停机方案

这种场景方案中,我们采用先在线整库迁移,然后在通过binlog在线DTS对齐数据。

步骤如下:

1、源数据库采用ROW模式,开启binlog权限

2、需要一个源库的全局schema查询用户,获取源数据库的schema同步到目标库

3、选取某个时间点的BINLOG OFFSET做标记,然后通过JDBC同步整个库表数据到目标库,直至完毕。

4、通过netty服务单线程读取源库BINLOG数据,从上一步标记的offset位置开始读取,读入kafka。

5、多线程消费kafka数据到目标库,直至同步到最新的binlog数据,迁移完成。

第二种方案中遇到的那些坑:

1、最好选取源库的一个只读库做为同步数据的源库,这样不影响源库线上业务

2、多线程消费kafka时,容易出现binlog顺序错乱的问题,目前采用按表写partition的方式,指定partitions消费,避免顺序错乱,但带来的新问题就是kafka的各partitions数据倾斜问题。

3、目前解析binlog同步数据时,DDL和DML操作没有特殊分别处理,如果数据量比较 大时,DDL很容易超时,导致此DDL之后同步的binlog都有问题,需要重新同步

4、同步binlog时,指定时间窗口大小,记录同步时的binlog位置到zk上,如果需要重新同步数据,可能会导致一部分binlog重复同步。如果窗口过小,zk也扛不住

5、遇到没有主键或唯一性限制的表,重复同步,会导致数据重复

6、若遇到同步blob相关类型时,若二进制数据过大,可能导致同步失败

7、同步服务的部署问题,源库和目标库都需要开公网IP。

8、同步服务的效率和源库、目标库的网络带宽,数据库配置息息相关

mysql之DTS的那些事的更多相关文章

  1. mysql编码的那点事

    Mysql编码问题  在php页面可以向mysql插入英文字符,但就是不能插入中文字符,在cmd客户端也可从插入,这是困扰我两天的问题. 在网上找了很多资料,最终确定了是字符编码这个地方出现了问题,首 ...

  2. mysql分库分表那些事

    为什么使用分库分表? 如下内容,引用自 Sharding Sphere 的文档,写的很大气. <ShardingSphere > 概念 & 功能 > 数据分片> 传统的 ...

  3. MySQL 关于存储过程那点事

    存储例程是存储在数据库服务器中的一组sql语句,通过在查询中调用一个指定的名称来执行这些sql语句命令. 简介 SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完 ...

  4. MySQL 关于索引那点事

    索引 其实数据库中的数据是按页存放的其实索引也是按页存放的所以本质上索引也占硬盘空间(以最小的消耗,换取最大的利益) 索引是一种有效组合数据的方式!为快速查找到指定记录做铺垫 目的就是快速或者某个记录 ...

  5. 安装MySQL后要做的事

    安装MySQL后要修改的配置 [mysql] default-character-set=utf8 [mysqld] # 关闭域名反解 skip_name_resolve # 每表一个独立的表空间文件 ...

  6. hadoop与mysql数据库的那点事

        转眼间已经接触了hadoop两周了,从之前的极力排斥到如今的有点喜欢,刚开始被搭建hadoop开发环境搞得几乎要放弃,如今学会了编写小程序,每天都在成长一点挺好的,好好努力,为自己的装备库再填 ...

  7. 关于MySQL AUDIT(审计)那点事

    2017年06月02日MySQL社区版本最新版为MySQL_5.7.18,但是该版本不带AUDIT功能(MySQL Enterprise Edition自带AUDIT功能),因此需要加载plugin( ...

  8. MySQL 备份数据那点事

    mysqldump 什么是 mysqldump ? mysqldump 是 MySQL 用于执行逻辑备份的一款工具,可以根据原始数据库对象以及表的定义和数据来生成一系列可以被执行的 SQL 语句. 通 ...

  9. [PHP][mysql] 需要知道的那些事

    就是想总结一下自己不会的! sql: 1.在SQL语句中出现AS,是起别名的意思! 例子:select a.* from table_1 as a就是给table_1起个别名叫a,因此前面就可以使用a ...

随机推荐

  1. js实现ctrl+v粘贴上传图片(兼容chrome,firefox,ie11)

    背景 我们或多或少都使用过各式各样的富文本编辑器,其中有一个很方便功能,复制一张图片然后粘贴进文本框,这张图片就被上传了,那么这个方便的功能是如何实现的呢? 原理分析 提取操作:复制=>粘贴=& ...

  2. 下载jQuery

    下载jQuery :https://jquery.com/download/ . 将下载好的文件放到项目中 引入到代码中 <script type="text/javascript&q ...

  3. Essay写作常见问题解析

    Essay是西方大学的主要考核形式之一.其理念是考核学生对资料信息的吸取和观点的输出能力.可是对于刚踏入美国大学的国际留学生来说,写Essay就像是一种水土不服.各种不适和挣扎是不可避免的!今天小编来 ...

  4. 实验吧Web-中-让我进去(Hash长度扩展攻击、加盐密码及Linux下hashpump的安装使用)

    打开网页,测试开始,注入费老大劲,看了大佬的blog才知道怎么干. bp抓包,观察发现cookie中有个source=0,在repeater中修改为source=1,然go一下,出来了一段源代码. $ ...

  5. 兼容iphonex底部那个

    @media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ra ...

  6. Hibernate(一)——入门

    1. 前言         Hibernate是一个开放源代码的ORM持久化框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库.         ...

  7. python try-except处理异常的常用方法分析

    在写python程序时遇到异常想要进行处理时,可以使用try-except来处理,例如: try: 语句1 语句2 . . 语句N except .........: do something ... ...

  8. 移动端H5开发遇到的问题及解决方法

    本篇文章给大家带来的内容是关于移动端H5开发遇到的问题及解决方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 微信分享签名错误invalid signature vue单页应用hi ...

  9. mysql出现 too many connections

    出现这个问题的原因网上大致都是说这三种 1.慢sql 2.大量持久性的连接 3.程序没有及时关闭连接 解决方式 mysql -u 账号 -p 输入密码 show processlist; kill掉s ...

  10. 吴裕雄--天生自然 JAVASCRIPT开发学习:Window - 浏览器对象模型

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...