mysql - 无法在 kubernetes 数据库中添加 .sql 文件

标签 mysql database docker kubernetes

我正在使用“hostpath”将 .sql 文件访问到卷中。

当我们进入mysql pod时,我们可以看到.sql文件

(“laravel/laravel.sql”给定路径在卷安装部分定义)

但它已成为目录而不是文件,我无法将 .sql 文件添加到数据库中。 目前.sql 文件的大小为50Mi,因此无法使用configmap。

请提供此问题的正确解决方案

mysql pod image

mysql.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /home/paradise/lara_k8s/docker_qa-laravel
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
---
apiVersion: apps/v1 
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        env:
        - name: "MYSQL_ROOT_PASSWORD"
          value: "root"
        - name: "MYSQL_USERNAME"
          value: "root"
        - name: "MYSQL_PASSWORD"
          value: "root"
        - name: "MYSQL_DATABASE"
          value: "homestead"
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /laravel
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim

最佳答案

正如您在 Kubernetes 中所读到的那样 documentation :

A hostPath volume mounts a file or directory from the host node’s filesystem into your Pod.

以及进一步:

In addition to the required path property, user can optionally specify a type for a hostPath volume.

type 字段有一些受支持的值。您在特定情况下应该使用的文件是 File,其定义如下:

File A file must exist at the given path

在部署定义中,您应该使用文件的完整路径,如下例所示:

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /test/file.sql
      name: test-volume
  volumes:
  - name: test-volume
    hostPath:
      path: /data/file.sql
      type: File

要使用这种类型的卷,您不需要单独定义 persistentVolumepersistentVolumeClaim。如果您只需将其添加到部署定义中就完全足够了。 如果出于某种原因您有兴趣创建一个 hostPath PersistentVolume,它有很好的描述 here .

编辑:

部署定义的最后几行可能如下所示:

    volumeMounts:
    - name: mysql-volume
      mountPath: /laravel/your_file.sql
  volumes:
  - name: mysql-volume
    hostPath:
      path: /path/to/file/your_file.sql
      type: File

关于mysql - 无法在 kubernetes 数据库中添加 .sql 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57691295/

相关文章:

java - 如何从sqlite中的列中选择特定值

mongodb - MongoDB 中写操作的原子性是什么意思?

node.js - 如何创建具有云功能的编码沙箱以在服务器上执行用户代码?做/不做?

c# - 如何在Docker中运行.NET Core 3.1.3 x86 App

mysql - 从 MySQL 数据库中删除数百万行的最快方法是什么?

php - 使用 foreach 处理错误并分解 PHP

php - 在php中每三个结果后显示横幅广告图像

sql - 如何在多个数据库表上创建单个触发器

php - Mysql fetch与PHP MYSQL以表格式关联

docker - kubeadm docker法兰绒集成