You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes重新部署Pod后MySQL数据库丢失,如何永久存储数据?

解决Kubernetes中MySQL Pod重建后数据丢失的问题

1. 验证PVC挂载路径是否匹配MySQL数据目录

MySQL官方镜像默认的数据存储目录是/var/lib/mysql,如果你的部署文件中volumeMounts的mountPath指向了其他路径,数据依然会存在容器的临时存储里,Pod重建后必然丢失。
正确的挂载配置示例:

containers:
- name: mysql
  image: mysql:8.0
  volumeMounts:
  - name: mysql-data
    mountPath: /var/lib/mysql  # 必须指向MySQL默认数据目录
volumes:
- name: mysql-data
  persistentVolumeClaim:
    claimName: mysql-pvc  # 关联你的PVC名称

同时执行kubectl get pvc确认PVC状态为Bound,再用kubectl get pv查看对应PV的绑定状态,确保PV是持久化类型(如本地磁盘、云存储卷)而非临时存储。

2. 调整存储类的回收策略

若使用的存储类回收策略为Delete,当PVC被删除(比如重建部署时误删),对应的PV和存储介质上的数据会被彻底清除。需将存储类的回收策略改为Retain:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: your-storage-class
provisioner: kubernetes.io/aws-ebs  # 替换为你的存储提供商驱动
reclaimPolicy: Retain  # 改为Retain,保留数据

3. 避免部署更新时误删PVC

  • 建议将PVC单独定义为独立的YAML文件,不要嵌套在Deployment配置中,防止部署更新时PVC被意外删除。
  • 部署更新时使用kubectl apply -f deployment.yaml,而非kubectl delete && kubectl create这类会清理旧资源的命令;如果用Helm等工具,需检查配置是否有自动清理PVC的规则。

4. 检查挂载卷的权限配置

MySQL容器默认以mysql用户(UID 999)运行,如果挂载卷的所有者或权限不正确,MySQL无法写入数据到PVC,会自动 fallback 到容器内部存储。可在部署文件中添加securityContext修正:

containers:
- name: mysql
  image: mysql:8.0
  securityContext:
    runAsUser: 999
    runAsGroup: 999
    fsGroup: 999
  volumeMounts:
  - name: mysql-data
    mountPath: /var/lib/mysql

也可进入容器执行ls -l /var/lib/mysql,确认目录下存在数据库文件(如ibdata1、自定义数据库目录),且所有者为mysql。

5. 确认PV的持久化属性

  • 检查PV的persistentVolumeReclaimPolicy字段,确保为Retain(Recycle已废弃),避免PVC释放时数据被删除。
  • 若使用本地存储PV,需确认底层存储介质是持久化磁盘(如物理SSD、挂载的外部存储),而非节点的临时磁盘;云厂商存储卷(如AWS EBS、Azure Disk)需确保不会随节点销毁而被删除。

内容的提问来源于stack exchange,提问作者Aary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:35:29