Como carrego um arquivo sql.gz no meu banco de dados? (importando)

150

Estou tentando importar um arquivo SQL compactado com gzip no mysql diretamente. Esse é o caminho certo?

mysql -uroot -ppassword mydb > myfile.sql.gz
Alex
fonte
14
Mesmo ignorando o lado do gzip da questão, a sua seta está apontando o caminho errado ...
Matt Fletcher

Respostas:

238
zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database

>gravará a saída do mysqlcomando no stdoutarquivo myfile.sql.gzque provavelmente não é o que você deseja. Além disso, este comando solicitará a senha do usuário "root" do MySQL.

joschi
fonte
15
Como uma boa prática de segurança, eu colocaria minha senha na linha de comando, deixaria o mysql solicitá-la.
Moriarty
9
Ou melhor ainda: crie ~/.my.cnfcom as credenciais. ;)
Joschi
5
Como @Prof. Moriarty explans, você pode modificar o comando para não usar a senha via zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database. Ele saberá que o último parâmetro é o banco de dados que você deseja usar, não sua senha.
bafromca
6
Para corrigir um pouco o comentário do @ Prof.Moriarty, uma boa prática de segurança seria não colocar minha senha na linha de comando (onde ela será armazenada no histórico ou vista por cima do seu ombro) e deixar o MySQL solicitá-la. Somente o sinalizador -p fará com que o MySQL solicite a senha imediatamente.
George
4
+1 para algo que deixa o despejo de banco de dados maldita comprimido
Dmitri DB
81

Para exibir uma barra de progresso ao importar um arquivo sql.gz, faça o download pve use o seguinte:

pv mydump.sql.gz | gunzip | mysql -u root -p

No CentOS / RHEL, você pode instalar o pv com yum install pv.

No Debian / Ubuntu apt-get install pv.

No MAC, brew install pv

Banjer
fonte
2
pvparece estar nos repositórios Ubuntu também (pelo menos em 12.04 LTS), mas novamente você precisa fazer sudo apt-get install pvpara obtê-lo. Obrigado Banjer, isso é perfeito para grandes importações de banco de dados!
toon81
Eu tive que executar o pv mydump.sql.gz | gunzip | mysql -u root my_database_name. Isso foi porque eu estava importando tabelas e eu não ter uma senha definida para o meu usuário root
Cristiano Mendonça
No MAC,brew install pv
pontuação
54

A maneira mais simples é descompactar o arquivo do banco de dados antes da importação. Também como mencionado por @Prof. Moriarty, você não deve especificar a senha no comando (você será solicitado a senha). Este comando retirado do webcheatsheet descompactará e importará o banco de dados de uma só vez:

gunzip < myfile.sql.gz | mysql -u root -p mydb
icc97
fonte
1
Além disso, o mydb precisa ser criado antes da importação. Isso não cria o banco de dados para você.
Siddhartha
Encontrei minha tubulação gunzipem um arquivo compactado de 10 GB que causou o congelamento da minha importação. Não tenho certeza se isso é devido a restrições de memória ou algo assim, mas eu iria errar por fazer um passo de cada vez no futuro.
Ryan Tuck
@RyanTuck que está empurrando os limites deste tipo de processos :)
icc97
@ Sidarta Isso depende do arquivo de despejo sql. Às vezes, eles incluem instruções de criação de banco de dados.
ROOBY
@rooby que faz sentido.
Siddhartha
5

No macOS, usei isso:

zcat < [Database].sql.gz | mysql -u root -p [Database Name in MySQL]

Digite sua senha e pronto!

Qasim
fonte
4

Verifique também se há alguma instrução USE no arquivo SQL. A especificação do banco de dados na linha de comando não garante que os dados sejam finalizados lá se um destino diferente for especificado no arquivo SQL.

ikso
fonte
2
Você só precisa estender o comando assim: pv mydump.sql.gz | gunzip | mysql -u root -p your_database. A resposta aceita usa essa abordagem.
bafromca
1

Para arquivos compactados bzip2 (.sql.bz2), use:

bzcat <file> | mysql -u <user> -p <database>

OU

pv <file> | bunzip2 | mysql -u <user> -p <database>

para ver a barra de progresso.

TimSparrow
fonte
0

Você pode usar a -c, --stdout, --to-stdoutopção de gunzipcomando

por exemplo:

gunzip -c file.sql.gz | mysql -u root -p database
Ali Jazayeri
fonte