使用 OpenAPI 运维集群

DM 提供 OpenAPI 功能,你可以通过 OpenAPI 对 DM 集群进行查询和运维操作。OpenAPI 的总体功能和 dmctl 工具类似。如需开启该功能,请在 DM-master 的配置文件中增加如下配置项:

[experimental] openapi = true

你可以通过 OpenAPI 完成 DM 集群的如下运维操作:

集群相关 API

数据源相关 API

同步任务相关 API

本文档以下部分描述当前提供的 API 的具体使用方法。

API 统一错误格式

对 API 发起的请求后,如发生错误,返回错误信息的格式如下所示:

{ "error_msg": "", "error_code": "" }

如上所示,error_msg 描述错误信息,error_code 则是对应的错误码。

获取 DM-master 节点信息

该接口是一个同步接口,请求成功会返回对应节点的状态信息。

请求 URI

GET /api/v1/cluster/masters

使用样例

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" } ] }

下线 DM-master 节点

该接口是一个同步接口,请求成功后返回体的 Status Code 是 204。

请求 URI

DELETE /api/v1/cluster/masters/{master-name}

使用样例

curl -X 'DELETE' \ 'http://127.0.0.1:8261/api/v1/cluster/masters/master1' \ -H 'accept: */*'

获取 DM-worker 节点信息

该接口是一个同步接口,请求成功会返回对应节点的状态信息。

请求 URI

GET /api/v1/cluster/workers

使用样例

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" } ] }

下线 DM-worker 节点

该接口是一个同步接口,请求成功后返回体的 Status Code 是 204。

请求 URI

DELETE /api/v1/cluster/workers/{worker-name}

使用样例

curl -X 'DELETE' \ 'http://127.0.0.1:8261/api/v1/cluster/workers/worker1' \ -H 'accept: */*'

创建数据源

该接口是一个同步接口,请求成功会返回对应数据源信息。

请求 URI

POST /api/v1/sources

使用样例

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_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_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" } ] }

获取数据源列表

该接口是一个同步接口,请求成功会返回数据源列表信息。

请求 URI

GET /api/v1/sources

使用样例

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 }

删除数据源

该接口是一个同步接口,请求成功后返回体的 Status Code 是 204。

请求 URI

DELETE /api/v1/sources/{source-name}

使用样例

curl -X 'DELETE' \ 'http://127.0.0.1:8261/api/v1/sources/mysql-01?force=true' \ -H 'accept: application/json'

获取数据源状态

该接口是一个同步接口,请求成功会返回对应节点的状态信息。

请求 URI

GET /api/v1/sources/{source-name}/status

使用样例

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" } ] }

对数据源开启 relay-log 功能

这是一个异步接口,请求成功的 Status Code 是 200,可通过获取数据源状态接口获取最新的状态。

请求 URI

PATCH /api/v1/sources/{source-name}/start-relay

使用样例

curl -X 'PATCH' \ 'http://127.0.0.1:8261/api/v1/sources/mysql-01/start-relay' \ -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" }'

对数据源停止 relay-log 功能

这是一个异步接口,请求成功的 Status Code 是 200,可通过获取数据源状态接口获取最新的状态。

请求 URI

PATCH /api/v1/sources/{source-name}/stop-relay

使用样例

curl -X 'PATCH' \ 'http://127.0.0.1:8261/api/v1/sources/mysql-01/stop-relay' \ -H 'accept: */*' \ -H 'Content-Type: application/json' \ -d '{ "worker_name_list": [ "worker-1" ] }'

对数据源暂停 relay-log 功能

这是一个异步接口,请求成功的 Status Code 是 200,可通过获取数据源状态接口获取最新的状态。

请求 URI

PATCH /api/v1/sources/{source-name}/pause-relay

使用样例

curl -X 'PATCH' \ 'http://127.0.0.1:8261/api/v1/sources/mysql-01/pause-relay' \ -H 'accept: */*'

对数据源恢复 relay-log 功能

这是一个异步接口,请求成功的 Status Code 是 200,可通过获取数据源状态接口获取最新的状态。

请求 URI

PATCH /api/v1/sources/{source-name}/resume-relay

使用样例

curl -X 'PATCH' \ 'http://127.0.0.1:8261/api/v1/sources/mysql-01/resume-relay' \ -H 'accept: */*'

更改数据源和 DM-worker 的绑定关系

这是一个异步接口,请求成功的 Status Code 是 200,可通过获取 DM-worker 节点信息接口获取最新的状态。

请求 URI

PATCH /api/v1/sources/{source-name}/transfer

使用样例

curl -X 'PATCH' \ 'http://127.0.0.1:8261/api/v1/sources/mysql-01/transfer' \ -H 'accept: */*' \ -H 'Content-Type: application/json' \ -d '{ "worker_name": "worker-1" }'

