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

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.


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


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

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!


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.


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.


0

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

por exemplo:

gunzip -c file.sql.gz | mysql -u root -p database
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.