Se eu tiver um data.sql, como posso importar o banco de dados para o meu container docker mysql? Como posso importar dados de banco de dados. Em um mundo encaixado, isso adiciona uma camada de complexidade. alguns métodos, por favor.
Aqui meu 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"
Respostas:
Não consigo fazer isso funcionar com o mysql ou mysql mais recente: 5.7. Então, eu uso o mariaDB. Aqui está meu
docker-compose.yaml
código.fonte
cd /docker-entrypoint-initdb.d/dump.sql/
& então estou em um diretório? O que faria com que um diretório fosse criado em vez de não ter o arquivo .sql lá ou gerar algum tipo de erro? meu docker-compose.yml relevante para o contêiner 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
Você pode importar o banco de dados depois:
docker exec -i mysql-container mysql -uuser -ppassword name_db < data.sql
fonte
docker exec -i $(docker-compose ps -q mysql-container) mysql …
. Ele não suporta a leitura de stdin no momento, conforme descrito aqui .-p
sem senha para fins de segurança.-t
opção paradocker exec
? Juse use-i
para evitar o erroMonte seu sql-dump
/docker-entrypoint-initdb.d/yourdump.sql
usando uma montagem de volumeIsso acionará uma importação do sql-dump durante o início do contêiner, consulte https://hub.docker.com/_/mysql/ em "Inicializando uma nova instância"
fonte
Outra opção se você não quiser montar um volume, mas quiser despejar um arquivo de sua máquina local, é canalizar
cat yourdump.sql
. Igual a:Veja: https://gist.github.com/spalladino/6d981f7b33f6e0afe6bb
fonte
dump.sql
contiversource
arquivosImportar usando docker-compose
fonte
combine https://stackoverflow.com/a/51837876/1078784 e as respostas a esta pergunta, acho que a melhor resposta é:
cat {SQL FILE NAME} | docker exec -i {MYSQL CONTAINER NAME} {MYSQL PATH IN CONTAINER} --init-command="SET autocommit=0;"
por exemplo, em meu sistema, este comando deve ser semelhante a:
cat temp.sql | docker exec -i mysql.master /bin/mysql --init-command="SET autocommit=0;"
também você pode usar pv para monitorar o progresso:
cat temp.sql | pv | docker exec -i mysql.master /bin/mysql --init-command="SET autocommit=0;"
E o mais importante aqui é o "--init-command" que irá acelerar o progresso da importação 10 vezes mais rápido.
fonte
Posso importar com este comando
fonte
docker-compose exec -T [host] mysql -u [mysql user] -p[password] [database] < localfile.sql
. Além disso, acho que há um erro na sua declaração. Deve haver um espaço entre-u
e o próprio nome de usuário.você pode seguir estas etapas simples:
PRIMEIRA MANEIRA:
primeiro copie o arquivo de despejo SQL de seu diretório local para o contêiner mysql. usar o comando docker cp
e então execute o mysql-container usando (NOTA: caso você esteja usando a versão alpina, você precisa substituir bash por sh no comando fornecido abaixo.)
e então você pode simplesmente importar este arquivo de despejo SQL.
SEGUNDA MANEIRA: SIMPLES
Conforme mencionado na página oficial do hub mysql Docker.
Sempre que um contêiner é iniciado pela primeira vez, um novo banco de dados é criado com o nome especificado na variável MYSQL_DATABASE - que você pode passar configurando a variável de ambiente veja aqui como definir as variáveis de ambiente
Por padrão, o contêiner executará arquivos com extensões .sh, .sql e .sql.gz que são encontrados na pasta /docker-entrypoint-initdb.d. Os arquivos serão executados em ordem alfabética. desta forma, seus arquivos SQL serão importados por padrão para o banco de dados especificado pela variável MYSQL_DATABASE.
para mais detalhes você pode sempre visitar a página oficial
fonte
Você pode executar um contêiner configurando um diretório compartilhado (volume -v) e, em seguida, executar o bash nesse contêiner. Depois disso, você pode usar interativamente o mysql-client para executar o arquivo .sql, de dentro do contêiner. obs: / my-host-dir / shared-dir é o local .sql no sistema host.
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
Dentro do contêiner ...
Parâmetros personalizados:
fonte
Este funciona para mim
$ docker exec -i NAME_CONTAINER_MYSQL mysql -u DB_USER -pPASSWORD DATABASE < /path/to/your/file.sql
Primeiramente, se você deseja saber o que é NAME_CONTAINER_MYSQL, deve usar este comando abaixo:
$ docker ps
Na coluna de saída NAME, você verá o NAME_CONTAINER_MYSQL que precisa ser substituído no comando acima.
fonte
Tentando
"docker exec ... < data.sql"
nas respostas do Windows PowerShell com:Mas pode-se resolver
cmd /c
para eliminar o problema:fonte
você pode copiar o arquivo de exportação para, por exemplo, dump.sql usando docker cp para o contêiner e, em seguida, importar o banco de dados. se precisar de instruções completas, me avise e eu irei fornecer
fonte