我有一个 MySQL 数据库转储文件,我想将其复制到在 AKS 中运行 MySQL 映像的 Kubernetes pod,以便我可以导入数据库。
我首先创建了一个 Azure Blob 容器,将其配置为持久卷 (PV),从 PV 设置持久卷声明 (PVC),然后将其安装到运行 MySQL 的 pod 中的 /var/lib/mysql图像。
由于MySQL非常严格,当MySQL开始创建新的空数据库时,/var/lib/mysql必须为空,因此我将Blob容器保持为空,并在上传之前让pod启动(这样就创建了一个空数据库)将数据库转储文件复制到 Blob 容器(即转储文件复制到 MySQL pod 的 /var/lib/mysql)。然后我尝试使用以下方式登录 Pod:
kubectl exec -it <pod_name> -- /bin/bash
接下来,我尝试通过运行导入数据库:
cd /var/lib/mysql
mysql -u root -p <db_name> < <database_dump_file_name>
但是我收到了权限被拒绝的错误,因为数据库转储文件具有 root 用户所有权和 640 权限,但 MySQL pod 必须以用户 ID 1000 和组 ID 999 运行,这意味着我无法更改该数据库的所有权和权限数据库转储文件。我该怎么做才能摆脱权限被拒绝的错误?
我找到了一个笨拙的解决方案,本质是在没有 MySQL 的情况下以 root 身份运行另一个 pod,并更改那里的数据库转储文件的所有权和权限:
kubectl delete
删除 MySQL pod 和部署。 command:
- '/bin/bash'
- '-c'
- |
while true; do echo $(date); sleep 1; done
kubectl apply
涂抹 pod。kubectl exec -it pod/<pod_name> -- /bin/bash
cd /mnt/dir
chmod 644 <dumpfile>
chown 1000:root <dumpfile>
kubectl delete
删除 Pod。cd /var/lib/mysql
mysql -u root -p <db_name> < <dumpfile>
rm <dumpfile>