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
。如需詳細資訊,請參閱 以超級唯讀模式配置實例。
每當群組複寫停止時,會將 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
之前謹慎操作。