首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何强制Kubernete加载mysql数据库?

问如何强制Kubernete加载mysql数据库?
EN

Stack Overflow用户
提问于 2019-02-04 03:31:06
回答 1查看 77关注 0票数 0

我有以下yaml部署:

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: iam-mysql
  labels:
    app: iam
    tier: mysql
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: iam
      tier: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: iam
        tier: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: iam-mysql
        envFrom:
        - configMapRef:
            name: iam-mysql-conf-dev
        - secretRef:
            name: iam-mysql-pass-dev
        ports:
        - containerPort: 3306
          name: iam-mysql
        volumeMounts:
          - name: iam-mysql-persistent-storage
            mountPath: /var/lib/mysql
          - name: mysql-initdb
            mountPath: /docker-entrypoint-initdb.d
      restartPolicy: Always
      volumes:
        - name: iam-mysql-persistent-storage
          persistentVolumeClaim:
            claimName: iam-mysql-pv-claim
        - name: mysql-initdb
          configMap:
            name: iam-mysql-initdb-dev

一旦创建了新的模式,我就不能使用新模式重新加载"iam-mysql-initdb-dev“。实际上,我在pod中删除了一个表(user),当我再次创建部署时,这个表(user)不在那里。这意味着一旦部署重新创建benn,kubernetes就不会重新加载模式。

EN

回答 1

Stack Overflow用户

发布于 2019-02-04 11:59:16

这是预期的行为。仅当数据目录为空时,才会运行/docker-entrypoint-initdb.d/目录下的初始化文件。这意味着只有第一次。

如果您查看MySQL 5.6的入口点脚本,您可以看到此过程。在line 98中,它检查数据目录是否为空。

  • 如果为空,脚本将运行/docker-entrypoint-initdb.d/目录下的初始化文件。从line 98 - 202

看,在line 190-192

  • If中它不是空的,整个入口点脚本将被忽略

在kubernetes中,当您使用持久卷时,卷将在删除和重新创建pod时持续存在。因此,当pod重启时,数据目录不为空。因此,MySQL跳过了line 98 - 202 中的初始化部分

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54506716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档