可以使用 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"