DM同步时,没办法对下游设置SetConnMaxLifetime,偶尔会因为下游连接中断,出现误报

现象

线上DM任务偶尔会出现DM_sync_process_exists_with_error的告警,排查后发现基本都是两种错误:
Message: database driver, RawCause: driver: bad connectionexecute statement failed: begin\" RawCause:\"invalid connection\"

原因

下游TiDB设置了 wait_timeout=600,如果上游MySQL的更新频率很低,比如半个小时才有一次更新,那么DM的syncer连接会因为长时间处于sleep状态被下游TiDB给kill掉,如果这个时候有更新了,就会触发这个报错。

建议修复方法

在DM的任务配置里加上参数,允许用户自主设置Golang的连接参数(可以只放开ConnMaxLifetime)。或者直接内部重试,而不返回报错。主要是时不时的DM_sync_process_exists_with_error报错,实在太烦了。

另外DM_sync_process_exists_with_error这个名字也是个笔误,应该是exits_with_error

数据一致性会不会有问题?要是提示告警后不影响数据同步还能接受

感谢反馈,我们会在 https://github.com/pingcap/tiflow/issues/7376 记录修复进度

设置一个固定值无法应对不确定时长的空闲,我们会从别的角度修复该问题

1 个赞

在dump阶段也是一样,备份时候如果有大表,导致有连接长时间没被用到,也会出现driver: bad connection的错误,导致任务失败

新版本应该修复了 dump 阶段的问题。您使用的 DM 版本是?

6.1.1

那确实不应该,麻烦传一下日志

类似这种的,隔一段时间就会出现一次,导致task失败。后边是改了MySQL的wait_timeout参数,才正常导出了

[2022/10/17 14:56:59.918 +08:00] [INFO] [conn.go:70] ["cannot execute query"] [task=clear_task] [unit=dump] [retryTime=1] [sql="SHOW COLUMNS FROM `ying99_fundtxn`.`campain_discount`"] [args=null] [error="driver: bad connection"]
[2022/10/17 14:57:00.603 +08:00] [ERROR] [dumpling.go:152] ["dump data exits with error"] [task=clear_task] [unit=dump] ["cost time"=16m55.166129053s] [error="ErrCode:32001 ErrClass:\"dump-unit\" ErrScope:\"internal\" ErrLevel:\"high\" Message:\"mydumper/dumpling runs with error, with output (may empty): \" RawCause:\"sql: SHOW COLUMNS FROM `ying99_fundtxn`.`campain_discount`: driver: bad connection\" "]

麻烦传一下完整日志

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。