Maintain DM Clusters Using OpenAPI
DM provides the OpenAPI feature for easily querying and operating the DM cluster, which is similar to the feature of dmctl tools.
To enable OpenAPI, perform one of the following operations:
If your DM cluster has been deployed directly using binary, add the following configuration to the DM-master configuration file.
openapi = trueIf your DM cluster has been deployed using TiUP, add the following configuration to the topology file:
server_configs: master: openapi: true
You can use the APIs to perform the following maintenance operations on the DM cluster:
APIs for managing clusters
- Get the information of a DM-master node
- Stop a DM-master node
- Get the information of a DM-worker node
- Stop a DM-worker node
APIs for managing data sources
- Create a data source
- Get a data source
- Delete the data source
- Update a data source
- Enable a data source
- Disable a data source
- Get the information of a data source
- Get the data source list
- Start the relay-log feature for data sources
- Stop the relay-log feature for data sources
- Purge relay-log files that are no longer required
- Change the bindings between the data source and DM-workers
- Get the list of schema names of a data source
- Get the list of table names of a specified schema in a data source
APIs for managing replication tasks
- Create a replication task
- Get a replication task
- Delete a replication task
- Update a replication task
- Start a replication task
- Stop a replication task
- Get the information of a replication task
- Get the replication task list
- Get the migration rules of a replication task
- Get the list of schema names of the data source that is associated with a replication task
- Get the list of table names of a specified schema in the data source that is associated with a replication task
- Get the CREATE statement for schemas of the data source that is associated with a replication task
- Update the CREATE statement for schemas of the data source that is associated with a replication task
- Delete a schema of the data source that is associated with a replication task
The following sections describe the specific usage of the APIs.
API error message template
After sending an API request, if an error occurs, the returned error message is in the following format:
{
"error_msg": "",
"error_code": ""
}
From the above JSON output, error_msg
describes the error message and error_code
is the corresponding error code.
Get the information of a DM-master node
This API is a synchronous interface. If the request is successful, the information of the corresponding node is returned.
Request URI
GET /api/v1/cluster/masters
Example
curl -X 'GET' \
'http://127.0.0.1:8261/api/v1/cluster/masters' \
-H 'accept: application/json'
{
"total": 1,
"data": [
{
"name": "master1",
"alive": true,
"leader": true,
"addr": "127.0.0.1:8261"
}
]
}
Stop a DM-master node
This API is a synchronous interface. If the request is successful, the status code of the returned body is 204.
Request URI
DELETE /api/v1/cluster/masters/{master-name}
Example
curl -X 'DELETE' \
'http://127.0.0.1:8261/api/v1/cluster/masters/master1' \
-H 'accept: */*'
Get the information of a DM-worker node
This API is a synchronous interface. If the request is successful, the information of the corresponding node is returned.
Request URI
GET /api/v1/cluster/workers
Example
curl -X 'GET' \
'http://127.0.0.1:8261/api/v1/cluster/workers' \
-H 'accept: application/json'
{
"total": 1,
"data": [
{
"name": "worker1",
"addr": "127.0.0.1:8261",
"bound_stage": "bound",
"bound_source_name": "mysql-01"
}
]
}
Stop a DM-worker node
This API is a synchronous interface. If the request is successful, the status code of the returned body is 204.
Request URI
DELETE /api/v1/cluster/workers/{worker-name}
Example
curl -X 'DELETE' \
'http://127.0.0.1:8261/api/v1/cluster/workers/worker1' \
-H 'accept: */*'
Create a data source
This API is a synchronous interface. If the request is successful, the information of the corresponding data source is returned.
Request URI
POST /api/v1/sources
Example
curl -X 'POST' \
'http://127.0.0.1:8261/api/v1/sources' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"source_name": "mysql-01",
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"password": "123456",
"enable": true,
"enable_gtid": false,
"security": {
"ssl_ca_content": "",
"ssl_cert_content": "",
"ssl_key_content": "",
"cert_allowed_cn": [
"string"
]
},
"purge": {
"interval": 3600,
"expires": 0,
"remain_space": 15
}
}'
{
"source_name": "mysql-01",
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"password": "123456",
"enable": true,
"enable_gtid": false,
"security": {
"ssl_ca_content": "",
"ssl_cert_content": "",
"ssl_key_content": "",
"cert_allowed_cn": [
"string"
]
},
"purge": {
"interval": 3600,
"expires": 0,
"remain_space": 15
},
"status_list": [
{
"source_name": "mysql-replica-01",
"worker_name": "worker-1",
"relay_status": {
"master_binlog": "(mysql-bin.000001, 1979)",
"master_binlog_gtid": "e9a1fc22-ec08-11e9-b2ac-0242ac110003:1-7849",
"relay_dir": "./sub_dir",
"relay_binlog_gtid": "e9a1fc22-ec08-11e9-b2ac-0242ac110003:1-7849",
"relay_catch_up_master": true,
"stage": "Running"
},
"error_msg": "string"
}
]
}
Get a data source
This API is a synchronous interface. If the request is successful, the information of the corresponding data source is returned.
Request URI
GET /api/v1/sources/{source-name}
Example
curl -X 'GET' \
'http://127.0.0.1:8261/api/v1/sources/source-1?with_status=true' \
-H 'accept: application/json'
{
"source_name": "mysql-01",
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"password": "123456",
"enable_gtid": false,
"enable": false,
"flavor": "mysql",
"task_name_list": [
"task1"
],
"security": {
"ssl_ca_content": "",
"ssl_cert_content": "",
"ssl_key_content": "",
"cert_allowed_cn": [
"string"
]
},
"purge": {
"interval": 3600,
"expires": 0,
"remain_space": 15
},
"status_list": [
{
"source_name": "mysql-replica-01",
"worker_name": "worker-1",
"relay_status": {
"master_binlog": "(mysql-bin.000001, 1979)",
"master_binlog_gtid": "e9a1fc22-ec08-11e9-b2ac-0242ac110003:1-7849",
"relay_dir": "./sub_dir",
"relay_binlog_gtid": "e9a1fc22-ec08-11e9-b2ac-0242ac110003:1-7849",
"relay_catch_up_master": true,
"stage": "Running"
},
"error_msg": "string"
}
],
"relay_config": {
"enable_relay": true,
"relay_binlog_name": "mysql-bin.000002",
"relay_binlog_gtid": "e9a1fc22-ec08-11e9-b2ac-0242ac110003:1-7849",
"relay_dir": "./relay_log"
}
}
Delete the data source
This API is a synchronous interface. If the request is successful, the status code of the returned body is 204.
Request URI
DELETE /api/v1/sources/{source-name}
Example
curl -X 'DELETE' \
'http://127.0.0.1:8261/api/v1/sources/mysql-01?force=true' \
-H 'accept: application/json'
Update a data source
This API is a synchronous interface. If the request is successful, the information of the corresponding data source is returned.
Request URI
PUT /api/v1/sources/{source-name}
Example
curl -X 'PUT' \
'http://127.0.0.1:8261/api/v1/sources/mysql-01' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"source": {
"source_name": "mysql-01",
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"password": "123456",
"enable_gtid": false,
"enable": false,
"flavor": "mysql",
"task_name_list": [
"task1"
],
"security": {
"ssl_ca_content": "",
"ssl_cert_content": "",
"ssl_key_content": "",
"cert_allowed_cn": [
"string"
]
},
"purge": {
"interval": 3600,
"expires": 0,
"remain_space": 15
},
"relay_config": {
"enable_relay": true,
"relay_binlog_name": "mysql-bin.000002",
"relay_binlog_gtid": "e9a1fc22-ec08-11e9-b2ac-0242ac110003:1-7849",
"relay_dir": "./relay_log"
}
}
}'
{
"source_name": "mysql-01",
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"password": "123456",
"enable": true,
"enable_gtid": false,
"security": {
"ssl_ca_content": "",
"ssl_cert_content": "",
"ssl_key_content": "",
"cert_allowed_cn": [
"string"
]
},
"purge": {
"interval": 3600,
"expires": 0,
"remain_space": 15
}
}
Enable a data source
This is a synchronous interface that enables a data source on a successful request and starts all subtasks of the task that rely on this data source in batch.
Request URI
POST /api/v1/sources/{source-name}/enable
Example
curl -X 'POST' \
'http://127.0.0.1:8261/api/v1/sources/mysql-01/enable' \
-H 'accept: */*' \
-H 'Content-Type: application/json'
Disable a data source
This is a synchronous interface that deactivates this data source on a successful request and stops all subtasks of the task that rely on it in batch.
Request URI
POST /api/v1/sources/{source-name}/disable
Example
curl -X 'POST' \
'http://127.0.0.1:8261/api/v1/sources/mysql-01/disable' \
-H 'accept: */*' \
-H 'Content-Type: application/json'
Get the data source list
This API is a synchronous interface. If the request is successful, the data source list is returned.
Request URI
GET /api/v1/sources
Example
curl -X 'GET' \
'http://127.0.0.1:8261/api/v1/sources?with_status=true' \
-H 'accept: application/json'
{
"data": [
{
"enable_gtid": false,
"host": "127.0.0.1",
"password": "******",
"port": 3306,
"purge": {
"expires": 0,
"interval": 3600,
"remain_space": 15
},
"security": null,
"source_name": "mysql-01",
"user": "root"
},
{
"enable_gtid": false,
"host": "127.0.0.1",
"password": "******",
"port": 3307,
"purge": {
"expires": 0,
"interval": 3600,
"remain_space": 15
},
"security": null,
"source_name": "mysql-02",
"user": "root"
}
],
"total": 2
}
Get the information of a data source
This API is a synchronous interface. If the request is successful, the information of the corresponding node is returned.
Request URI
GET /api/v1/sources/{source-name}/status
Example
curl -X 'GET' \
'http://127.0.0.1:8261/api/v1/sources/mysql-replica-01/status' \
-H 'accept: application/json'
{
"total": 1,
"data": [
{
"source_name": "mysql-replica-01",
"worker_name": "worker-1",
"relay_status": {
"master_binlog": "(mysql-bin.000001, 1979)",
"master_binlog_gtid": "e9a1fc22-ec08-11e9-b2ac-0242ac110003:1-7849",
"relay_dir": "./sub_dir",
"relay_binlog_gtid": "e9a1fc22-ec08-11e9-b2ac-0242ac110003:1-7849",
"relay_catch_up_master": true,
"stage": "Running"
},
"error_msg": "string"
}
]
}
Start the relay-log feature for data sources
This API is an asynchronous interface. If the request is successful, the status code of the returned body is 200. To learn about its latest status, You can get the information of a data source.
Request URI
POST /api/v1/sources/{source-name}/relay/enable
Example
curl -X 'POST' \
'http://127.0.0.1:8261/api/v1/sources/mysql-01/relay/enable' \
-H 'accept: */*' \
-H 'Content-Type: application/json' \
-d '{
"worker_name_list": [
"worker-1"
],
"relay_binlog_name": "mysql-bin.000002",
"relay_binlog_gtid": "e9a1fc22-ec08-11e9-b2ac-0242ac110003:1-7849",
"relay_dir": "./relay_log"
}'
Stop the relay-log feature for data sources
This API is an asynchronous interface. If the request is successful, the status code of the returned body is 200. To learn about its latest status, You can get the information of a data source.
Request URI
POST /api/v1/sources/{source-name}/relay/disable
Example
curl -X 'POST' \
'http://127.0.0.1:8261/api/v1/sources/mysql-01/relay/disable' \
-H 'accept: */*' \
-H 'Content-Type: application/json' \
-d '{
"worker_name_list": [
"worker-1"
]
}'
Purge relay log files that are no longer required
This API is an asynchronous interface. If the request is successful, the status code of the returned body is 200. To learn about its latest status, You can get the information of a data source.
Request URI
POST /api/v1/sources/{source-name}/relay/purge
Example
curl -X 'POST' \
'http://127.0.0.1:8261/api/v1/sources/mysql-01/relay/purge' \
-H 'accept: */*' \
-H 'Content-Type: application/json' \
-d '{
"relay_binlog_name": "mysql-bin.000002",
"relay_dir": "string"
}'
Change the bindings between the data source and DM-workers
This API is an asynchronous interface. If the request is successful, the status code of the returned body is 200. To learn about its latest status, You can get the information of a DM-worker node.
Request URI
POST /api/v1/sources/{source-name}/transfer
Example
curl -X 'POST' \
'http://127.0.0.1:8261/api/v1/sources/mysql-01/transfer' \
-H 'accept: */*' \
-H 'Content-Type: application/json' \
-d '{
"worker_name": "worker-1"
}'
Get the list of schema names of a data source
This API is a synchronous interface. If the request is successful, the corresponding list is returned.
Request URI
GET /api/v1/sources/{source-name}/schemas
Example
curl -X 'GET' \
'http://127.0.0.1:8261/api/v1/sources/source-1/schemas' \
-H 'accept: application/json'
[
"db1"
]
Get the list of table names of a specified schema in a data source
This API is a synchronous interface. If the request is successful, the corresponding list is returned.
Request URI
GET /api/v1/sources/{source-name}/schemas/{schema-name}
Example
curl -X 'GET' \
'http://127.0.0.1:8261/api/v1/sources/source-1/schemas/db1' \
-H 'accept: application/json'
[
"table1"
]
Create a replication task
This API is a synchronous interface. If the request is successful, the status code of the returned body is 200. A successful request will return the information of the corresponding replication task.
Request URI
POST /api/v1/tasks
Example
curl -X 'POST' \
'http://127.0.0.1:8261/api/v1/tasks' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"task": {
"name": "task-1",
"task_mode": "all",
"shard_mode": "pessimistic",
"meta_schema": "dm-meta",
"enhance_online_schema_change": true,
"on_duplicate": "overwrite",
"target_config": {
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"password": "123456",
"security": {
"ssl_ca_content": "",
"ssl_cert_content": "",
"ssl_key_content": "",
"cert_allowed_cn": [
"string"
]
}
},
"binlog_filter_rule": {
"rule-1": {
"ignore_event": [
"all dml"
],
"ignore_sql": [
"^Drop"
]
},
"rule-2": {
"ignore_event": [
"all dml"
],
"ignore_sql": [
"^Drop"
]
},
"rule-3": {
"ignore_event": [
"all dml"
],
"ignore_sql": [
"^Drop"
]
}
},
"table_migrate_rule": [
{
"source": {
"source_name": "source-name",
"schema": "db-*",
"table": "tb-*"
},
"target": {
"schema": "db1",
"table": "tb1"
},
"binlog_filter_rule": [
"rule-1",
"rule-2",
"rule-3",
]
}
],
"source_config": {
"full_migrate_conf": {
"export_threads": 4,
"import_threads": 16,
"data_dir": "./exported_data",
"consistency": "auto"
"import_mode": "physical",
"sorting_dir": "./sort_dir",
"disk_quota": "80G",
"checksum": "required",
"analyze": "optional",
"range_concurrency": 0,
"compress-kv-pairs": "",
"pd_addr": "",
"on_duplicate_logical": "error",
"on_duplicate_physical": "none"
},
"incr_migrate_conf": {
"repl_threads": 16,
"repl_batch": 100
},
"source_conf": [
{
"source_name": "mysql-replica-01",
"binlog_name": "binlog.000001",
"binlog_pos": 4,
"binlog_gtid": "03fc0263-28c7-11e7-a653-6c0b84d59f30:1-7041423,05474d3c-28c7-11e7-8352-203db246dd3d:1-170"
}
]
}
}
}'
{
"name": "task-1",
"task_mode": "all",
"shard_mode": "pessimistic",
"meta_schema": "dm-meta",
"enhance_online_schema_change": true,
"on_duplicate": "overwrite",
"target_config": {
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"password": "123456",
"security": {
"ssl_ca_content": "",
"ssl_cert_content": "",
"ssl_key_content": "",
"cert_allowed_cn": [
"string"
]
}
},
"binlog_filter_rule": {
"rule-1": {
"ignore_event": [
"all dml"
],
"ignore_sql": [
"^Drop"
]
},
"rule-2": {
"ignore_event": [
"all dml"
],
"ignore_sql": [
"^Drop"
]
},
"rule-3": {
"ignore_event": [
"all dml"
],
"ignore_sql": [
"^Drop"
]
}
},
"table_migrate_rule": [
{
"source": {
"source_name": "source-name",
"schema": "db-*",
"table": "tb-*"
},
"target": {
"schema": "db1",
"table": "tb1"
},
"binlog_filter_rule": [
"rule-1",
"rule-2",
"rule-3",
]
}
],
"source_config": {
"full_migrate_conf": {
"export_threads": 4,
"import_threads": 16,
"data_dir": "./exported_data",
"consistency": "auto"
"import_mode": "physical",
"sorting_dir": "./sort_dir",
"disk_quota": "80G",
"checksum": "required",
"analyze": "optional",
"range_concurrency": 0,
"compress-kv-pairs": "",
"pd_addr": "",
"on_duplicate_logical": "error",
"on_duplicate_physical": "none"
},
"incr_migrate_conf": {
"repl_threads": 16,
"repl_batch": 100
},
"source_conf": [
{
"source_name": "mysql-replica-01",
"binlog_name": "binlog.000001",
"binlog_pos": 4,
"binlog_gtid": "03fc0263-28c7-11e7-a653-6c0b84d59f30:1-7041423,05474d3c-28c7-11e7-8352-203db246dd3d:1-170"
}
]
}
}
Get a replication task
This API is a synchronous interface. If the request is successful, the information of the corresponding replication task is returned.
Request URI
GET /api/v1/tasks/{task-name}?with_status=true
Example
curl -X 'GET' \
'http://127.0.0.1:8261/api/v1/tasks/task-1?with_status=true' \
-H 'accept: application/json'
{
"name": "task-1",
"task_mode": "all",
"shard_mode": "pessimistic",
"meta_schema": "dm-meta",
"enhance_online_schema_change": true,
"on_duplicate": "overwrite",
"target_config": {
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"password": "123456",
"security": {
"ssl_ca_content": "",
"ssl_cert_content": "",
"ssl_key_content": "",
"cert_allowed_cn": [
"string"
]
}
},
"binlog_filter_rule": {
"rule-1": {
"ignore_event": [
"all dml"
],
"ignore_sql": [
"^Drop"
]
},
"rule-2": {
"ignore_event": [
"all dml"
],
"ignore_sql": [
"^Drop"
]
},
"rule-3": {
"ignore_event": [
"all dml"
],
"ignore_sql": [
"^Drop"
]
}
},
"table_migrate_rule": [
{
"source": {
"source_name": "source-name",
"schema": "db-*",
"table": "tb-*"
},
"target": {
"schema": "db1",
"table": "tb1"
},
"binlog_filter_rule": [
"rule-1",
"rule-2",
"rule-3",
]
}
],
"source_config": {
"full_migrate_conf": {
"export_threads": 4,
"import_threads": 16,
"data_dir": "./exported_data",
"consistency": "auto",
"import_mode": "physical",
"sorting_dir": "./sort_dir",
"disk_quota": "80G",
"checksum": "required",
"analyze": "optional",
"range_concurrency": 0,
"compress-kv-pairs": "",
"pd_addr": "",
"on_duplicate_logical": "error",
"on_duplicate_physical": "none"
},
"incr_migrate_conf": {
"repl_threads": 16,
"repl_batch": 100
},
"source_conf": [
{
"source_name": "mysql-replica-01",
"binlog_name": "binlog.000001",
"binlog_pos": 4,
"binlog_gtid": "03fc0263-28c7-11e7-a653-6c0b84d59f30:1-7041423,05474d3c-28c7-11e7-8352-203db246dd3d:1-170"
}
]
}
}
Delete a replication task
This interface is a synchronous interface and the Status Code of the returned body is 204 upon successful request.
Request URI
DELETE /api/v1/tasks/{task-name}
Example
curl -X 'DELETE' \
'http://127.0.0.1:8261/api/v1/tasks/task-1' \
-H 'accept: application/json'
Update a replication task
This interface is a synchronous interface and a successful request returns the information of the task.
Request URI
PUT /api/v1/tasks/{task-name}
Example
curl -X 'PUT' \
'http://127.0.0.1:8261/api/v1/tasks/task-1' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"task": {
"name": "task-1",
"task_mode": "all",
"shard_mode": "pessimistic",
"meta_schema": "dm-meta",
"enhance_online_schema_change": true,
"on_duplicate": "overwrite",
"target_config": {
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"password": "123456",
"security": {
"ssl_ca_content": "",
"ssl_cert_content": "",
"ssl_key_content": "",
"cert_allowed_cn": [
"string"
]
}
},
"binlog_filter_rule": {
"rule-1": {
"ignore_event": [
"all dml"
],
"ignore_sql": [
"^Drop"
]
},
"rule-2": {
"ignore_event": [
"all dml"
],
"ignore_sql": [
"^Drop"
]
},
"rule-3": {
"ignore_event": [
"all dml"
],
"ignore_sql": [
"^Drop"
]
}
},
"table_migrate_rule": [
{
"source": {
"source_name": "source-name",
"schema": "db-*",
"table": "tb-*"
},
"target": {
"schema": "db1",
"table": "tb1"
},
"binlog_filter_rule": [
"rule-1",
"rule-2",
"rule-3",
]
}
],
"source_config": {
"full_migrate_conf": {
"export_threads": 4,
"import_threads": 16,
"data_dir": "./exported_data",
"consistency": "auto",
"import_mode": "physical",
"sorting_dir": "./sort_dir",
"disk_quota": "80G",
"checksum": "required",
"analyze": "optional",
"range_concurrency": 0,
"compress-kv-pairs": "",
"pd_addr": "",
"on_duplicate_logical": "error",
"on_duplicate_physical": "none"
},
"incr_migrate_conf": {
"repl_threads": 16,
"repl_batch": 100
},
"source_conf": [
{
"source_name": "mysql-replica-01",
"binlog_name": "binlog.000001",
"binlog_pos": 4,
"binlog_gtid": "03fc0263-28c7-11e7-a653-6c0b84d59f30:1-7041423,05474d3c-28c7-11e7-8352-203db246dd3d:1-170"
}
]
}
}
}'
{
"name": "task-1",
"task_mode": "all",
"shard_mode": "pessimistic",
"meta_schema": "dm-meta",
"enhance_online_schema_change": true,
"on_duplicate": "overwrite",
"target_config": {
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"password": "123456",
"security": {
"ssl_ca_content": "",
"ssl_cert_content": "",
"ssl_key_content": "",
"cert_allowed_cn": [
"string"
]
}
},
"binlog_filter_rule": {
"rule-1": {
"ignore_event": [
"all dml"
],
"ignore_sql": [
"^Drop"
]
},
"rule-2": {
"ignore_event": [
"all dml"
],
"ignore_sql": [
"^Drop"
]
},
"rule-3": {
"ignore_event": [
"all dml"
],
"ignore_sql": [
"^Drop"
]
}
},
"table_migrate_rule": [
{
"source": {
"source_name": "source-name",
"schema": "db-*",
"table": "tb-*"
},
"target": {
"schema": "db1",
"table": "tb1"
},
"binlog_filter_rule": [
"rule-1",
"rule-2",
"rule-3",
]
}
],
"source_config": {
"full_migrate_conf": {
"export_threads": 4,
"import_threads": 16,
"data_dir": "./exported_data",
"consistency": "auto"
"import_mode": "physical",
"sorting_dir": "./sort_dir",
"disk_quota": "80G",
"checksum": "required",
"analyze": "optional",
"range_concurrency": 0,
"compress-kv-pairs": "",
"pd_addr": "",
"on_duplicate_logical": "error",
"on_duplicate_physical": "none"
},
"incr_migrate_conf": {
"repl_threads": 16,
"repl_batch": 100
},
"source_conf": [
{
"source_name": "mysql-replica-01",
"binlog_name": "binlog.000001",
"binlog_pos": 4,
"binlog_gtid": "03fc0263-28c7-11e7-a653-6c0b84d59f30:1-7041423,05474d3c-28c7-11e7-8352-203db246dd3d:1-170"
}
]
}
}
Start a replication task
This API is an asynchronous interface. If the request is successful, the status code of the returned body is 204. To learn the latest status of a task, You can get the information of a replication task.
Request URI
POST /api/v1/tasks/{task-name}/start
Example
curl -X 'POST' \
'http://127.0.0.1:8261/api/v1/tasks/task-1/start' \
-H 'accept: */*'
Stop a replication task
This API is an asynchronous interface. If the request is successful, the status code of the returned body is 200. To learn the latest status of a task, You can get the information of a replication task.
Request URI
POST /api/v1/tasks/{task-name}/stop
Example
curl -X 'POST' \
'http://127.0.0.1:8261/api/v1/tasks/task-1/stop' \
-H 'accept: */*'
Get the information of a replication task
This API is a synchronous interface. If the request is successful, the information of the corresponding node is returned.
Request URI
GET /api/v1/tasks/task-1/status
Example
curl -X 'GET' \
'http://127.0.0.1:8261/api/v1/tasks/task-1/status?stage=running' \
-H 'accept: application/json'
{
"total": 1,
"data": [
{
"name": "string",
"source_name": "string",
"worker_name": "string",
"stage": "running",
"unit": "sync",
"unresolved_ddl_lock_id": "string",
"load_status": {
"finished_bytes": 0,
"total_bytes": 0,
"progress": "string",
"meta_binlog": "string",
"meta_binlog_gtid": "string"
},
"sync_status": {
"total_events": 0,
"total_tps": 0,
"recent_tps": 0,
"master_binlog": "string",
"master_binlog_gtid": "string",
"syncer_binlog": "string",
"syncer_binlog_gtid": "string",
"blocking_ddls": [
"string"
],
"unresolved_groups": [
{
"target": "string",
"ddl_list": [
"string"
],
"first_location": "string",
"synced": [
"string"
],
"unsynced": [
"string"
]
}
],
"synced": true,
"binlog_type": "string",
"seconds_behind_master": 0
}
}
]
}
Get the replication task list
This API is a synchronous interface and a successful request returns a list of the corresponding tasks.
Request URI
GET /api/v1/tasks
Example
curl -X 'GET' \
'http://127.0.0.1:8261/api/v1/tasks' \
-H 'accept: application/json'
{
"total": 2,
"data": [
{
"name": "task-1",
"task_mode": "all",
"shard_mode": "pessimistic",
"meta_schema": "dm-meta",
"enhance_online_schema_change": true,
"on_duplicate": "overwrite",
"target_config": {
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"password": "123456",
"security": {
"ssl_ca_content": "",
"ssl_cert_content": "",
"ssl_key_content": "",
"cert_allowed_cn": [
"string"
]
}
},
"binlog_filter_rule": {
"rule-1": {
"ignore_event": [
"all dml"
],
"ignore_sql": [
"^Drop"
]
},
"rule-2": {
"ignore_event": [
"all dml"
],
"ignore_sql": [
"^Drop"
]
},
"rule-3": {
"ignore_event": [
"all dml"
],
"ignore_sql": [
"^Drop"
]
}
},
"table_migrate_rule": [
{
"source": {
"source_name": "source-name",
"schema": "db-*",
"table": "tb-*"
},
"target": {
"schema": "db1",
"table": "tb1"
},
"binlog_filter_rule": [
"rule-1",
"rule-2",
"rule-3",
]
}
],
"source_config": {
"full_migrate_conf": {
"export_threads": 4,
"import_threads": 16,
"data_dir": "./exported_data",
"consistency": "auto",
"import_mode": "physical",
"sorting_dir": "./sort_dir",
"disk_quota": "80G",
"checksum": "required",
"analyze": "optional",
"range_concurrency": 0,
"compress-kv-pairs": "",
"pd_addr": "",
"on_duplicate_logical": "error",
"on_duplicate_physical": "none"
},
"incr_migrate_conf": {
"repl_threads": 16,
"repl_batch": 100
},
"source_conf": [
{
"source_name": "mysql-replica-01",
"binlog_name": "binlog.000001",
"binlog_pos": 4,
"binlog_gtid": "03fc0263-28c7-11e7-a653-6c0b84d59f30:1-7041423,05474d3c-28c7-11e7-8352-203db246dd3d:1-170"
}
]
}
}
]
}
Get the migration rules of a replication task
This API is a synchronous interface and a successful request returns a list of the migration rules of this task.
Request URI
GET /api/v1/tasks/{task-name}/sources/{source-name}/migrate_targets
Example
curl -X 'GET' \
'http://127.0.0.1:8261/api/v1/tasks/task-1/sources/source-1/migrate_targets' \
-H 'accept: application/json'
{
"total": 0,
"data": [
{
"source_schema": "db1",
"source_table": "tb1",
"target_schema": "db1",
"target_table": "tb1"
}
]
}
Get the list of schema names of the data source that is associated with a replication task
This API is a synchronous interface. If the request is successful, the corresponding list is returned.
Request URI
GET /api/v1/tasks/{task-name}/sources/{source-name}/schemas
Example
curl -X 'GET' \
'http://127.0.0.1:8261/api/v1/tasks/task-1/sources/source-1/schemas' \
-H 'accept: application/json'
[
"db1"
]
Get the list of table names of a specified schema in the data source that is associated with a replication task
This API is a synchronous interface. If the request is successful, the corresponding list is returned.
Request URI
GET /api/v1/tasks/{task-name}/sources/{source-name}/schemas/{schema-name}
Example
curl -X 'GET' \
'http://127.0.0.1:8261/api/v1/tasks/task-1/sources/source-1/schemas/db1' \
-H 'accept: application/json'
[
"table1"
]
Get the CREATE statement for schemas of the data source that is associated with a replication task
This API is a synchronous interface. If the request is successful, the corresponding CREATE statement is returned.
Request URI
GET /api/v1/tasks/{task-name}/sources/{source-name}/schemas/{schema-name}/{table-name}
Example
curl -X 'GET' \
'http://127.0.0.1:8261/api/v1/tasks/task-1/sources/source-1/schemas/db1/table1' \
-H 'accept: application/json'
{
"schema_name": "db1",
"table_name": "table1",
"schema_create_sql": "CREATE TABLE `t1` (`id` int(11) NOT NULL AUTO_INCREMENT,PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin"
}
Update the CREATE statement for schemas of the data source that is associated with a replication task
This API is a synchronous interface. If the request is successful, the status code of the returned body is 200.
Request URI
POST /api/v1/tasks/{task-name}/sources/{source-name}/schemas/{schema-name}/{table-name}
Example
curl -X 'PUT' \
'http://127.0.0.1:8261/api/v1/tasks/task-1/sources/task-1/schemas/db1/table1' \
-H 'accept: */*' \
-H 'Content-Type: application/json' \
-d '{
"sql_content": "CREATE TABLE `t1` ( `c1` int(11) DEFAULT NULL, `c2` int(11) DEFAULT NULL, `c3` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;",
"flush": true,
"sync": true
}'
Delete a schema of the data source that is associated with a replication task
This API is a synchronous interface. If the request is successful, the status code of the returned body is 200.
Request URI
DELETE /api/v1/tasks/{task-name}/sources/{source-name}/schemas/{schema-name}/{table-name}
Example
curl -X 'DELETE' \
'http://127.0.0.1:8261/api/v1/tasks/task-1/sources/source-1/schemas/db1/table1' \
-H 'accept: */*'