隨著 AdminAPI 的發展,某些版本可能需要您升級現有 ClusterSets、ReplicaSets 和叢集的 metadata,以確保它們與較新版本的 MySQL Shell 相容。例如,在 8.0.19 版中新增 InnoDB ReplicaSet 表示 metadata schema 已升級至 2.0 版。無論您是否打算使用 InnoDB ReplicaSet,要將 MySQL Shell 8.0.19 或更新版本與使用較舊版本 MySQL Shell 部署的叢集搭配使用,都必須升級叢集的 metadata。
如果沒有升級 metadata,您無法使用 MySQL Shell 變更使用較舊版本建立的叢集設定。例如,您只能對叢集執行讀取操作,例如
Cluster
.status()Cluster
.describe()Cluster
.options()
dba.upgradeMetadata()
操作會比較 MySQL Shell 目前連線的 ClusterSet、ReplicaSet 或 InnoDB 叢集上找到的 metadata schema 版本,與此 MySQL Shell 版本支援的 metadata schema 版本。如果找到的 metadata 版本較低,則會啟動升級程序。dba.upgradeMetadata()
函數接著會更新任何自動建立的 MySQL Router 使用者,使其具有正確的權限。名稱不是以 mysql_router_
開頭的手動建立 MySQL Router 使用者不會自動升級。這是升級您的 ClusterSet、ReplicaSet 或 InnoDB 叢集的重要步驟,唯有如此才能升級 MySQL Router metadata。若要檢視關於哪個已向 ClusterSet、ReplicaSet 或叢集註冊的 MySQL Router 實例需要 metadata 升級的資訊,請使用 .listRouters()
函數。例如,若要列出與叢集相關聯的 Router 實例,請使用指派的變數 cluster
發出
cluster.listRouters({'onlyUpgradeRequired':'true'})
{
"clusterName": "mycluster",
"routers": {
"example.com::": {
"hostname": "example.com",
"lastCheckIn": "2019-11-26 10:10:37",
"roPort": 6447,
"roXPort": 64470,
"rwPort": 6446,
"rwXPort": 64460,
"version": "8.0.18"
}
}
}
在此範例中,onlyUpgradeRequired
選項包含在 listRouters()
函數中。onlyUpgradeRequired
是一個布林值,可啟用篩選,因此傳回的 JSON 物件中只會包含支援舊版 Metadata Schema 且需要升級的路由器實例。
若要升級 ClusterSet、ReplicaSet 或叢集的 metadata,請將 MySQL Shell 的全域工作階段連線至您的 ClusterSet、ReplicaSet 或叢集,然後使用 dba.upgradeMetadata()
操作將 ClusterSet、ReplicaSet 或叢集的 metadata 升級至新的 metadata。例如
mysql-js> shell.connect('user@example.com:3306')
mysql-js> dba.upgradeMetadata()
InnoDB Cluster Metadata Upgrade
The cluster you are connected to is using an outdated metadata schema version
1.0.1 and needs to be upgraded to 2.0.0.
Without doing this upgrade, no AdminAPI calls except read only operations will
be allowed.
The grants for the MySQL Router accounts that were created automatically when
bootstrapping need to be updated to match the new metadata version's
requirements.
Updating router accounts...
NOTE: 2 router accounts have been updated.
Upgrading metadata at 'example.com:3306' from version 1.0.1 to version 2.0.0.
Creating backup of the metadata schema...
Step 1 of 1: upgrading from 1.0.1 to 2.0.0...
Removing metadata backup...
Upgrade process successfully finished, metadata schema is now on version 2.0.0
如果安裝的 metadata 版本較低,則會啟動升級程序。
dba.upgradeMetadata()
函數接受下列選項
dryRun
:是一個布林值,用於啟用升級程序的試執行。如果使用dryRun
,dba.upgradeMetadata()
函數會判斷是否需要 metadata 升級或還原,並通知您,而不會實際執行操作。-
interactive
:是一個布林值,用於停用或啟用命令執行中的精靈,這表示將會根據設定的值提供或不提供提示和確認。預設值等於MySQL Shell 精靈模式。此選項已過時,可能會在未來版本的 MySQL Shell 中移除。
如果您遇到與 ClusterSet、ReplicaSet 或叢集管理使用者缺少權限相關的錯誤,請使用相關的 .setupAdminAccount()
操作搭配更新選項,以授予使用者正確的權限
-
建立或升級具有管理 InnoDB 叢集必要權限的 MySQL 使用者帳戶:
<Cluster>.setupAdminAccount(user, options)
請參閱InnoDB 叢集管理員帳戶。
建立或升級具有管理 InnoDB ReplicaSet 必要權限的 MySQL 使用者帳戶:
<ReplicaSet>.setupAdminAccount(user, options)