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

求助:Kubernetes中MySQL Deployment自动删库问题如何解决

解决MySQL在Kubernetes中自动删除数据库的问题

核心问题分析

你的配置已经使用了PersistentVolume(PV)和PersistentVolumeClaim(PVC)来持久化MySQL数据,但数据库仍被自动删除,大概率是镜像本身的初始化逻辑问题或持久化存储的实际挂载/权限问题。Static Pod并不能解决这个核心问题——它只是让Pod由kubelet直接管理,无法解决数据未被持久化的本质问题。

具体排查与解决步骤

1. 排查自定义镜像的初始化逻辑

你使用的是自定义镜像rafaelribeirosouza86/shopping:myql,这是最可能的问题来源:

  • 检查镜像的启动脚本(如entrypoint.sh),看是否存在每次启动时清空/var/lib/mysql目录、强制重新初始化数据库的逻辑。部分自定义镜像可能错误地在每次启动时执行初始化,而非仅在首次启动时执行。
  • 临时替换为官方MySQL镜像(如mysql:8.0)进行测试:修改Deployment中的image字段为mysql:8.0,创建数据库后重启Pod,若数据未丢失,则可确认是自定义镜像的问题。此时需要修复自定义镜像的启动逻辑,确保仅在/var/lib/mysql为空时才执行初始化。

2. 验证持久化存储的有效性

确认PV/PVC是否正确绑定,数据是否真正写入到持久化目录:

  • 检查PV和PVC的状态:
    kubectl get pv mysql-pv-volume
    kubectl get pvc mysql-pv-claim
    
    两者状态都应为Bound,若不是,说明存储绑定失败,数据会存在Pod的临时存储中,Pod重启后丢失。
  • 检查节点上/mnt/data目录的权限:MySQL容器默认使用UID为999的mysql用户运行,节点上的/mnt/data目录需要该用户有读写权限:
    # 在PV所在的节点上执行
    chown -R 999:999 /mnt/data
    
    修改权限后重启MySQL Pod,再次创建数据库验证。
  • 验证数据写入:进入MySQL容器创建测试数据库,然后在节点的/mnt/data目录下查看是否生成对应的数据库文件夹(如创建testdb后,应有/mnt/data/testdb目录)。若没有,说明挂载未生效,需检查Deployment中的volumeMounts和volumes配置是否正确(你的配置中挂载路径/var/lib/mysql是正确的)。

3. 调整镜像拉取策略

你设置了imagePullPolicy: Always,每次Pod重启都会拉取最新的镜像。若镜像仓库中的镜像被更新且存在初始化逻辑问题,会导致每次重启都重置数据。可将其改为IfNotPresent,避免不必要的镜像拉取:

imagePullPolicy: IfNotPresent

4. 关于Static Pod的说明

Static Pod无法解决数据丢失问题,它只是绕过了Kubernetes的控制器管理,直接由kubelet运行。如果数据未被持久化,即使是Static Pod,在节点重启、kubelet重启或Pod意外退出后,数据仍会丢失。因此优先解决上述镜像和存储问题即可,无需使用Static Pod。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 15:18:26