sql >> Database >  >> RDS >> Mysql

Hoe MySql-database te initiëren in Docker Compose

Voor het laden van uw sql-bestanden alleen bij de eerste keer uitvoeren:

U kunt het onderstaande opstelbestand gebruiken

version: '2.1'
services:

  usermanagement-service:
    build: ./UserManagementService
    restart: on-failure
    ports:
      - "7778:7778"
    depends_on:
      mysqldb:
        condition: service_healthy

  mysqldb:
    image: mysql
    volumes:
      - ./mysql-data:/var/lib/mysql
      - ./mysql-init-files:/docker-entrypoint-initdb.d
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: userdb
      MYSQL_USER: testuser
      MYSQL_PASSWORD: testuser
    ports:
      - "3600:3306"
    healthcheck:
      test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
      timeout: 20s
      retries: 10

U moet uw data.sql . plaatsen en schema.sql bestanden onder ./docker-entrypoint-initdb.d directory met behulp van Volumes voor meer info .

SQL-bestanden in deze map worden alleen geladen als de DB's datadirectory leeg is (de allereerste keer dat de db-service wordt uitgevoerd) . (d.w.z.) in jouw geval ./mysql-data map moet leeg zijn

Voor je tweede probleem:

In plaats van wait-for-it.sh . te gebruiken , kunt u healthcheck . gebruiken en service_healthy . Hier usermanagement-service wordt eenmaal gestart mysqldb voert succesvol ["CMD", "mysqladmin" ,"ping", "-h", "localhost"] uit in het opgegeven interval. Voor meer details over healthcheck en depend_on, raadpleeg hier .

Heb test commando van hier .




  1. Postgres:beperking toevoegen als deze nog niet bestaat

  2. Binaire boom met PHP + MySQL

  3. is het mogelijk om op afstand toegang te krijgen tot de mysql-database op gedeelde hostings?

  4. Meerdere tabellen samenvoegen met dezelfde kolomnaam