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"
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:
Sie können die Datenbank anschließend importieren:
docker exec -i mysql-container mysql -uuser -ppassword name_db < data.sql
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".
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
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.
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:
Ich hoffe diese Hilfe.
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
docker-compose verwenden
cat dump.sql | docker-compose exec -T <mysql_container> mysql -u <db-username> -p<db-password> <db-name>