AdminAPI 提供 dba.configureInstance()
函數,該函數會檢查實例是否已適當設定為用於 InnoDB Cluster,並在發現任何與 InnoDB Cluster 不相容的設定時設定實例。您針對實例執行 dba.configureInstance()
命令,它會檢查所有必要的設定,以啟用該實例用於 InnoDB Cluster。如果實例不需要設定變更,則無需修改實例的組態,並且 dba.configureInstance()
命令輸出會確認實例已準備好用於 InnoDB Cluster。
如果需要進行任何變更以使實例與 InnoDB Cluster 相容,則會顯示不相容設定的報告,您可以選擇讓命令對實例的選項檔案進行變更。根據 MySQL Shell 連線到實例的方式,以及實例上執行的 MySQL 版本,您可以將這些變更永久保留至遠端實例的選項檔案中,請參閱第 6.2.3 節〈保留設定〉。
dba.configureInstance()
命令的語法為
dba.configureInstance([instance][, options])
其中 instance
是實例定義,而 options
是一個資料字典,其中包含其他選項來設定操作。此操作會傳回描述結果的文字訊息。
instance
定義是實例的連線資料。例如
dba.configureInstance('user@example:3306')
如需詳細資訊,請參閱使用類似 URI 字串或金鑰值配對連線至伺服器。如果目標實例已屬於 InnoDB Cluster,則會產生錯誤且程序失敗。
選項字典可以包含下列內容
mycnfPath
- 實例的 MySQL 選項檔案的路徑。請注意,InnoDB Cluster 僅支援伺服器實例的單一選項檔案,且不支援使用--defaults-extra-file
選項來指定其他選項檔案。對於任何使用實例選項檔案的 AdminAPI 操作,都必須指定主要檔案。outputMycnfPath
- 寫入實例 MySQL 選項檔案的替代輸出路徑。clusterAdmin
- 要建立的 InnoDB Cluster 管理員使用者的名稱。支援的格式是標準的 MySQL 帳戶名稱格式。支援使用者名稱和主機名稱的識別碼或字串。預設情況下,如果未加引號,則假設輸入為字串。請參閱第 6.4 節〈為 AdminAPI 建立使用者帳戶〉。clusterAdminPassword
- 使用clusterAdmin
建立的 InnoDB Cluster 管理員帳戶的密碼。雖然您可以使用此選項指定,但這存在潛在的安全風險。如果您未指定此選項,但確實指定了clusterAdmin
選項,則系統會在互動式提示中提示您輸入密碼。restart
- 用於表示應執行目標實例的遠端重新啟動以完成操作的布林值。
雖然連線密碼可以包含在實例定義中,但這是不安全的,不建議使用。請使用 MySQL Shell 第 4.4 節〈可插拔密碼儲存〉,以安全地儲存實例密碼。
一旦針對實例發出 dba.configureInstance()
,該命令會檢查實例的設定是否適合用於 InnoDB Cluster。系統會顯示報告,其中顯示 InnoDB Cluster 所需的設定。如果實例的設定不需要任何變更,您可以在 InnoDB Cluster 中使用它,並可繼續前往第 7.4.3 節〈建立 InnoDB Cluster〉。如果實例的設定對於 InnoDB Cluster 使用無效,dba.configureInstance()
命令會顯示需要修改的設定。在設定實例之前,系統會提示您確認表格中顯示的變更,其中包含下列資訊
變數
- 無效的組態變數。目前值
- 無效組態變數的目前值。必要值
- 組態變數的必要值。
如何繼續取決於實例是否支援保留設定,請參閱第 6.2.3 節〈保留設定〉。當針對目前正在執行 MySQL Shell 的 MySQL 實例 (換句話說,本機實例) 發出 dba.configureInstance()
時,它會嘗試自動設定實例。當針對遠端實例發出 dba.configureInstance()
時,如果實例支援自動保留組態變更,您可以選擇執行此操作。
一般而言,在 dba.configureInstance()
設定選項檔案之後不需要重新啟動實例,但對於某些特定設定,可能需要重新啟動。此資訊會顯示在發出 dba.configureInstance()
後產生的報告中。如果實例支援 RESTART
陳述式,MySQL Shell 可以關閉,然後啟動實例。這可確保 mysqld 偵測到對實例選項檔案所做的變更。如需詳細資訊,請參閱 RESTART
。
執行 RESTART
陳述式後,會遺失目前與實例的連線。如果啟用自動重新連線,則會在伺服器重新啟動後重新建立連線。否則,必須手動重新建立連線。
dba.configureInstance()
方法會驗證是否有所適用於叢集使用的使用者,該使用者用於叢集成員之間的連線,請參閱第 6.4 節〈為 AdminAPI 建立使用者帳戶〉。
如果您未指定使用者來管理叢集,在互動模式下,精靈可讓您選擇下列選項之一
為 root 使用者啟用遠端連線,不建議在生產環境中使用
建立新使用者
不自動設定,在這種情況下,您需要手動建立使用者
如果實例具有 super_read_only=ON
,則您可能需要確認 AdminAPI 可以設定 super_read_only=OFF
。如需詳細資訊,請參閱超級唯讀模式下的實例組態。
每當 Group Replication 停止時,super_read_only
變數會設定為 ON
,以確保不會對執行個體進行寫入。當您嘗試使用以下 AdminAPI 命令操作此類執行個體時,系統會讓您選擇是否將執行個體上的 super_read_only
設定為 OFF
。
dba.configureInstance()
dba.dropMetadataSchema()
當 AdminAPI 遇到 super_read_only=ON
的執行個體時,在互動模式下,系統會讓您選擇是否將 super_read_only=OFF
。例如:
mysql-js> var myCluster = dba.dropMetadataSchema()
Are you sure you want to remove the Metadata? [y/N]: y
The MySQL instance at 'localhost:3310' currently has the super_read_only system
variable set to protect it from inadvertent updates from applications. You must
first unset it to be able to perform any changes to this instance.
For more information see:
https://mysqldev.dev.org.tw/doc/refman/en/server-system-variables.html#sysvar_super_read_only.
Do you want to disable super_read_only and continue? [y/N]: y
Metadata Schema successfully removed.
會顯示目前連線至執行個體的作用中連線數量。您必須確保沒有任何應用程式會無意中寫入執行個體。回答 y
表示您確認 AdminAPI 可以寫入執行個體。如果列出的執行個體有多個開啟的連線,在允許 AdminAPI 設定 super_read_only=OFF
之前,請謹慎處理。