MySQL Kubernetes 运算符手册  /  MySQL 运算符菜谱  /  使用 Helm 从转储引导 MySQL InnoDB 集群

7.2 使用 Helm 从转储引导 MySQL InnoDB 集群

可以使用 MySQL Shell 或 MySQL Kubernetes 运算符创建的数据库转储来初始化 MySQL InnoDB 集群。备份可以驻留在集群可访问的持久卷上,但我们的示例使用 OCI 对象存储桶。

使用 OCI 对象存储桶

如果从 OCI OS 引导,则必须知道以下内容:

  • 具有访问 OCI OS 权限的用户的凭据

  • OCI OS 对象前缀(充当目录)。必须设置以下 Helm 变量

    • initDB.dump.name: 转储的名称,遵循 Kubernetes 为命名标识符制定的规则,例如 dump-20210916-140352

    • initDB.dump.ociObjectStorage.prefix: 上述列表中的前缀

    • initDB.dump.ociObjectStorage.bucketName: 上述列表中的存储桶名称

    • initDB.dump.ociObjectStorage.credentials: Kubernetes 密钥的名称,其中包含访问 OCI OS 存储桶的凭据

      对于凭据密钥,需要以下信息: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 密钥后,现在创建将从 OCI OS 中的转储初始化的集群

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"