【问题标题】:Minishift MySQL service not showing actual databaseMinishift MySQL 服务未显示实际数据库
【发布时间】:2020-06-25 00:05:45
【问题描述】:

使用 Springboot 2.2.4 和 Openshift 的本地发行版(Minishift、Kubernetes Master 1.11、Openshift Web Console 3.11)。

应用程序本身只是一个 spring-boot-starter-data-rest CRUD,用于在 Openshift 的 pod 中配置的简单 Employee 实体。数据源是另一个容器中的 MySQL 服务。

在部署时,一些数据会加载到员工表中。仅 4 名员工用于测试。

DROP TABLE IF EXISTS employee;

CREATE TABLE employee (
  id int(11) NOT NULL AUTO_INCREMENT,
  first_name varchar(45) DEFAULT NULL,
  last_name varchar(45) DEFAULT NULL,
  email varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

--
-- Data for table `employee`
--

INSERT INTO employee VALUES
(1,'Leslie','Andrews','leslie@luv2code.com'),
(2,'Emma','Baumgarten','emma@luv2code.com'),
(3,'Avani','Gupta','avani@luv2code.com'),
(4,'Yuri','Petrov','yuri@luv2code.com');

一切都很完美。所有端点都已很好地发布,并且一切正常。

但出于好奇,我正在尝试连接一些 mysql 查看器来检查它在启动时加载的数据,然后在 API 使用时更改。但是我在任何地方都找不到桌子。我正在尝试两种方法:

  • 进入 mysql 容器并通过命令行(mysql 命令)。我连接到数据库,但它是空的(没有表)。
  • 使用 phpMysqlAdmin 实例配置第三个 pod,该实例显然也完美连接到数据库,但再次显示没有表或数据(除了 information_schema)。

configmap.yml

apiVersion: v1
kind: ConfigMap
metadata:
  name: spring-boot-bootstrap
data:
  application.properties: |-
    spring.datasource.url=jdbc:mysql://mydatabase:3306/mydatabase

fabric8\deployment.yml

spec:
  template:
    spec:
      containers:
      - env:
        - name: SPRING_PROFILES_ACTIVE
          value: mysql
        - name: SPRING_DATASOURCE_USER
          valueFrom:
            secretKeyRef:
              name: mydatabase
              key: database-user
        - name: SPRING_DATASOURCE_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mydatabase
              key: database-password
        livenessProbe:
          httpGet:
            path: /actuator/health
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 180
        readinessProbe:
          httpGet:
            path: /actuator/health
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 30

有什么想法吗?

【问题讨论】:

  • 您不能轻易地在容器中运行数据库。想象一下,您的集群中有 3 个数据库实例,A、B 和 C(每个都在不同的节点上)。现在,假设您的负载均衡器选择实例 A 来运行您的 SQL 初始化,幸运的是,您的应用程序被路由到同一个容器。现在,当您打开查看器(或第二个消费者容器)时,负载均衡器会将您连接到不同节点上的不同实例,例如实例 B。您可以在实例 B 中任意搜索,但不会找到仅存在于实例 A 中的表。

标签: mysql docker kubernetes containers openshift


【解决方案1】:

Postgres 具有相同的行为。

进入 Postgres 容器并通过命令行(Postgres 命令)。我连接到数据库,但它是空的(没有表)。

我使用 minishift。

jdbc:postgresql://localhost:25432/pstgrs1 在客户端工作。我使用了spring app,它可以工作,但是表是空的。

示例 如果存在城市,则删除表; CREATE TABLE 城市(id 序列主键,名称 VARCHAR(255),人口整数);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-07
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    相关资源
    最近更新 更多