该 execute()
函数允许您跨拓扑结构的所有成员或选定成员执行 SQL 查询和语句。
必须谨慎使用此函数。例如,更改多个成员上必需系统变量的值可能会使您管理的拓扑结构处于不可用状态。此外,此函数会获取 AdminAPI 锁,这意味着一些 AdminAPI 命令(例如 addInstance()
)在该函数运行期间会被阻止。
topologyType.execute(cmd, instances, options)
: 表示集群、集群集或副本集对象。topologyType
cmd
: 单个 MySQL 查询或语句。-
instances
: 运行该命令的关键字或地址列表。all
/a
: 所有可访问的实例,包括集群和集群集中的只读副本。-
primary
/p
: 下列选项之一单主键集群中的主节点实例
多主键集群中的所有主节点实例
集群集的主集群的主节点实例
副本集中的主节点实例
-
secondaries
/s
仅限单主键集群的从节点实例。不包括只读副本。
集群集中所有集群的从节点实例。
副本集的从节点实例。
read-replicas
/rr
: 集群或集群集中所有集群的只读副本实例。
以下示例显示了如何对特定集群成员执行
SELECT VERSION()
cluster.execute("SELECT VERSION();", ["host:4100", "host:4200"])
-
选项
:-
exclude
: 指定要排除的实例。可以是除了all
之外的任何关键字,或地址列表。以下示例显示了如何从除只读副本以外的所有成员检索变量
report_host
和report_port
的值cluster.execute("SHOW VARIABLES WHERE VARIABLE_NAME IN ('REPORT_HOST', 'REPORT_PORT');", "a", {exclude: "rr"})
timeout
: 指定当前语句取消之前的秒数。超时仅用于SELECT
语句和源于LOCK TABLE
语句的锁。dryRun
: 如果为真,则模拟运行该命令。该命令永远不会针对目标实例运行。会建立与目标实例的会话,确保可以联系到它们。
-
结果以 JSON 格式返回。
一个简单的 SQL 语句 SHOW DATABASES
在集群主节点上执行后,将返回以下内容
cluster.execute("show databases;", "primary")
Statement will be executed at: 'IPAddress:4100'
Executing statement on instances (press Ctrl+C to cancel)... finished.
[
{
"executionTime": 0.0006606,
"instance": {
"address": "IPAddress:4100",
"version": "9.0.0"
},
"output": [
{
"columnNames": [
"Database"
],
"rows": [
[
"information_schema"
],
[
"mysql"
],
[
"mysql_innodb_cluster_metadata"
],
[
"performance_schema"
],
[
"sys"
]
]
}
]
}
]