mysql之DTS的那些事
最近才考虑数据库迁移,想起了之前做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的那些事的更多相关文章
- mysql编码的那点事
Mysql编码问题 在php页面可以向mysql插入英文字符,但就是不能插入中文字符,在cmd客户端也可从插入,这是困扰我两天的问题. 在网上找了很多资料,最终确定了是字符编码这个地方出现了问题,首 ...
- mysql分库分表那些事
为什么使用分库分表? 如下内容,引用自 Sharding Sphere 的文档,写的很大气. <ShardingSphere > 概念 & 功能 > 数据分片> 传统的 ...
- MySQL 关于存储过程那点事
存储例程是存储在数据库服务器中的一组sql语句,通过在查询中调用一个指定的名称来执行这些sql语句命令. 简介 SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完 ...
- MySQL 关于索引那点事
索引 其实数据库中的数据是按页存放的其实索引也是按页存放的所以本质上索引也占硬盘空间(以最小的消耗,换取最大的利益) 索引是一种有效组合数据的方式!为快速查找到指定记录做铺垫 目的就是快速或者某个记录 ...
- 安装MySQL后要做的事
安装MySQL后要修改的配置 [mysql] default-character-set=utf8 [mysqld] # 关闭域名反解 skip_name_resolve # 每表一个独立的表空间文件 ...
- hadoop与mysql数据库的那点事
转眼间已经接触了hadoop两周了,从之前的极力排斥到如今的有点喜欢,刚开始被搭建hadoop开发环境搞得几乎要放弃,如今学会了编写小程序,每天都在成长一点挺好的,好好努力,为自己的装备库再填 ...
- 关于MySQL AUDIT(审计)那点事
2017年06月02日MySQL社区版本最新版为MySQL_5.7.18,但是该版本不带AUDIT功能(MySQL Enterprise Edition自带AUDIT功能),因此需要加载plugin( ...
- MySQL 备份数据那点事
mysqldump 什么是 mysqldump ? mysqldump 是 MySQL 用于执行逻辑备份的一款工具,可以根据原始数据库对象以及表的定义和数据来生成一系列可以被执行的 SQL 语句. 通 ...
- [PHP][mysql] 需要知道的那些事
就是想总结一下自己不会的! sql: 1.在SQL语句中出现AS,是起别名的意思! 例子:select a.* from table_1 as a就是给table_1起个别名叫a,因此前面就可以使用a ...
随机推荐
- mysql第四篇:数据操作之单表查询
单表查询 一.简单查询 -- 创建表 DROP TABLE IF EXISTS `person`; CREATE TABLE `person` ( `id` ) NOT NULL AUTO_INCRE ...
- 使用Spring Data Mongodb的MongoRepository类进行增删改查
Spring Data Mongodb提供一套快捷操作 mongodb的方法,创建Dao,继承MongoRepository,并指定实体类型和主键类型. public interface CmsPag ...
- Python Email发送,通知业务完成
Email 发送 #!/usr/bin/python # -*- coding: UTF-8 -*- import base64 import smtplib from email.mime.text ...
- [安洵杯 2019]easy_web
0x00 知识点 md5强类型的绕过 方法比较固定: POST: a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%d ...
- 18 12 07 MySQL 与python 的交互
---恢复内容开始--- python 中 关于SQL语句的查询 from pymysql import * # 由于只能用了一个MySQL 的包所以全部引进 def main(): # 创建Conn ...
- 通过Android的API对Sqlite数据库进行操作
一.增删改查 增 改 查 删 这是删除之前 删除三条 Dao.java package com.example.databasedemo; import android.content.Content ...
- java AES加解密
AES加解密工具类 package com.yan.demo; import org.apache.commons.lang3.StringUtils; import sun.misc.BASE64D ...
- (转)mysql语句
一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...
- springMVC源码阅读-通过画图理解一个请求生命周期(十二)
- 吴裕雄--天生自然 JAVASCRIPT开发学习:Date(日期) 对象
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...