使用 docker-compose 在 mysql 中创建特定模式

Posted

技术标签:

【中文标题】使用 docker-compose 在 mysql 中创建特定模式【英文标题】:create specific schema in mysql with docker-compose 【发布时间】:2021-08-13 17:00:24 【问题描述】:

我必须为每个服务创建一个特定的架构。

    首先,我将以root 用户身份在docker-compose 文件的帮助下连接数据库

docker-compose.yml

version: "3"

services:
  patient-service:
    image: patient-service:1.0
    container_name: patient-service
    ports:
    - 9090:9090
    restart: on-failure
    networks:
      - patient-mysql
    depends_on:
      - mysql-db
    links:
      - mysql-db
  mysql-db:
    image: mysql:8
    container_name: mysql-db
    ports:
    - 3306:3306
    networks:
      - patient-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=14292
      - MYSQL_USER=root

networks:
  patient-mysql:
    其次,我会在spring boot项目的root路径下创建schema.sql文件。

schema.sql

create user 'patient_db'@'%' identified by '67546';

grant all privileges on *.* to 'patient_db'@'%';

flush privileges;

create database patient_db;

use patient_db;

create table if not exists holiday(holiday_date varchar(100),holiday_name varchar(100),created_by varchar(100),
modified_by varchar(100),created_date_time timestamp,modified_date_time timestamp,constraint pk_date_holiday primary key(holiday_date));

3.最后,在properties-mysql.yml文件的帮助下,从项目中连接到数据库上的特定架构。

 spring:
      datasource:
        url: 'jdbc:mysql://mysql-db/patient_db?createDatabaseIfNotExists=true&autoReconnect=true&llowPublicKeyRetrieval=true&useSSL=false&allowPublicKeyRetrieval=true'
        username: patient_db
        password: 67546
        driver-class-name: com.mysql.cj.jdbc.Driver
        initialization-mode: always
        tomcat:
          test-while-idle: true
          validation-query: SELECT 1
      jpa:
        database-platform: org.hibernate.dialect.MySQL8Dialect
        show-sql: true
        hibernate:
          ddl-auto: validate

则抛出以下异常

access denied for user 'patient_db'@'%' (using password yes)

我的撰写文件有什么问题?我们不能在与应用程序一起加载的schema.sql 文件中创建不同的用户吗?

github - github repo of app

【问题讨论】:

【参考方案1】:

我可以建议你更简单的方法。创建新文件夹(例如 init_scripts)并将 schema.sql 移动到此文件夹。并将这个文件夹挂载到mysql docker镜像到文件夹/docker-entrypoint-initdb.d

volumes:
  - "./init_scripts:/docker-entrypoint-initdb.d"

更多信息请阅读https://hub.docker.com/_/mysql主题

初始化一个新的实例

【讨论】:

抱歉,我在将密码上传到 *** 时编辑了密码。密码相同 你能分享可重现的例子吗? 我会分享 Github 链接。只需拉取并运行属于patient-visit-service的撰写文件 我无法构建 docker 镜像,因为我遇到了这个错误找不到 com.oracle:ojdbc6:11.2.0.4。当我尝试构建 jar 文件时 只需将其从依赖项中删除即可。如果没有,您必须在本地安装它

以上是关于使用 docker-compose 在 mysql 中创建特定模式的主要内容,如果未能解决你的问题,请参考以下文章

使用 docker-compose 链接 django 和 mysql 容器

在 docker-compose 中使用 MySQL 初始化 Hibernate 时连接被拒绝

django 无法在 docker-compose 中连接 mysql

使用 docker-compose 无法在同一网络中连接 mysql 和 spring boot

docker-compose部署mysql无法访问

在 docker-compose、nginx、mysql 和 php 上运行 wordpress