sql >> Database >  >> RDS >> Mysql

MySQL instellen en dump importeren in Dockerfile

De nieuwste versie van de officiële mysql docker-afbeelding stelt u in staat om gegevens te importeren bij het opstarten. Hier is mijn docker-compose.yml

data:
  build: docker/data/.
mysql:
  image: mysql
  ports:
    - "3307:3306"
  environment:
    MYSQL_ROOT_PASSWORD: 1234
  volumes:
    - ./docker/data:/docker-entrypoint-initdb.d
  volumes_from:
    - data

Hier heb ik mijn data-dump.sql onder docker/data die relatief is ten opzichte van de map van waaruit de docker-compose wordt uitgevoerd. Ik mount dat sql-bestand in deze map /docker-entrypoint-initdb.d op de container.

Als je geïnteresseerd bent om te zien hoe dit werkt, bekijk dan hun docker-entrypoint.sh in GitHub. Ze hebben dit blok toegevoegd om het importeren van gegevens toe te staan

    echo
    for f in /docker-entrypoint-initdb.d/*; do
        case "$f" in
            *.sh)  echo "$0: running $f"; . "$f" ;;
            *.sql) echo "$0: running $f"; "${mysql[@]}" < "$f" && echo ;;
            *)     echo "$0: ignoring $f" ;;
        esac
        echo
    done

Een aanvullende opmerking:als u wilt dat de gegevens behouden blijven, zelfs nadat de mysql-container is gestopt en verwijderd, moet u een afzonderlijke gegevenscontainer hebben, zoals u ziet in de docker-compose.yml. De inhoud van de datacontainer Dockerfile is heel eenvoudig.

FROM n3ziniuka5/ubuntu-oracle-jdk:14.04-JDK8

VOLUME /var/lib/mysql

CMD ["true"]

De gegevenscontainer hoeft niet eens in de startstatus te zijn voor persistentie.



  1. Cloud Vendor Deep-Dive:PostgreSQL op DigitalOcean

  2. Hoe bepaal ik welk type index in Postgres moet worden gebruikt?

  3. Hoe verander ik een tabel-ID van serieel naar identiteit?

  4. MySQL-fout:mysql_fetch_assoc() verwacht dat parameter 1 resource is