I created a task:
curl -X POST -H "Content-Type: application/json" -d '{
"name": "ccr_test_210_210",
"src": {
"host": "10...228",
"port": "9030",
"thrift_port": "9020",
"user": "root",
"password": "",
"database": "tpcds_3",
"table": ""
},
"dest": {
"host": "10...229",
"port": "9030",
"thrift_port": "9020",
"user": "root",
"password": "**",
"database": "tpcds_3",
"table": ""
}
}' http://10.*.*.228:9190/create_ccr
Regarding Syncer high availability:
Syncer high availability relies on MySQL. If MySQL is used as the backend storage, Syncer can detect other Syncers. If one crashes, the others will take over its tasks.
I used MySQL as the backend storage and started two CCR Syncers on nodes 228 and 229. Then I stopped the Syncer on node 228. The Syncer on node 229 should take over 228's tasks, but the logs on node 229 reported an error(WARN). Can you tell me why?
[2026-01-15 15:05:32.399] WARN job sync failed, job: ccr_test_210_210, err: [normal] invalid binlog status type: ANALYSIS_ERROR, msg: errCode = 2, detailMessage = Access denied for user 'root@null' (using password: YES)
github.com/selectdb/ccr_syncer/pkg/ccr.(Job).getNextBinlogs
//ccr-syncer-2.1.10-rc06/pkg/ccr/job_pipeline.go:496
github.com/selectdb/ccr_syncer/pkg/ccr.(Job).pipelineSync
//ccr-syncer-2.1.10-rc06/pkg/ccr/job_pipeline.go:243
github.com/selectdb/ccr_syncer/pkg/ccr.(Job).incrementalSync
//ccr-syncer-2.1.10-rc06/pkg/ccr/job.go:3736
github.com/selectdb/ccr_syncer/pkg/ccr.(Job).dbSync
//ccr-syncer-2.1.10-rc06/pkg/ccr/job.go:3888
github.com/selectdb/ccr_syncer/pkg/ccr.(Job).sync
//ccr-syncer-2.1.10-rc06/pkg/ccr/job.go:3936
github.com/selectdb/ccr_syncer/pkg/ccr.(Job).run
//ccr-syncer-2.1.10-rc06/pkg/ccr/job.go:3995
github.com/selectdb/ccr_syncer/pkg/ccr.(Job).Run
//ccr-syncer-2.1.10-rc06/pkg/ccr/job.go:4123
github.com/selectdb/ccr_syncer/pkg/ccr.(JobManager).runJob.func1
//ccr-syncer-2.1.10-rc06/pkg/ccr/job_manager.go:184
runtime.goexit
/usr/lib/golang/src/runtime/asm_amd64.s:1598 job=ccr_test_210_210 line=ccr/job.go:4000
I created a task:
curl -X POST -H "Content-Type: application/json" -d '{
"name": "ccr_test_210_210",
"src": {
"host": "10...228",
"port": "9030",
"thrift_port": "9020",
"user": "root",
"password": "",
"database": "tpcds_3",
"table": ""
},
"dest": {
"host": "10...229",
"port": "9030",
"thrift_port": "9020",
"user": "root",
"password": "**",
"database": "tpcds_3",
"table": ""
}
}' http://10.*.*.228:9190/create_ccr
Regarding Syncer high availability:
Syncer high availability relies on MySQL. If MySQL is used as the backend storage, Syncer can detect other Syncers. If one crashes, the others will take over its tasks.
I used MySQL as the backend storage and started two CCR Syncers on nodes 228 and 229. Then I stopped the Syncer on node 228. The Syncer on node 229 should take over 228's tasks, but the logs on node 229 reported an error(WARN). Can you tell me why?
[2026-01-15 15:05:32.399] WARN job sync failed, job: ccr_test_210_210, err: [normal] invalid binlog status type: ANALYSIS_ERROR, msg: errCode = 2, detailMessage = Access denied for user 'root@null' (using password: YES)
github.com/selectdb/ccr_syncer/pkg/ccr.(Job).getNextBinlogs
//ccr-syncer-2.1.10-rc06/pkg/ccr/job_pipeline.go:496
github.com/selectdb/ccr_syncer/pkg/ccr.(Job).pipelineSync
//ccr-syncer-2.1.10-rc06/pkg/ccr/job_pipeline.go:243
github.com/selectdb/ccr_syncer/pkg/ccr.(Job).incrementalSync
//ccr-syncer-2.1.10-rc06/pkg/ccr/job.go:3736
github.com/selectdb/ccr_syncer/pkg/ccr.(Job).dbSync
//ccr-syncer-2.1.10-rc06/pkg/ccr/job.go:3888
github.com/selectdb/ccr_syncer/pkg/ccr.(Job).sync
//ccr-syncer-2.1.10-rc06/pkg/ccr/job.go:3936
github.com/selectdb/ccr_syncer/pkg/ccr.(Job).run
//ccr-syncer-2.1.10-rc06/pkg/ccr/job.go:3995
github.com/selectdb/ccr_syncer/pkg/ccr.(Job).Run
//ccr-syncer-2.1.10-rc06/pkg/ccr/job.go:4123
github.com/selectdb/ccr_syncer/pkg/ccr.(JobManager).runJob.func1
//ccr-syncer-2.1.10-rc06/pkg/ccr/job_manager.go:184
runtime.goexit
/usr/lib/golang/src/runtime/asm_amd64.s:1598 job=ccr_test_210_210 line=ccr/job.go:4000