dm同步失败

你好

日志中出现大量 connection is already closed bad connection 请检查上下游数据库的状态是否正常,tidb 是否出现 oom,dmesg -T | grep -i oom

[root@datastore3 log]# tail -f dm-worker-stderr.log
[mysql] 2020/04/20 06:25:32 connection.go:99: invalid connection
[mysql] 2020/04/20 06:25:32 connection.go:99: invalid connection
[mysql] 2020/04/20 06:25:32 connection.go:99: invalid connection
[mysql] 2020/04/20 06:25:32 connection.go:99: invalid connection
[mysql] 2020/04/20 06:25:32 connection.go:99: invalid connection
[mysql] 2020/04/20 06:25:52 connection.go:99: invalid connection
[mysql] 2020/04/20 06:25:52 connection.go:99: invalid connection
[mysql] 2020/04/20 06:25:52 connection.go:99: invalid connection
[mysql] 2020/04/20 06:25:52 connection.go:99: invalid connection
[mysql] 2020/04/20 06:25:52 connection.go:99: invalid connection

帮忙看一下发现这个日志日志无效的链接

是否和 inventory.ini 配置文件的有关系?之前你们说这个gtid 要关闭,我这个没关,dm-worker ,以及task_advanced.yaml 这里面都禁用gtid了

   [dm_worker_servers]
    dm-worker1 ansible_host=10.1.0.X source_id="mysql-replica-boe" server_id=353306 relay_binlog_name="mysql-bin.006834" enable_gtid=true relay_binlog_gtid="704aa4cd-eaab-11e9-a391-ac1f6b41525a:1-890944214,1961de6e-db49-11e9-9eb7-ac1f6b41525a:1-2639441422,22863285-e03a-11e9-a452-ac1f6b403494:1-8454425" mysql_host=10.1.0.X mysql_user=tidb mysql_password='5rb+XXXXXX18g==' mysql_port=3306

inventory.ini

  ## DM modules
    [dm_master_servers]
    dm_master ansible_host=10.1.0.87 deploy_dir=/data/dm

    [dm_worker_servers]
    dm-worker1 ansible_host=10.1.0.95 source_id="mysql-replica-boe" server_id=353306 relay_binlog_name="mysql-bin.006834" enable_gtid=true relay_binlog_gtid="704aa4cd-eaab-11e9-a391-ac1f6b41525a:1-890944214,1961de6e-db49-11e9-9eb7-ac1f6b41525a:1-2639441422,22863285-e03a-11e9-a452-ac1f6b403494:1-8454425" mysql_host=10.1.0.34 mysql_user=tidb mysql_password='5rbXXXXXXXIh18g==' mysql_port=3306
    [dm_portal_servers]
    dm_portal ansible_host=10.1.0.87

    ## Monitoring modules
    [prometheus_servers]
    prometheus ansible_host=10.1.0.87

    [grafana_servers]
    grafana ansible_host=10.1.0.87

    [alertmanager_servers]
    alertmanager ansible_host=10.1.0.87

    ## Global variables
    [all:vars]
    cluster_name = dm-cluster

    ansible_user = tidb

    dm_version = v1.0.4

    deploy_dir = /data/dm

    grafana_admin_user = "XXXX"
    grafana_admin_password = "XXXX" 

dm-master.toml

# Master Configuration.
log-file = "dm-master.log"
master-addr = ":8261"

[[deploy]]
source-id = "mysql-replica-boe"
dm-worker = "10.1.0.95:8262"

dm-worker.toml

# Worker Configuration.

# Log configuration.
log-level = "info"
log-file = "dm-worker.log"

server-id = 353306

source-id = "mysql-replica-boe"

flavor = "mysql"

relay-dir = "./relay_log"

enable-gtid = true

relay-binlog-name = "mysql-bin.006834"
#relay-binlog-pos = "13846233"
relay-binlog-gtid = "1961de6e-db49-11e9-9eb7-ac1f6b41525a:1-2639441422,22863285-e03a-11e9-a452-ac1f6b403494:1-8454425,704aa4cd-eaab-11e9-a391-ac1f6b41525a:1-890826277"

#charset of DSN of source mysql/mariadb instance
charset = ""
meta-dir = ""

