kubernetes docker/mysql在一个服务中提供多个数据库

68bkxrlz  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(368)

我需要多个数据库在一个mysql服务。

apiVersion: v1
kind: Service
metadata:
  name: database
  labels:
    app: keyshake
spec:
  ports:
    - port: 3306
  selector:
    app: keyshake
    tier: database
  type: LoadBalancer
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: database-pv-claim
  labels:
    app: keyshake
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: database
  labels:
    app: keyshake
spec:
  selector:
    matchLabels:
      app: keyshake
      tier: database
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: keyshake
        tier: database
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        env:
        - name: MYSQL_RANDOM_ROOT_PASSWORD
          value: "yes"
        - name: MYSQL_USER
          value: keyshake
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: database-password
              key: password
        ports:
        - containerPort: 3306
          name: database
        volumeMounts:
        - name: database-persistent-storage
          mountPath: /var/lib/mysql
        - name: mysql-initdb
          mountPath: /docker-entrypoint-initdb.d
      volumes:
      - name: database-persistent-storage
        persistentVolumeClaim:
          claimName: database-pv-claim
      - name: mysql-initdb
        configMap:
          name: mysql-initdb-config

这是我的配置。现在我正在使用一个配置Map,其中包含以下内容:

init.sql:

CREATE DATABASE IF NOT EXISTS keyshake;
CREATE DATABASE IF NOT EXISTS pdns;

当我创建服务时,它会记录这个 /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/init.sql 但当我连接到它并列出数据库时,我什么也看不到。
我想我的配置没有正确设置,但我不知道是什么问题。
提前谢谢。
西奥

z9ju0rcb

z9ju0rcb1#

在docker compose文件中添加相同的配置,如:

services:
 mysql1:
    container_name: mysqlserver
    image: mysql:5.6
    ports:
        - 3310:3306
    volumes:
        - ./sqlserver:/docker-entrypoint-initdb.d
    environment:
        MYSQL_ROOT_PASSWORD: "root"
        MYSQL_DATABASE: <dbname1>
        MYSQL_USER: <db1user>
        MYSQL_PASSWORD: <db1pass>

mysql2:
    container_name: mysqlserver2
    image: mysql:5.6
    environment:
    volumes:
        - ./sqlserver:/docker-entrypoint-initdb2.d
    ports:
        - 3311:3306
        MYSQL_ROOT_PASSWORD: "root"
        MYSQL_DATABASE: <dbname2>
        MYSQL_USER: <db2user>
        MYSQL_PASSWORD: <db2pass>

如果您在一个服务中需要这个,如果您的意思是正确的,那么您需要将这个docker卷加载到您的应用程序中。如果您想用2个数据库配置应用程序,请在loadbalancer中添加类似config.services.mysqlserver1(host,port,pass)的属性。
如果您不使用db累加器(比如jpa),那么您必须单独添加schema.sql

CREATE DATABASE IF NOT EXISTS keyshake;
CREATE DATABASE IF NOT EXISTS pdns;

并在docker entrypoint中为两个映像示例添加schema.sql的路径,以代替docker entrypoint initdb.sql--->schema.sql
在端口中配置different,请参阅 "docker -ti mysql1 /bin/bash" 以及 "docker -ti server2 /bin/bash" ,两个数据库示例是否都有所需的表。
希望这有帮助!!!。

相关问题