Hyper-V部署Minikube集群时如何将SQL文件挂载到MySQL容器
解决方案
以下提供两种可直接落地的实现方式,按需选择即可:
方案1:修复现有PV/PVC挂载配置
你当前配置无法读取文件主要有两个原因:
- 手动创建的PV未指定存储类名,PVC也没有对应绑定规则,大概率被Minikube默认的动态存储类分配了新PV,没有用到你指向虚拟机
/data目录的手动PV - hostPath类型PV默认权限仅root可读写,MySQL容器运行用户为mysql,权限不足会导致读不到文件
修复步骤:
- 先删除已创建的PVC和PV
kubectl delete pvc sqlvolume kubectl delete pv sqlvolume
- 修改PV配置,新增存储类名和权限配置,保存为
pv.yaml
apiVersion: v1 kind: PersistentVolume metadata: name: sqlvolume spec: storageClassName: manual accessModes: - ReadWriteOnce capacity: storage: 1Gi hostPath: path: /data mountOptions: - dir_mode=0755 - file_mode=0755
- 修改PVC配置,指定对应存储类名,保存为
pvc.yaml
apiVersion: v1 kind: PersistentVolumeClaim metadata: labels: io.kompose.service: sqlvolume name: sqlvolume spec: storageClassName: manual accessModes: - ReadWriteOnce resources: requests: storage: 100Mi
- 重新创建PV和PVC,确认绑定状态
kubectl apply -f pv.yaml kubectl apply -f pvc.yaml # 执行以下命令,STATUS显示为Bound则表示绑定成功 kubectl get pvc sqlvolume
- 重启MySQL Deployment生效
kubectl rollout restart deployment mysql
挂载完成后进入容器,在/data目录即可看到Minikube虚拟机内的所有文件。
方案2:无需修改配置,直接拷贝本地文件到Pod
如果只是临时传输mysql.sql文件,不需要复杂的持久化配置,直接用kubectl cp命令即可:
- 先获取MySQL Pod名称
kubectl get pod -l io.kompose.service=mysql -o name # 输出格式为pod/mysql-xxxx-xxxx
- 执行拷贝命令,将本地文件传到Pod内
注意:Windows环境下本地路径要写为类Unix格式,比如C:\Users\itayb\Desktop\mysql.sql要写成/c/Users/itayb/Desktop/mysql.sql
# 替换尖括号内的内容为实际路径和Pod名称 kubectl cp <本地mysql.sql路径> <Pod名称>:/tmp/mysql.sql
- 进入容器即可操作文件,如需导入数据库可直接执行:
kubectl exec -it <Pod名称> -- bash # 进入容器后执行导入命令 mysql -uroot -proot crud < /tmp/mysql.sql
内容的提问来源于stack exchange,提问作者ITBYD
相关产品推荐
相关产品推荐