[from]
host = "10.1.0.34"
user = "tidb"
password = "5rb+uXXXXXXXIh18g=="
port = 3306

#relay log purge strategy
[purge]
interval = 3600
expires = 0
remain-space = 15

# Task status checker.
[checker]
check-enable = true
backoff-rollback = "5m"
backoff-max = "5m"

task_advanced.yaml

name: mysql-replica-boe
task-mode: incremental
is-sharding: true
meta-schema: "dm_meta"
remove-meta: false
enable-heartbeat: false
online-ddl-scheme: "pt"
ignore-checking-items: ["table_schema"]

target-database:
  host: "10.1.0.5"
  port: 4000
  user: "root"
  password: "XXXX"

black-white-list:
  bw-rule-1:
    do-dbs: ["infXXXy_boe", "warningXXXX_boe"]

mydumpers:
  global: 
    mydumper-path: "./bin/mydumper"
    threads: 4 
    chunk-filesize: 64
    skip-tz-utc: true
    extra-args: "--no-locks"

loaders:
  global: 
    pool-size: 16
    dir: "./dumped_data"

syncers:
  global:
    worker-count: 1
    batch: 1
    safe-mode: true


mysql-instances:
  -
    source-id: "mysql-replica-boe"
    meta:
      binlog-name: mysql-bin.006834
      #binlog-pos: 13846233
      binlog-gtid: "1961de6e-db49-11e9-9eb7-ac1f6b41525a:1-2639441422,22863285-e03a-11e9-a452-ac1f6b403494:1-8454425,704aa4cd-eaab-11e9-a391-ac1f6b41525a:1-890826277"

    black-white-list: "bw-rule-1"
    mydumper-config-name: "global"
    loader-config-name: "global"
    syncer-config-name: "global"

    mydumper-thread: 4
    loader-thread: 16
    syncer-thread: 16

您好: 1. inventory.ini里,如果配置了gtid,不要再配置binlog name。修改后,重启task 多谢。

现在提示这个错误:

之前已经把 日志文件都拉取到relay_log 目录下了,会不会受这个gtid 影响要重新拉取Binlog ? 但是上游mysql的binlog 已经过期了,部分日志文件已经没了

{
    "result": false,
    "msg": "[code=20003:class=dm-master:scope=internal:level=medium] decode task config failed: yaml: unmarshal errors:\
  line 46: field binlog-gtid not found in type config.Meta\
github.com/pingcap/dm/pkg/terror.(*Error).Delegate\
\t/home/jenkins/agent/workspace/build_dm_master/go/src/github.com/pingcap/dm/pkg/terror/terror.go:267\
github.com/pingcap/dm/dm/config.(*TaskConfig).Decode\
\t/home/jenkins/agent/workspace/build_dm_master/go/src/github.com/pingcap/dm/dm/config/task.go:319\
github.com/pingcap/dm/dm/master.(*Server).generateSubTask\
\t/home/jenkins/agent/workspace/build_dm_master/go/src/github.com/pingcap/dm/dm/master/server.go:1851\
github.com/pingcap/dm/dm/master.(*Server).StartTask\
\t/home/jenkins/agent/workspace/build_dm_master/go/src/github.com/pingcap/dm/dm/master/server.go:230\
github.com/pingcap/dm/dm/pb._Master_StartTask_Handler\
\t/home/jenkins/agent/workspace/build_dm_master/go/src/github.com/pingcap/dm/dm/pb/dmmaster.pb.go:2355\
google.golang.org/grpc.(*Server).processUnaryRPC\
\t/go/pkg/mod/google.golang.org/grpc@v1.25.1/server.go:1007\
google.golang.org/grpc.(*Server).handleStream\
\t/go/pkg/mod/google.golang.org/grpc@v1.25.1/server.go:1287\
google.golang.org/grpc.(*Server).serveStreams.func1.1\
\t/go/pkg/mod/google.golang.org/grpc@v1.25.1/server.go:722\
runtime.goexit\
\t/usr/local/go/src/runtime/asm_amd64.s:1357",
    "workers": [
    ]
}

看起来上游已经没有这个位点的binlog了,可以改为一个当前存在的位点信息。