首页 > 解决方案 > 使用 docker-compose 在 mysql 中创建特定模式

问题描述

我必须为每个服务创建一个特定的模式。

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

码头工人-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:
  1. 其次,我会在spring boot项目schema.sql的路径下创建文件。root

架构.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 存储库

标签: javamysqlspring-bootdockerdocker-compose

解决方案


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

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

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

初始化一个新实例


推荐阅读