web-dev-qa-db-de.com

Importieren Sie data.sql MySQL Docker Container

Wie kann ich die Datenbank in meinen mysql-Docker-Container importieren, wenn ich eine data.sql habe? Wie kann ich Datenbankdaten importieren? In einer angedockten Welt fügt dies eine Komplexitätsebene hinzu. Einige Methoden bitte.

Hier mein docker-compose.yml:

nginx:
  build: ./nginx/
  container_name: nginx-container
  ports:
    - 80:80
  links:
    - php
  volumes_from:
    - app-data

php:
  build: ./php/
  container_name: php-container
  expose:
    - 9000
  links:
    - mysql
  volumes_from:
    - app-data

app-data:
  image: php:7.0-fpm
  container_name: app-data-container
  volumes:
    - ./www/html/:/var/www/html/
  command: "true"

mysql:
  image: mysql:latest
  container_name: mysql-container
  ports:
    - 3306:3306
  volumes_from:
    - mysql-data
  environment:
    MYSQL_ROOT_PASSWORD: secret
    MYSQL_DATABASE: name_db
    MYSQL_USER: user
    MYSQL_PASSWORD: password

mysql-data:
  image: mysql:latest
  container_name: mysql-data-container
  volumes:
    - /var/lib/mysql
  command: "true"
42
Israel Morales

Ich scheine das mit dem neuesten mysql oder mysql nicht zu schaffen: 5.7. Also benutze ich stattdessen mariaDB. Hier ist mein docker-compose.yaml-Code.

version: '3'

services:
  mysql:
    image: mariadb:10.3
    container_name: mariadb
    volumes:
      - container-volume:/var/lib/mysql
      - ./dump.sql:/docker-entrypoint-initdb.d/dump.sql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: name_db
    ports:
      - "3306:3306"

volumes:
  container-volume:
22
Hana Alaydrus

Sie können die Datenbank anschließend importieren:

docker exec -i mysql-container mysql -uuser -ppassword name_db < data.sql

80
Lauri

Mounten Sie Ihren SQL-Dump unter /docker-entrypoint-initdb.d/yourdump.sql mit einem Volume-Mount

mysql:
  image: mysql:latest
  container_name: mysql-container
  ports:
    - 3306:3306
  volumes:
    - ./dump.sql:/docker-entrypoint-initdb.d/dump.sql
  environment:
    MYSQL_ROOT_PASSWORD: secret
    MYSQL_DATABASE: name_db
    MYSQL_USER: user
    MYSQL_PASSWORD: password

Dadurch wird beim Start des Containers ein Import des SQL-Dumps ausgelöst, siehe https://hub.docker.com/_/mysql/ unter "Initialisierung einer neuen Instanz".

48
Eugen Mayer

Eine weitere Option, wenn Sie kein Volume mounten möchten, aber eine Datei von Ihrem lokalen Computer sichern möchten, ist cat yourdump.sql. So wie:

cat dump.sql | docker exec -i mysql-container mysql -uuser -ppassword db_name

Siehe: https://Gist.github.com/spalladino/6d981f7b33f6e0afe6bb

13

kombiniere https://stackoverflow.com/a/51837876/1078784 und beantworte diese Frage meiner Meinung nach am besten mit:

cat {SQL FILE NAME} | docker exec -i {MYSQL CONTAINER NAME} {MYSQL PATH IN CONTAINER} --init-command="SET autocommit=0;"

in meinem System sollte dieser Befehl beispielsweise so aussehen:

cat temp.sql | docker exec -i mysql.master /bin/mysql --init-command="SET autocommit=0;"

sie können auch pv verwenden, um den Fortschritt zu überwachen:

cat temp.sql | pv | docker exec -i mysql.master /bin/mysql --init-command="SET autocommit=0;"

Und das Wichtigste hier ist "--init-command", das den Importvorgang zehnmal schneller macht.

1
Matt.Cai

Sie können einen Container ausführen, der ein freigegebenes Verzeichnis (-v Volume) festlegt, und anschließend Bash in diesem Container ausführen. Danach können Sie den mysql-client interaktiv verwenden, um die .sql-Datei im Container auszuführen. obs:/my-host-dir/shared-dir ist der .sql-Speicherort im Hostsystem.

docker run --detach --name=test-mysql -p Host-port:container-port  --env="MYSQL_ROOT_PASSWORD=my-root-pswd" -v /my-Host-dir/shared-dir:/container-dir mysql:latest


docker exec -it test-mysql bash

Im Behälter ...

mysql -p < /container-dir/file.sql 

Benutzerdefinierte Parameter:

  • test-mysql (Containername)
  • Host-Port und Container-Port
  • my-root-pswd (MySQL-Root-Passwort)
  • / mein-Host-Verzeichnis/freigegebenes-Verzeichnis und / Containerverzeichnis (das Host-Verzeichnis, das im Container bereitgestellt wird, und der Container-Speicherort des freigegebenen Verzeichnisses)

Ich hoffe diese Hilfe.

0
Caleb Santos

sie können die Exportdatei für beispielsweise dump.sql mit docker cp in den Container kopieren und dann die Datenbank importieren. Wenn Sie eine ausführliche Anleitung benötigen, lassen Sie es mich wissen und ich werde sie bereitstellen

0
Jarjob

docker-compose verwenden

cat dump.sql | docker-compose exec -T <mysql_container> mysql -u <db-username> -p<db-password> <db-name>
0
Slipstream