Kubernetes 的 MySQL Operator 手冊  /  MySQL Operator 食譜  /  使用 Helm 從 Dump 啟動 MySQL InnoDB Cluster

7.2 使用 Helm 從 Dump 啟動 MySQL InnoDB Cluster

MySQL InnoDB Cluster 可以使用 MySQL Shell 或 Kubernetes 的 MySQL Operator 建立的資料庫 Dump 初始化。備份可以放在叢集可存取的持久性磁碟區上,但我們的範例使用 OCI Object Storage 儲存桶。

使用 OCI Object Storage 儲存桶

如果您要從 OCI OS 啟動,則必須知道以下資訊

  • 有權存取 OCI OS 的使用者的憑證

  • OCI OS 物件前綴 (扮演目錄的角色)。必須設定以下 Helm 變數

    • initDB.dump.name: Dump 的名稱,遵循 Kubernetes 命名識別碼的規則,例如 dump-20210916-140352

    • initDB.dump.ociObjectStorage.prefix: 上面列表中的前綴

    • initDB.dump.ociObjectStorage.bucketName: 上面列表中的儲存桶名稱

    • initDB.dump.ociObjectStorage.credentials: Kubernetes Secret 的名稱,其中包含存取 OCI OS 儲存桶的憑證

      對於憑證 Secret,需要以下資訊:OCI OS 使用者名稱、指紋、租戶名稱、區域名稱、密碼和使用者的私鑰。

  • OCI OS 儲存桶名稱

OCI 命令列工具在 $HOME/config 中的 [DEFAULT] 區段中提供此資訊。取得後,執行

export NAMESPACE="mynamespace"
export OCI_CREDENTIALS_SECRET_NAME="oci-credentials"
export OCI_USER="..."                # like ocid1.user.oc1....
export OCI_FINGERPRINT="..."         # like 90:01:..:..:....
export OCI_TENANCY="..."             # like ocid1.tenancy.oc1...
export OCI_REGION="..."              # like us-ashburn-1
export OCI_PASSPHRASE="..."          # set to empty string if no passphrase
export OCI_PATH_TO_PRIVATE_KEY="..." # like $HOME/.oci/oci_api_key.pem

kubectl -n $NAMESPACE create secret generic $OCI_CREDENTIALS_SECRET_NAME \
        --from-literal=user="$OCI_USER" \
        --from-literal=fingerprint="$OCI_FINGERPRINT" \
        --from-literal=tenancy="$OCI_TENANCY" \
        --from-literal=region="$OCI_REGION" \
        --from-literal=passphrase="$OCI_PASSPHRASE" \
        --from-file=privatekey="$OCI_PATH_TO_PRIVATE_KEY"

建立 OCI Secret 後,現在建立將從 OCI OS 中的 Dump 初始化的叢集

export NAMESPACE="mynamespace"
export OCI_DUMP_PREFIX="..."  # like dump-20210916-140352
export OCI_BUCKET_NAME="..."  # like idbcluster_backup
export OCI_CREDENTIALS_SECRET_NAME="oci-credentials"
kubectl create namespace $NAMESPACE
helm install mycluster mysql-operator/mysql-innodbcluster \
        --namespace $NAMESPACE \
        --set credentials.root.user='root' \
        --set credentials.root.password='sakila' \
        --set credentials.root.host='%' \
        --set serverInstances=3 \
        --set routerInstances=1 \
        --set initDB.dump.name="initdb-dump" \
        --set initDB.dump.ociObjectStorage.prefix="$OCI_DUMP_PREFIX" \
        --set initDB.dump.ociObjectStorage.bucketName="$OCI_BUCKET_NAME" \
        --set initDB.dump.ociObjectStorage.credentials="$OCI_CREDENTIALS_SECRET_NAME"