Kubernetes 的 MySQL 运算符  / 第 6 章 MySQL 操作手册  /  6.2 使用 Helm 从转储引导 MySQL InnoDB 集群

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

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

使用 OCI 对象存储桶

如果您从 OCI OS 进行引导,则必须了解以下内容:

  • 有权访问 OCI 操作系统的用户的凭据

  • OCI 操作系统对象前缀(扮演目录的角色)。必须设置以下 Helm 变量:

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

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

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

    • initDB.dump.ociObjectStorage.credentials: Kubernetes secret 的名称,其中包含用于访问 OCI 操作系统存储桶的凭证

      对于凭据机密,需要以下信息:OCI 操作系统用户名、指纹、租户名称、区域名称、密码和用户的私钥。

  • OCI 操作系统桶名称

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"