Wie kann ich eine Datenbank in meinen MySQL-Docker-Container importieren, wenn ich eine data.sql habe? Wie kann ich Datenbankdaten importieren? In einer Docker-Welt erhöht dies die Komplexität. einige Methoden bitte.
Hier meine 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"
Antworten:
Ich kann nicht scheinen, diese Arbeit mit dem neuesten mysql oder mysql: 5.7 zu machen. Also benutze ich stattdessen mariaDB. Hier ist mein
docker-compose.yaml
Code.quelle
Anschließend können Sie die Datenbank importieren:
docker exec -i mysql-container mysql -uuser -ppassword name_db < data.sql
quelle
docker exec -i $(docker-compose ps -q mysql-container) mysql …
. Das Lesen von stdin wird derzeit nicht unterstützt, wie hier beschrieben .-p
aus Sicherheitsgründen ohne Passwort.-t
Option für verwendetdocker exec
? Juse verwenden-i
, um den Fehler zu vermeidenMounten Sie Ihren SQL-Dump unter
/docker-entrypoint-initdb.d/yourdump.sql
Verwendung eines Volume-MountDies löst beim Start des Containers einen Import des SQL-Dumps aus (siehe https://hub.docker.com/_/mysql/ unter "Initialisieren einer neuen Instanz").
quelle
Eine andere Option, wenn Sie kein Volume bereitstellen möchten, aber eine Datei von Ihrem lokalen Computer sichern möchten, ist das Weiterleiten
cat yourdump.sql
. Wie so:Siehe: https://gist.github.com/spalladino/6d981f7b33f6e0afe6bb
quelle
dump.sql
enthältsource
Importieren Sie mit Docker-Compose
quelle
Kombinieren Sie https://stackoverflow.com/a/51837876/1078784 und Antworten in dieser Frage. Ich denke, die beste Antwort ist:
In meinem System sollte dieser Befehl beispielsweise folgendermaßen aussehen:
Sie können auch pv verwenden , um den Fortschritt zu überwachen:
Und das Wichtigste hier ist "--init-command", der den Importvorgang zehnmal schneller beschleunigt.
quelle
Ich kann mit diesem Befehl importieren
quelle
docker-compose exec -T [host] mysql -u [mysql user] -p[password] [database] < localfile.sql
. Außerdem denke ich, dass Ihre Aussage einen Fehler enthält. Zwischen-u
und dem Benutzernamen selbst sollte ein Leerzeichen stehen .Sie können diese einfachen Schritte ausführen:
ERSTER WEG:
Kopieren Sie zuerst die SQL-Dump-Datei aus Ihrem lokalen Verzeichnis in den MySQL-Container. Verwenden Sie den Docker-Befehl cp
und führen Sie dann den MySQL-Container mit aus (HINWEIS: Wenn Sie eine alpine Version verwenden, müssen Sie bash im folgenden Befehl durch sh ersetzen.)
und dann können Sie einfach diese SQL-Dump-Datei importieren.
ZWEITER WEG: EINFACH
Wie auf der offiziellen Seite des MySQL Docker Hub erwähnt.
Wenn ein Container zum ersten Mal gestartet wird, wird eine neue Datenbank mit dem angegebenen Namen in der Variablen MYSQL_DATABASE erstellt. Diese können Sie durch Einrichten der Umgebungsvariablen übergeben. Informationen zum Festlegen von Umgebungsvariablen finden Sie hier
Standardmäßig führt der Container Dateien mit den Erweiterungen .sh, .sql und .sql.gz aus, die sich im Ordner /docker-entrypoint-initdb.d befinden. Dateien werden in alphabetischer Reihenfolge ausgeführt. Auf diese Weise werden Ihre SQL-Dateien standardmäßig in die von der Variablen MYSQL_DATABASE angegebene Datenbank importiert.
Für weitere Informationen können Sie jederzeit die offizielle Seite besuchen
quelle
Sie können einen Container ausführen, der ein freigegebenes Verzeichnis (-v Volume) festlegt, und dann Bash in diesem Container ausführen. Danach können Sie den MySQL-Client interaktiv verwenden, um die SQL-Datei aus dem Container heraus auszuführen. obs: / my-host-dir / shared-dir ist der SQL-Speicherort im Host-System.
Im Container ...
Benutzerdefinierte Parameter:
quelle
Dieser arbeitet für mich
$ docker exec -i NAME_CONTAINER_MYSQL mysql -u DB_USER -pPASSWORD DATABASE < /path/to/your/file.sql
Wenn Sie wissen möchten, was NAME_CONTAINER_MYSQL ist, sollten Sie zunächst den folgenden Befehl verwenden:
$ docker ps
In der Ausgabespalte NAME sehen Sie NAME_CONTAINER_MYSQL, die Sie im obigen Befehl ersetzen müssen.
quelle
Sie können die Exportdatei für z. B. dump.sql mit Docker-CP in den Container kopieren und dann die Datenbank importieren. Wenn Sie vollständige Anweisungen benötigen, lassen Sie es mich wissen und ich werde sie bereitstellen
quelle