Si j'ai un data.sql, comment puis-je importer une base de données dans mon conteneur docker mysql? Comment puis-je importer des données de base de données. Dans un monde dockerisé, cela ajoute une couche de complexité. quelques méthodes s'il vous plaît.
Voici mon 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"
Réponses:
Je n'arrive pas à faire fonctionner cela avec le dernier mysql ou mysql: 5.7. J'utilise donc mariaDB à la place. Voici mon
docker-compose.yaml
code.la source
cd /docker-entrypoint-initdb.d/dump.sql/
& puis je suis dans un répertoire? Qu'est-ce qui provoquerait la création d'un répertoire au lieu de ne pas avoir du tout le fichier .sql ou de générer une sorte d'erreur? mon docker-compose.yml pertinent pour le conteneur mariadb:mariadb: image: mariadb:latest ... volumes: - app-vhosts:/path/before/sqldump #creates a directory? - ./path/to/sql/dump.sql:/docker-entrypoint-initdb.d/dump.sql
Vous pouvez ensuite importer la base de données:
docker exec -i mysql-container mysql -uuser -ppassword name_db < data.sql
la source
docker exec -i $(docker-compose ps -q mysql-container) mysql …
. Il ne prend pas en charge la lecture depuis stdin pour le moment, comme décrit ici .-p
sans mot de passe pour des raisons de sécurité.-t
option pourdocker exec
? Juse utilise-i
pour éviter l'erreurMontez votre sql-dump en
/docker-entrypoint-initdb.d/yourdump.sql
utilisant un montage de volumeCela déclenchera une importation du sql-dump lors du démarrage du conteneur, voir https://hub.docker.com/_/mysql/ sous "Initialisation d'une nouvelle instance"
la source
Une autre option si vous ne voulez pas monter un volume, mais voulez vider un fichier de votre machine locale, est de rediriger
cat yourdump.sql
. Ainsi:Voir: https://gist.github.com/spalladino/6d981f7b33f6e0afe6bb
la source
dump.sql
contient dessource
fichiersImporter à l'aide de docker-compose
la source
combinez https://stackoverflow.com/a/51837876/1078784 et répondez à cette question, je pense que la meilleure réponse est:
cat {SQL FILE NAME} | docker exec -i {MYSQL CONTAINER NAME} {MYSQL PATH IN CONTAINER} --init-command="SET autocommit=0;"
par exemple dans mon système, cette commande devrait ressembler à:
cat temp.sql | docker exec -i mysql.master /bin/mysql --init-command="SET autocommit=0;"
vous pouvez également utiliser pv pour surveiller la progression:
cat temp.sql | pv | docker exec -i mysql.master /bin/mysql --init-command="SET autocommit=0;"
Et le plus important ici est "--init-command" qui accélérera la progression de l'importation 10 fois plus vite.
la source
Je peux importer avec cette commande
la source
docker-compose exec -T [host] mysql -u [mysql user] -p[password] [database] < localfile.sql
. De plus, je pense qu'il y a une erreur dans votre déclaration. Il devrait y avoir un espace entre-u
et le nom d'utilisateur lui-même.vous pouvez suivre ces étapes simples:
PREMIÈRE FAÇON:
copiez d'abord le fichier de vidage SQL de votre répertoire local vers le conteneur mysql. utiliser la commande docker cp
puis exécutez le conteneur mysql en utilisant (REMARQUE: si vous utilisez la version alpine, vous devez remplacer bash par sh dans la commande ci-dessous.)
puis vous pouvez simplement importer ce fichier de vidage SQL.
DEUXIÈME MANIÈRE: SIMPLE
Comme mentionné dans la page officielle du hub mysql Docker.
Chaque fois qu'un conteneur démarre pour la première fois, une nouvelle base de données est créée avec le nom spécifié dans la variable MYSQL_DATABASE - que vous pouvez transmettre en configurant la variable d'environnement voir ici comment définir les variables d'environnement
Par défaut, le conteneur exécutera les fichiers avec les extensions .sh, .sql et .sql.gz qui se trouvent dans le dossier /docker-entrypoint-initdb.d. Les fichiers seront exécutés par ordre alphabétique. de cette façon, vos fichiers SQL seront importés par défaut dans la base de données spécifiée par la variable MYSQL_DATABASE.
pour plus de détails, vous pouvez toujours visiter la page officielle
la source
Vous pouvez exécuter un conteneur définissant un répertoire partagé (-v volume), puis exécuter bash dans ce conteneur. Après cela, vous pouvez utiliser de manière interactive mysql-client pour exécuter le fichier .sql, depuis l'intérieur du conteneur. obs: / my-host-dir / shared-dir est l'emplacement .sql dans le système hôte.
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
À l'intérieur du conteneur ...
Paramètres personnalisés:
la source
Celui-ci fonctionne pour moi
$ docker exec -i NAME_CONTAINER_MYSQL mysql -u DB_USER -pPASSWORD DATABASE < /path/to/your/file.sql
Tout d'abord, si vous voulez savoir ce qu'est le NAME_CONTAINER_MYSQL, vous devez utiliser cette commande ci-dessous:
$ docker ps
Dans la colonne de sortie NAME, vous verrez le NAME_CONTAINER_MYSQL que vous devez remplacer dans la commande ci-dessus.
la source
Essayer
"docker exec ... < data.sql"
dans les réponses Windows PowerShell avec:Mais on peut conclure avec
cmd /c
pour éliminer le problème:la source
vous pouvez copier le fichier d'exportation pour, par exemple, dump.sql à l'aide de docker cp dans le conteneur, puis importer la base de données. si vous avez besoin d'instructions complètes, faites-le moi savoir et je vous fournirai
la source