在体验腾讯云 TKE 服务, 偶然间进行部署个官方 Docker Hub 镜像里的 MySQL 5.7 以上镜像, 并配置 pvc 进行数据持久化存储, 将对应挂载点绑定在 / var/lib/MySQL 路径, 但无法启动
报错:
[ERROR] --initialize specified but the data directory has files in it. Aborting.
意思对应磁盘目录有文件无法进行初始化, 检查对应挂载目录: 只有 lost+found
lost+found 作用:
lost+found 目录的文件通常是未链接的文件 (名字已经被删除), 但是这些文件还被一些进程使用(数据没有删除), 在突然关机时(内核 panic 或者突然断电) 出现, 这些文件系统会自动删除,当因为软件或者硬件出现错误, 导致文件系统不一致, 也有可能把有问题的文件放到 lost+found 目录.
它提供了恢复丢失文件的一种方法: 用来存放 fsck 过程中部分修复的文件的.
既然这个目录是在 Linux 系统每个目录下都有的, 那就不应该是磁盘的问题.
查阅文档:
GitHub issue 中: https://github.com/docker-library/mysql/issues/69
- https://github.com/docker-library/mysql/issues/186
- new ext4 disk partition is not usually empty; there is a lost+found directory, which MySQL is known to choke on. You could try adding --ignore-db-dir=lost+found to the CMD to know for sure
在看 MySQL 官方文档:
属于 MySQL 5.7 以上版本特性, 如对应初始化的路径不是空目录, 会影响 MySQL 初始化.
解决方法: 添加参数:--ignore-db-dir=lost+found 在 YAML 文件中, 忽略对应 lost+found 目录
YAML 文件实例:
- apiVersion: extensions/v1beta1
- kind: Deployment
- metadata:
- annotations:
- description: add --ignore-db-dir=lost+found
- creationTimestamp: null
- generation: 2
- labels:
- k8s-App: MySQL-0
- qcloud-App: MySQL-0
- name: MySQL-0
- namespace: cmcc
- spec:
- replicas: 1
- selector:
- matchLabels:
- k8s-App: MySQL-0
- qcloud-App: MySQL-0
- strategy:
- rollingUpdate:
- maxSurge: 1
- maxUnavailable: 0
- type: RollingUpdate
- template:
- metadata:
- creationTimestamp: null
- labels:
- k8s-App: MySQL-0
- qcloud-App: MySQL-0
- spec:
- containers:
- - env:
- - name: MYSQL_ROOT_PASSWORD
- value: "123456"
- image: MySQL:5.7.28
- imagePullPolicy: IfNotPresent
- name: MySQL-0
- args:
- - "--ignore-db-dir=lost+found"
- resources:
- limits:
- CPU: 500m
- memory: 1Gi
- requests:
- CPU: 250m
- memory: 256Mi
- securityContext:
- privileged: false
- procMount: Default
- volumeMounts:
- - mountPath: /var/lib/MySQL
- name: pvc
- dnsPolicy: ClusterFirst
- imagePullSecrets:
- - name: qcloudregistrykey
- - name: tencenthubkey
- restartPolicy: Always
- schedulerName: default-scheduler
- securityContext: {}
- volumes:
- - name: pvc
- persistentVolumeClaim:
- claimName: pvc
- status: {}
- ---
- apiVersion: v1
- kind: Service
- metadata:
- creationTimestamp: null
- name: MySQL-0
- namespace: cmcc
- spec:
- ports:
- - name: tcp-3306-3306
- nodePort: 0
- port: 3306
- protocol: TCP
- targetPort: 3306
- selector:
- k8s-App: MySQL-0
- qcloud-App: MySQL-0
- type: ClusterIP
- status:
- loadBalancer: {}
来源: https://www.qcloud.com/developer/article/1559866