获取数据源的数据库名列表

该接口是一个同步接口,请求成功会返回对应的列表。

请求 URI

GET /api/v1/sources/{source-name}/schemas

使用样例

curl -X 'GET' \ 'http://127.0.0.1:8261/api/v1/sources/source-1/schemas' \ -H 'accept: application/json'
[ "db1" ]

获取数据源的指定数据库的表名列表

该接口是一个同步接口,请求成功会返回对应的列表。

请求 URI

GET /api/v1/sources/{source-name}/schemas/{schema-name}

使用样例

curl -X 'GET' \ 'http://127.0.0.1:8261/api/v1/sources/source-1/schemas/db1' \ -H 'accept: application/json'
[ "table1" ]

创建同步任务

这是一个异步接口,请求成功的 Status Code 是 200,可通过获取同步任务状态接口获取最新的状态。

请求 URI

POST /api/v1/tasks

使用样例

curl -X 'POST' \ 'http://127.0.0.1:8261/api/v1/tasks' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "remove_meta": false, "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" }, "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" } ] } }, "source_name_list": [ "source-1" ] }'
{ "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" }, "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" } ] } }

获取同步任务列表

该接口是一个同步接口,请求成功会返回对应的同步任务信息。

请求 URI

GET /api/v1/tasks

使用样例

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" }, "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" } ] } } ] }

停止同步任务

这是一个异步接口,请求成功的 Status Code 是 204,可通过获取同步任务状态接口获取最新的状态。

请求 URI

DELETE /api/v1/tasks/{task-name}

使用样例

curl -X 'DELETE' \ 'http://127.0.0.1:8261/api/v1/tasks/task-1' \ -H 'accept: */*'

获取同步任务状态

该接口是一个同步接口,请求成功会返回对应节点的状态信息。

请求 URI

GET /api/v1/tasks/task-1/status

使用样例

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": "runing", "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 } } ] }

暂停同步任务

这是一个异步接口,请求成功的 Status Code 是 200,可通过获取同步任务状态接口获取最新的状态。

请求 URI

PATCH /api/v1/tasks/task-1/pause

使用样例

curl -X 'PATCH' \ 'http://127.0.0.1:8261/api/v1/tasks/task-1/pause' \ -H 'accept: */*' \ -H 'Content-Type: application/json' \ -d '[ "source-1" ]'

恢复同步任务

这是一个异步接口,请求成功的 Status Code 是 200,可通过获取同步任务状态接口获取最新的状态。

请求 URI

PATCH /api/v1/tasks/task-1/resume

使用样例

curl -X 'PATCH' \ 'http://127.0.0.1:8261/api/v1/tasks/task-1/resume' \ -H 'accept: */*' \ -H 'Content-Type: application/json' \ -d '[ "source-1" ]'

获取同步任务关联数据源的数据库名列表

该接口是一个同步接口,请求成功会返回对应的列表。

请求 URI

GET /api/v1/tasks/{task-name}/sources/{source-name}/schemas

使用样例

curl -X 'GET' \ 'http://127.0.0.1:8261/api/v1/tasks/task-1/sources/source-1/schemas' \ -H 'accept: application/json'
[ "db1" ]

获取同步任务关联数据源的数据表名列表

该接口是一个同步接口,请求成功会返回对应的列表。

请求 URI

GET /api/v1/tasks/{task-name}/sources/{source-name}/schemas/{schema-name}

使用样例

curl -X 'GET' \ 'http://127.0.0.1:8261/api/v1/tasks/task-1/sources/source-1/schemas/db1' \ -H 'accept: application/json'
[ "table1" ]

获取同步任务关联数据源的数据表的创建语句

该接口是一个同步接口,请求成功会返回对应的创建语句。

请求 URI

GET /api/v1/tasks/{task-name}/sources/{source-name}/schemas/{schema-name}/{table-name}

使用样例

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" }

更新同步任务关联数据源的数据表的创建语句

该接口是一个同步接口,返回体的 Status Code 是 200。

请求 URI

PATCH /api/v1/tasks/{task-name}/sources/{source-name}/schemas/{schema-name}/{table-name}

使用样例

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 }'

删除同步任务关联数据源的数据表

该接口是一个同步接口,返回体的 Status Code 是 200。

请求 URI

DELETE /api/v1/tasks/{task-name}/sources/{source-name}/schemas/{schema-name}/{table-name}

使用样例

curl -X 'DELETE' \ 'http://127.0.0.1:8261/api/v1/tasks/task-1/sources/source-1/schemas/db1/table1' \ -H 'accept: */*'

文档内容是否有帮助?