为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【TiDB 版本】TIDB 4.0.11 DM 2.0.1
【问题描述】MGR 5.7 MGR 单主,如果发送切换,这种场景,DM还支持数据正常同步吗???
为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【TiDB 版本】TIDB 4.0.11 DM 2.0.1
【问题描述】MGR 5.7 MGR 单主,如果发送切换,这种场景,DM还支持数据正常同步吗???
理论上可以的。可以测试一下,如有问题及时反馈。
看下日志,enable-gtid 参数是否生效了 ?
首先这个参数enable-gtid: true 是只配置到worker配置文件中的吗????
日志显示配置是false, 没配置成功。
增加enable-gtid: true 到worker中,并重启worker也没用。
https://docs.pingcap.com/zh/tidb-data-migration/dev/manage-source#查看数据源配置示例
使用上面命令查看下数据源当前的配置是否开启 gtid ?
这个具体操作方式是什么 ?
不好意思,我的这个DM还是 2.0.0的版本, 不支持get-config
但是我上游mysql是 mgr配置,肯定是启用了的gtid的, 不然也获取不到gtid信息
"sync": {
"totalEvents": "0",
"totalTps": "0",
"recentTps": "0",
"masterBinlog": "(3306-binlog.000010, 920)",
"masterBinlogGtid": "b639a283-5453-47f2-af5e-fb2bc85bdaa6:1-628:1000004-1000062",
"syncerBinlog": "(3306-binlog.000010, 920)",
"syncerBinlogGtid": "",
"blockingDDLs": [
tarting component dmctl
: /home/tidb/.tiup/components/dmctl/v2.0.0/dmctl/dmctl --master-addr 10.200.25.254:8261 operate-source show
{
“result”: true,
“msg”: “”,
“sources”: [
{
“result”: true,
“msg”: “”,
“source”: “mysql-replica-01”,
“worker”: “dm-10.200.25.254-8262”
},
{
“result”: true,
“msg”: “”,
“source”: “mysql-replica-02”,
“worker”: “dm-10.200.25.227-8262”
},
{
“result”: true,
“msg”: “”,
“source”: “mysql-replica-03”,
“worker”: “dm-10.200.25.254-8263”
},
{
“result”: true,
“msg”: “”,
“source”: “mysql-replica-04”,
“worker”: “dm-10.200.25.254-8265”
}
]
}
enable-gtid: true 原来是false,后面我是添加到数据源配置文件中的。
添加之后然后重启的 dm-worker 吗 ? 如果是这样操作的话,操作有问题。
可以 使用 operate-source stop 先停掉该 source,修改 source.yaml 的 enable-gtid 之后,执行 operate-source create 重新创建即可。
另外 DM 2.0.0 有一些已知问题,建议升级到 2.0.1
[tidb@localhost ~]$ tiup dmctl --master-addr 10.200.25.254:8261 operate-source stop mysql-replica-03
Found dmctl newer version:
The latest version: v2.0.1
Local installed version: v2.0.0
Update current component: tiup update dmctl
Update all components: tiup update --all
Starting component dmctl
: /home/tidb/.tiup/components/dmctl/v2.0.0/dmctl/dmctl --master-addr 10.200.25.254:8261 operate-source stop mysql-replica-03
{
“result”: false,
“msg”: “[code=46010:class=dm-master:scope=internal:level=medium], Message: source with name mysql-replica-03 need to operate with tasks [mgr] exist”,
“sources”: [
]
}
[tidb@localhost ~]$ tiup dmctl --master-addr 10.200.25.254:8261 operate-source stop /home/tidb/mgr.yaml
Found dmctl newer version:
The latest version: v2.0.1
Local installed version: v2.0.0
Update current component: tiup update dmctl
Update all components: tiup update --all
Starting component dmctl
: /home/tidb/.tiup/components/dmctl/v2.0.0/dmctl/dmctl --master-addr 10.200.25.254:8261 operate-source stop /home/tidb/mgr.yaml
{
“result”: false,
“msg”: “[code=46010:class=dm-master:scope=internal:level=medium], Message: source with name mysql-replica-03 need to operate with tasks [mgr] exist”,
“sources”: [
]
}
stop停止不了,还跟任务配置文件有关系么, 我吧worker都停止了在stop都不行
有关系,先停掉
感谢,GTID已经开启。
但是又发现一个情况, 之前模式不是采用GTID模式的,现在一经开启,DM好像又从最初的数据开始同步。
1 这种情况要从原来的binlog file模式切换到gtid 模式,而且数据要继续原来的同步,是不是会有问题??
2 bingfile pos 与gtid都开启了,DM会怎么选择了采用那个方式呢??
修改过 source-id 吗? 修改步骤辛苦描述下。
enable-gtid 如果是开了的话,优先采用 gtid 方式。
DM好像又从最初的数据开始同步
修改过 source-id 吗? 修改步骤辛苦描述下。
我按照你给的步骤,已经启用了gtid,然后我启动同步,就报错了,同步就从第一个gtid开始同步,这样就报错了。source-id 是没有修改过的。
切换数据源方式,必须要启用GTID 吗???
目前测试的情况汇总:
1 从非GTID模式切换到GTID模式同步,有异常,数据同步重复报错,如果期间有表结构变更的情况下,同步因数据类型不一致而报错。
2 那这样的情况下,是不是一开始就要启用gtid。
步骤如下:
1 非gtid模式开启同步,创建表t1 ,数据同步正常
CREATE TABLE t1
(
id1
int(11) NOT NULL,
id2
varchar(6) DEFAULT NULL,
PRIMARY KEY (id1
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
2 非GTID模式下,删除表,重建了一样的表名,但是其中一个字段有varchar 改成了datetime字段,,这同步也是正常的。
CREATE TABLE t1
(
id1
int(11) NOT NULL,
id2
datetime DEFAULT NULL,
PRIMARY KEY (id1
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
3 worker配置文件启用gtid,启用成功
4 GTID模式下,启动同步任务,报错
Starting component dmctl
: /home/tidb/.tiup/components/dmctl/v2.0.0/dmctl/dmctl --master-addr 10.200.25.254:8261 query-status mgr
{
“result”: true,
“msg”: “”,
“sources”: [
{
“result”: true,
“msg”: “”,
“sourceStatus”: {
“source”: “mysql-replica-03”,
“worker”: “dm-10.200.25.254-8262”,
“result”: null,
“relayStatus”: null
},
“subTaskStatus”: [
{
“name”: “mgr”,
“stage”: “Paused”,
“unit”: “Sync”,
“result”: {
“isCanceled”: false,
“errors”: [
{
“ErrCode”: 10006,
“ErrClass”: “database”,
“ErrScope”: “not-set”,
“ErrLevel”: “high”,
“Message”: “startLocation: [position: (, 0), gtid-set: ], endLocation: [position: (3306-binlog.000005, 1955), gtid-set: b639a283-5453-47f2-af5e-fb2bc85bdaa6:1-6]: execute statement failed: REPLACE INTO testdb
.t1
(id1
,id2
) VALUES (?,?)”,
“RawCause”: “Error 1366: Incorrect datetime value: ‘hu’ for column ‘id2’ at row 1”,
“Workaround”: “”
},
{
“ErrCode”: 10006,
“ErrClass”: “database”,
“ErrScope”: “not-set”,
“ErrLevel”: “high”,
“Message”: “startLocation: [position: (, 0), gtid-set: ], endLocation: [position: (3306-binlog.000005, 3727), gtid-set: b639a283-5453-47f2-af5e-fb2bc85bdaa6:1-14]: execute statement failed: REPLACE INTO testdb
.t1
(id1
,id2
) VALUES (?,?)”,
“RawCause”: “Error 1366: Incorrect datetime value: ‘bb’ for column ‘id2’ at row 1”,
“Workaround”: “”
}
],
“detail”: null
},
“unresolvedDDLLockID”: “”,
“sync”: {
“totalEvents”: “5”,
“totalTps”: “0”,
“recentTps”: “0”,
“masterBinlog”: “(3306-binlog.000011, 90584)”,
“masterBinlogGtid”: “b639a283-5453-47f2-af5e-fb2bc85bdaa6:1-1059:1000004-1000062”,
“syncerBinlog”: “(3306-binlog.000005, 1750)”,
“syncerBinlogGtid”: “b639a283-5453-47f2-af5e-fb2bc85bdaa6:1-6”,
“blockingDDLs”: [
],
“unresolvedGroups”: [
],
“synced”: false,
“binlogType”: “remote”
relay_log 开了吗? 我尝试复现下。
我没有配置个参数,都是默认的,SOURCE文件如下:
source-id: “mysql-replica-03”
enable-gtid: true
from:
host: “10.200.25.92”
user: “tidbslave”
password: “7URoDXK680LE+ClwMOrCt0Asgvsm”
port: 3306
TASK 文件如下:
在操作过程中(DM 已经升级到2.0.1)
tiup dmctl --master-addr 10.200.25.254:8261 stop-task mgr
tiup dmctl --master-addr 10.200.25.254:8261 operate-source stop /home/tidb/mgr.yaml
{
“result”: false,
“msg”: “[code=10001:class=database:scope=not-set:level=high], Message: database driver error, RawCause: dial tcp 10.200.25.92:3306: connect: no route to host, Workaround: Please check the database connection and the database config in configuration file.”,
“sources”: [
]
}
上面第二个语句执行有时候还报错,提示IP:port不能连接,过一会再次操作就正常。
tiup dmctl --master-addr 10.200.25.254:8261 stop-task mgr
tiup dmctl --master-addr 10.200.25.254:8261 operate-source stop /home/tidb/mgr.yaml
tiup dmctl --master-addr 10.200.25.254:8261 operate-source create /home/tidb/mgr.yaml
这三个步骤有问题吗
这个语句跑了不通过,假设机器10.200.25.92 宕机,不能修复启动。
tiup dmctl --master-addr 10.200.25.254:8261 operate-source stop /home/tidb/mgr.yaml
{
“result”: false,
“msg”: “[code=10001:class=database:scope=not-set:level=high], Message: database driver error, RawCause: dial tcp 10.200.25.92:3306: connect: connection refused, Workaround: Please check the database connection and the database config in configuration file.”,
“sources”: [
]
}
10.200.25.92:3306 这个实例假设是故障的实例,是我要移除的。
如果这个步骤不通过,那么create会报错类似这样
, Message: source config with ID mysql-replica-03 already exists",
operate-source show
的结果麻烦给一下。
先回顾下你这个帖子的问题,主从切换后,DM 同步是否支持。
支持的。前面的所有问题都是基于你这边操作是没有开启 gtid。
这个后面跟 yaml 文件有点问题,改成后面跟 source-id 就可以成功 stop 掉。
tiup dmctl --master-addr 10.200.25.254:8261 operate-source stop "source-id"