5.常见问题 - squids-io/dts-doc GitHub Wiki
技术点问答
全量数据初始化是否需要临时空间中转数据?
不需要,dbmotion是直接fetch数据,写出到目标,程序会控制每次的fetch size和目标commit批次,仅维持很小的内存空间循环使用,直到迁移结束,整个迁移过程数据不落地
程序多线程并发是如何工作的?
可以利用--work-threads来控制服务协程数量,我们会对每张表进行行数预估,并根据--split-rowcount参数 进行数据分片,然后将分片分散交给多个协程去处理,并行参数您可以直接运行./dbmotion,参考WorkSetting部分
表数据是如何分片的?
利用表行数,--split-rowcount参数进行分片数量的估算,根据主键/唯一键进行分片where范围子句的生成,如果表字段不具备范围筛选条件,将不做分片
增量同步能否并行?
- Canal增量模式,我们是解析的canal event事件数据,根据主键/唯一键进行Event分发,并发复制,无主键表只支持单线程同步,目前也支持DDL,truncate自动同步
- Slave模式,是将目标转换成slave接入源端MySQL,会走原生态的master/slave并行复制
数据校验如何工作
- PT Check模式,需要走slave增量才能支持,源端库发送statement模式的DML语句,自动同步到目标库,两边的结果进行对比,会包括行数,内容CRC值的对比,该校验模式的好处是不停业务,在线校验
- CheckSum模式,无需slave增量支持,但是整个校验过程不能有数据更新,需要停止业务
如何访问QFusion上的MySQL
QFusion机器上部署dbmotion后,如果迁移时和QFusion集群vip网络不通,需要在dbmotion所在的物理节点调整网络策略,调整命令如下:
sysctl -a 2>/dev/null |grep "\.rp_filter = 1" |awk '{print $1}' |xargs -I {} sysctl -w {}=0
Unknown database 'dbmotion_web'
初始化失败,日志中报错有可能是由于VPN或者浏览器的安全设置导致的,如果是chrome,可以登录chrome://flags/#block-insecure-private-network-requests并设置Block insecure private network requests为disable。
用户迁移导致目标端管理系统失效
如果目标端root@‘localhost’是某管理系统的管理用户,迁移的时候,用户选择了root@'localhost',dbmotion会覆盖目标端的用户,可能导致数据库管理没法管理实例,从而导致高可用和监控的异常。
支持的数据类型
DataType | isSupport |
---|---|
tinyint | yes |
smallint | yes |
mediumint | yes |
int | yes |
bigint | yes |
integer | yes |
tinyint unsigned | yes |
smallint unsigned | yes |
mediumint unsigned | yes |
int unsigned | yes |
bigint unsigned | yes |
integer unsigned | yes |
double | yes |
float | yes |
decimal | yes |
numeric | yes |
char | yes |
varchar | yes |
tinytext | yes |
smalltext | yes |
mediumtext | yes |
text | yes |
longtext | yes |
tinyblob | yes |
smallblob | yes |
mediumblob | yes |
blob | yes |
bool | yes |
date | yes |
time | yes |
datetime | yes |
timestamp | yes |