为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
- 【TiDB 版本】:tidb4.0.8 ,mysql 5.7.27 dm:2.0nightly
- 【问题描述】:利用dm工具全量拿mysql数据,发现mysql 和tidb 两边enum类型数据不一致:
具体如:
is_credit_control
enum(‘0’,‘1’) DEFAULT ‘0’
mysql表中得此字段是:0,tidb表中此字段得值是1
tidb对mysqlenum 类型得支持是不是不太友好,有没有方法解决
若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。
北京大爷
(北京大爷)
2
这个情况还是和上次一样吗? 在老表中添加 新列
Mysql 此字段是 0 tidb 中是 1
是这个意思吗?
我这边模拟测试下。
和上次不一样,这个是历史数据,,全量从mysql拿到tidb,同一条id得 is_credit_control
enum(‘0’,‘1’) 值不一样
表得数据量一共120万左右,is_credit_control字段值不同得有几十万
北京大爷
(北京大爷)
4
如果通过 数据导入有两个方法可以确认下
1.查看导入时的源数据同 ID 的值是否与 tidb 中的值是否一致。
2.如果 GC 的 lift time 比较长 可以通过查看 MVCC 的历史版本确认数据是否有更新。
curl http://{TiDBIP}:10080/mvcc/key/{db}/{table}/{handle}
handleid 是 应为 int 型主键 id
“key”: “7480000000000012955F729081A8ACB181D00C”,
“region_id”: 158473,
“value”: {
“info”: {
“writes”: [
{
“start_ts”: 421761290872029209,
“commit_ts”: 421761290898243591,
“short_value”: “gAAIAAAAAgMEBQYHCAoNAA4ADwAdACUAKwAzADQAUEFZMTkxMDMwMDAxMQICVEsxOTEwMjAwMTA3MDEAAACW2nykGemZiOasowAAAColM6gZAA==”
},
{
“start_ts”: 421555157087551497,
“commit_ts”: 421555157952626689,
“short_value”: “gAAIAAAAAgMEBQYHCAoNAA4ADwAdACUAKwAsAC0AUEFZMTkxMDMwMDAxMQIBVEsxOTEwMjAwMTA3MDEAAACW2nykGemZiOasowAA”
}
]
}
}
北京大爷
(北京大爷)
7
{
“start_ts”: 421555157087551497,
“commit_ts”: 421555157952626689,
“short_value”: “gAAIAAAAAgMEBQYHCAoNAA4ADwAdACUAKwAsAC0AUEFZMTkxMDE4MDAwMQIBVEsxOTA5MjcwMDIzNjEAAADXCGWkGemZiOasowAA”
}
这条是 12 月 16 日的数据
解析 base64 short_value 如下
%+,-PAY1910180001TK190927002361e陈欣
可以确认下数据是否可以对上
从 整个 MVCC 来看 12.16 一次数据修改 、12.25 二次数据修改
是得,发现数据有不一致,手动做了一次修复,, ,请问你这个是怎么看具体得数据内容呢
可能是上下游sql_mode不一致,查看上下游sql_mode是否包含STRICT_TRANS_TABLES
北京大爷
(北京大爷)
11
short_value里面是 bas64 的数据 ,有在线的 Base64 解码工具