gpt4 book ai didi

mysql - 如何使用本地持久卷创建mysql服务以将数据存储在Windows本地计算机上

转载 作者:行者123 更新时间:2023-12-02 11:59:35 24 4
gpt4 key购买 nike

我希望当我重新启动计算机时,mysql pod不会删除所有mysql数据。
我应该能够将数据存储在计算机中,因此当我重新启动计算机并且mysql pod再次启动时,数据库仍然存在。
这是我的yaml:
storage-class.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
mysql-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv-volume
labels:
type: local
spec:
capacity:
storage: 20Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
volumeMode: Filesystem
storageClassName: local-storage
local:
path: "C:\\mysql-volume" #2 \ for escape characters right?
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- docker-desktop
#hostPath:
# path: /mysql-volume
#type: DirectoryOrCreate
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
labels:
type: local
spec:
storageClassName: local-storage
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi
mysql-deployment.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
labels:
app: mysql
spec:
ports:
- protocol: TCP
port: 3306
nodePort: 30001
selector:
app: mysql
type: NodePort
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql-custom-img-here
imagePullPolicy: IfNotPresent
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: mysql-root-password
- name: MYSQL_USER
valueFrom:
secretKeyRef:
name: db-secret
key: mysql-user
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: mysql-password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
尝试过之后,我得到的第一个错误是:
MountVolume.NewMounter initialization failed for volume "mysql-pv-volume" : path "C:\\mysql-volume" does not exist
由于我正在使用Windows,我猜这是正确的路径吗?我使用2“”作为转义字符,也许问题出在路径上,但不确定。如果是的话,如何在Windows计算机上提供本地路径?
然后我将 local: path:更改为 /opt并出现以下错误:
initialize specified but the data directory has files in it.
日志:
2020-09-24 12:53:00+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.31-1debian10 started.
2020-09-24 12:53:00+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2020-09-24 12:53:00+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.31-1debian10 started.
2020-09-24 12:53:00+00:00 [Note] [Entrypoint]: Initializing database files
2020-09-24T12:53:00.271130Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2020-09-24T12:53:00.271954Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2020-09-24T12:53:00.271981Z 0 [ERROR] Aborting
但是如果我将 mountPath: /var/lib/mysql更改为 mountPath: /var/lib/mysql-test它可以正常工作,但不符合预期(重新启动计算机后保存数据)。
即使删除了PV,PVC和MYSQL部署/服务,该错误仍然不断出现。
我什至使用docker命令删除了卷,以防万一,将我的mysql自定义镜像更改为“mysql:5.7”,但是出现了相同的 initialize specified but the data directory has files in it.
即使我卸下 pod ,怎么办? mountPath是容器路径,因此数据应消失。
以及如何在persistentVolume中给出本地路径?
谢谢你的时间!
编辑:忘记告诉我我已经看到了: How to create a mysql kubernetes service with a locally mounted data volume?
我搜索了很多,但没有运气

最佳答案

我终于解决了这个问题...
@Jakub回答了initialize specified but the data directory has files in it.的问题MountVolume.NewMounter initialization failed for volume "mysql-pv-volume" : path "C:\\mysql-volume" does not exist...。由于这个愚蠢的问题,我什至不敢相信花费的时间...
正确的路径是:path: /c/mysql-volume之后,一切都按预期工作!

关于mysql - 如何使用本地持久卷创建mysql服务以将数据存储在Windows本地计算机上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64047258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com