execute()
函式可讓您在拓樸的所有成員或選取的成員上執行 SQL 查詢和陳述式。
必須謹慎使用此函式。例如,在多個成員上變更所需系統變數的值可能會使您管理的拓樸處於無法使用的狀態。此外,此函式會取得 AdminAPI 鎖定,這表示某些 AdminAPI 命令 (例如 addInstance()
) 會在此函式執行時遭到封鎖。
topologyType.execute(cmd, instances, options)
:代表 Cluster、ClusterSet 或 ReplicaSet 物件。topologyType
cmd
:單一 MySQL 查詢或陳述式。-
instances
:關鍵字或執行命令的位址清單。all
/a
:所有可連線的執行個體,包括叢集和 ClusterSet 中的讀取複本。-
primary
/p
:下列其中一項單一主要叢集中的主要執行個體
多重主要叢集中的所有主要執行個體
ClusterSet 主要叢集的主要執行個體
ReplicaSet 中的主要執行個體
-
secondaries
/s
僅單一主要叢集的次要執行個體。不包含讀取複本。
ClusterSet 中所有叢集的次要執行個體。
ReplicaSet 的次要執行個體。
read-replicas
/rr
:叢集的讀取複本執行個體或 ClusterSet 中所有叢集的讀取複本執行個體。
下列範例說明如何針對特定叢集成員執行
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
:如果為 true,則模擬執行命令。永遠不會針對目標執行個體執行命令。會建立與目標執行個體的連線,確保可以連線到它們。
-
結果會以 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"
]
]
}
]
}
]