Como importo um arquivo SQL usando a linha de comando no MySQL?

2036

Eu tenho um .sqlarquivo com uma exportação de phpMyAdmin. Quero importá-lo para um servidor diferente usando a linha de comando.

Eu tenho uma instalação do Windows Server 2008 R2. Coloquei o .sqlarquivo na unidade C e tentei este comando

database_name < file.sql

Não está funcionando. Eu recebo erros de sintaxe.

  • Como posso importar este arquivo sem problemas?
  • Preciso criar um banco de dados primeiro?
Jaylen
fonte
2
possível duplicação de stackoverflow.com/questions/11407349/…
AZinkey 29/17
8
O que há com esses caras duplicados? Este fato é uma questão útil com seu próprio propósito
Valentino Pereira
@ValentinoPereira você tem verificado datas pergunta original antes de determinar caras duplicados
AZinkey
Você pode compartilhar um exemplo reproduzível? database < file.sqlnão se parece com qualquer comando para mim, e se você ver alguns erros de sintaxe, por favor compartilhá-los
Nico Haase

Respostas:

3775

Tentar:

mysql -u username -p database_name < file.sql

Verifique as opções do MySQL .

Nota-1: É melhor usar o caminho completo do arquivo SQL file.sql.

Nota-2: Use -Re --triggerspara manter as rotinas e gatilhos do banco de dados original. Eles não são copiados por padrão.

Nota-3 Você pode ter que criar o banco de dados (vazio) a partir do mysql se ele já não existir e o SQL exportado não contiver CREATE DATABASE(exportado com --no-create-dbou -nopção), antes de poder importá-lo.

bansi
fonte
2
Quando eu executar o arquivo a partir de um programa como o Toad eu recebo nenhum erro, mas quando eu executá-lo a partir da linha de comando eu recebo o erro que eu mencionei
Jaylen
110
Note que sim, você deve criar o banco de dados (vazio) a partir do mysql, se ele ainda não existir, antes de poder importá-lo.
Skippy le Grand Gourou
17
Sim, lembre-se de criar um banco de dados vazio (se o banco de dados não existir anteriormente), a partir do console do MySQL da seguinte maneira:CREATE DATABASE db-name;
Qasim
3
Certifique-se de verificar se o arquivo de backup não possui "use 'original_db'" nele. Embora eu tenha especificado restaurar para o novo banco de dados "mysql new_db <dump.sql", o arquivo de despejo sql continha isso e substituiu meu banco de dados ativo. Não tenho certeza se existe uma opção para forçá-lo a usar o banco de dados especificado e desconsiderar o "use 'original_db'" no arquivo sql
Shaakir
7
@ Joe, sim, se você tiver um espaço entre '-p' e 'password', ele pensará que 'password' é o nome do banco de dados. Como alternativa, você pode digitar '-p' sem a sua senha e será solicitada uma senha ao pressionar enter.
precisa saber é o seguinte
765

Um uso comum do mysqldump é para fazer um backup de um banco de dados inteiro:

shell> mysqldump db_name > backup-file.sql

Você pode carregar o arquivo de despejo de volta no servidor assim:

UNIX

shell> mysql db_name < backup-file.sql

O mesmo no prompt de comando do Windows :

mysql -p -u [user] [database] < backup-file.sql

PowerShell

C:\> cmd.exe /c "mysql -u root -p db_name < backup-file.sql"

Linha de comando do MySQL

mysql> use db_name;
mysql> source backup-file.sql;
vladkras
fonte
@ Mike Você está tentando iniciá-lo na mysql>linha de comando? Você deve usar o shell.
Vladkras
Como uso o Shell? Estou usando o mysql5.6 no Windows Server 2008
Jaylen
Usando o Windows PowerShell digitando MySQL db_name <file.sql, recebo o seguinte erro: o operador '<' está reservado para uso futuro
Jaylen
31
Tenha cuidado ao usar o> para redirecionar a saída do mysqldump para um arquivo, especialmente se você quiser controlar a codificação. Em vez disso, você provavelmente deseja usar o parâmetro --result-file para que a codificação não seja controlada pelo shell / OS.
Bernard Chen
1
Certo, mas ... por que não fugir mysqldiretamente do Powershell?
Charles Wood
330

Quanto ao tempo necessário para importar arquivos enormes: o mais importante é que leva mais tempo porque a configuração padrão do MySQL é autocommit = true. Você deve configurá-lo antes de importar seu arquivo e depois verificar como a importação funciona como uma gema.

Você só precisa fazer o seguinte:

mysql> use db_name;

mysql> SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;
Paresh Behede
fonte
5
Existe uma maneira de fazer isso em uma única linha de comando no comando mysql usado para importação?
Volomike 21/01
Melhor resposta inho. Foi o sourcecomando que eu esqueci. A maioria de nós deseja fazer isso enquanto estiver logado como comando independente, entre outros comandos, não o oneliner padrão de login> injetar> logout na parte superior do Google Serps.
Davidkonrad 10/03
19
Concordo que esta é a melhor resposta . A autocommit=0parte fez um mundo de diferença em termos de velocidade.
aexl
2
o autocommit=0funcionará em arquivos maiores? como arquivo sql de 8gb.
novato
3
Nem sempre é necessário desligar autocommit. Vale a pena verificar o despejo de banco de dados em um editor, já pode começar SET autocommit=0;.
Hashchange 2/07
127

Entre todas as respostas, para o problema acima, esta é a melhor:

 mysql> use db_name;
 mysql> source file_name.sql;
Manoj Kumar
fonte
aconselhar acima falhou em erro db já existe, mas isso parece obras
luky
74

Podemos usar este comando para importar o SQL da linha de comando:

mysql -u username -p password db_name < file.sql

Por exemplo, se o nome de usuário for roote a senha for password. E você tem um nome de banco de dados como banke o arquivo SQL é bank.sql. Então, basta fazer o seguinte:

mysql -u root -p password bank < bank.sql

Lembre-se de onde está o seu arquivo SQL. Se o seu arquivo SQL estiver na Desktoppasta / diretório, acesse o diretório da área de trabalho e digite o comando da seguinte maneira:

~ ? cd Desktop
~/Desktop ? mysql -u root -p password bank < bank.sql

E se você estiver no Projectdiretório e seu arquivo SQL estiver no Desktopdiretório Se você deseja acessá-lo a partir do Projectdiretório, faça o seguinte:

~/Project ? mysql -u root -p password bank < ~/Desktop/bank.sql
Amrit Dhungana
fonte
22
Não deve haver um espaço entre -pepassword
Ejaz
Jap. Isso não funcionaria. Correto seriamysql -u root -p"password" bank < bank.sql
Armin
4
por que você simplesmente não pode responder em uma linha? mysql -u username -ppassword db_name < file.sql
Naveed
6
Embora isso não tenha relação com esta pergunta / resposta, quando você estiver trabalhando com bancos de dados não triviais, prefira NÃO digitar a senha no mesmo comando em texto sem formatação. Não especificar a senha como parte do comando solicitará a senha que você pode inserir com segurança
asgs
3
Especialmente por causa de.bash_history
Neil Chowdhury
64

A maneira mais fácil de importar para o seu esquema:

Entre no mysql e execute os comandos abaixo mencionados.

mysql> use your_db_name;

mysql> source /opt/file.sql;
Ammad
fonte
5
Isto irá funcionar sem o comando 'uso', lixeiras com db multilpe nele
Hayden Thring
1
Eu estava tentando importar um despejo de um banco de dados com um nome diferente, mas com a mesma estrutura, a resposta certa escolhida pelo autor não funcionou, ele criou um novo banco de dados com o nome do banco de dados no arquivo de despejo. Esta resposta aqui mesmo fiz o que queria, graças homem
Wuelber Castillo
1
ótimo! exatamente o que eu estava procurando!
Sergei Zahharenko 23/11
2
isso também monitora a execução do script, muito melhor do que as outras respostas
refex
61

Se você já possui o banco de dados, use o seguinte para importar o dumpou o sqlarquivo:

mysql -u username -p database_name < file.sql

se você não precisar criar o banco de dados relevante (vazio) no MySQL, para esse primeiro logon no MySQLconsole, execute o seguinte comando no terminal ou no cmd

mysql -u userName -p;

E quando solicitado, forneça a senha.

Em seguida, crie um banco de dados e use-o:

mysql>create database yourDatabaseName;
mysql>use yourDatabaseName;

Em seguida, importe o sqlou o dumparquivo para o banco de dados de

mysql> source pathToYourSQLFile;

Nota: se o seu terminal não estiver no local onde o arquivo dumpou sqlexiste, use o caminho relativo acima.

Kasun Siyambalapitiya
fonte
Sua resposta teve uma solução básica para iniciantes do MySQL como eu: 1.Crie o banco de dados, se não existir. 2.Aponte o arquivo de origem para o banco de dados criado para importar dados / metadados.
Sumanth Lazarus
60
  1. Abra a linha de comando do MySQL
  2. Digite o caminho do seu diretório mysql bin e pressione Enter
  3. Cole seu arquivo SQL dentro da binpasta do servidor mysql.
  4. Crie um banco de dados no MySQL.
  5. Use esse banco de dados específico para o qual deseja importar o arquivo SQL.
  6. Tipo source databasefilename.sqleEnter
  7. Seu arquivo SQL foi carregado com sucesso.
user4412947
fonte
2
Ype o caminho do seu diretório mysql bin e pressione
Ramesh Pareek
46

Uma solução que funcionou para mim está abaixo:

Use your_database_name;
SOURCE path_to_db_sql_file_on_your_local;
Shiks
fonte
Isso funcionou para mim usando o MySQL Command Line Client, depois de colocar meu arquivo sql no diretório / bin apropriado do windows explorer. Graças
klewis
3
Um pouco lento, mas não pára no meio e não diz que o servidor MySQL foi embora.
perfil completo de Jaskaran Singh
39

Para despejar um banco de dados em um arquivo SQL, use o seguinte comando.

mysqldump -u username -p database_name > database_name.sql

Para importar um arquivo SQL para um banco de dados (verifique se você está no mesmo diretório que o arquivo SQL ou forneça o caminho completo para o arquivo), faça:

mysql -u username -p database_name < database_name.sql
Adeleke Akinade
fonte
37

Vá para o diretório em que você tem o MySQL executável. -upara nome de usuário e -psolicitar a senha:

C:\xampp\mysql\bin>mysql -u username -ppassword databasename < C:\file.sql
Tanmay Patel
fonte
5
Eu acho que seria mais útil para o OP e mais perguntas, quando você acrescenta alguma explicação à sua intenção.
Repórter
Isso funcionaria apenas se você tivesse o mysql.exe definido nas variáveis ​​de ambiente do Windows. Caso contrário, você deve digitar todo o caminho para o arquivo mysql.exe. E sua sintaxe está errada. Por exemplo: "d: \ wamp \ bin \ mysql \ mysql5.5.8 \ bin \ mysql.exe -u YOUR_USERNAME -p DB_NAME <FILENAME.SQL" Mais informações aqui: wpy.me/en/blog/…
wappy
31

Eu acho que vale a pena mencionar que você também pode carregar um arquivo compactado com gzipzcat como mostrado abaixo:

zcat database_file.sql.gz | mysql -u username -p -h localhost database_name
Francesco Casula
fonte
28

Para importar um único banco de dados, use o seguinte comando.

mysql -u username -p password dbname < dump.sql

Para importar vários despejos de banco de dados, use o seguinte comando.

mysql -u username -p password < dump.sql
Leopathu
fonte
20
mysql --user=[user] --password=[password] [database] < news_ml_all.sql
user3546602
fonte
17

Para importar vários arquivos SQL de uma vez, use o seguinte:

# Unix-based solution
for i in *.sql;do mysql -u root -pPassword DataBase < $i;done

Para importação simples:

# Unix-based solution
mysql -u root -pPassword DataBase < data.sql

Para WAMP :

#mysqlVersion replace with your own version
C:\wamp\bin\mysql\mysqlVersion\bin\mysql.exe -u root -pPassword DataBase < data.sql

Para XAMPP:

C:\xampp\mysql\bin\mysql -u root -pPassword DataBase < data.sql
Abdul Rehman Janjua
fonte
16

Você não precisa especificar o nome do banco de dados na linha de comandos se o arquivo .sql contiver CREATE DATABASE IF NOT EXISTS db_namee USE db_nameinstruções.

Apenas verifique se você está se conectando a um usuário com permissões para criar o banco de dados, se o banco de dados mencionado no arquivo .sql não existir.

Reuben
fonte
14

Importar um banco de dados

  1. Vá para dirigir:

    command: d:
  2. Login no MySQL

    command: c:\xampp\mysql\bin\mysql -u root -p
  3. Ele solicitará pwd. Digite:

    pwd
  4. Selecione o banco de dados

    use DbName;
  5. Forneça o nome do arquivo

    \.DbName.sql
Pritam Chaudhari
fonte
11

Vá para o diretório em que você possui o MySQL.

 c:\mysql\bin\> mysql -u username -p password database_name <
 filename.sql

Também para despejar todos os bancos de dados, use a -all-databasesopção e nenhum nome de banco de dados precisa ser especificado mais.

mysqldump -u username -ppassword all-databases > dump.sql

Ou você pode usar alguns clientes da GUI como o SQLyog para fazer isso.

Sathish D
fonte
11

Usar:

mysql -u root -p password -D database_name << import.sql

Use a ajuda do MySQL para detalhes - mysql --help.

Eu acho que essas serão opções úteis em nosso contexto:

[~]$ mysql --help
mysql  Ver 14.14 Distrib 5.7.20, for osx10.12 (x86_64) using  EditLine wrapper
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Usage: mysql [OPTIONS] [database]
  -?, --help          Display this help and exit.
  -I, --help          Synonym for -?
  --bind-address=name IP address to bind to.
  -D, --database=name Database to use.
  --delimiter=name    Delimiter to be used.
  --default-character-set=name Set the default character set.
  -f, --force         Continue even if we get an SQL error.
  -p, --password[=name] Password to use when connecting to server.
  -h, --host=name     Connect to host.
  -P, --port=#        Port number to use for connection or 0 for default to, in order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default (3306).
  --protocol=name     The protocol to use for connection (tcp, socket, pipe,
  -s, --silent        Be more silent. Print results with a tab as separator, each row on new line.
  -v, --verbose       Write more. (-v -v -v gives the table output format).
  -V, --version       Output version information and exit.
  -w, --wait          Wait and retry if connection is down.

O que é divertido, se estamos importando um banco de dados grande e sem uma barra de progresso. Use o Pipe Viewer e veja a transferência de dados através do pipe

Para Mac, brew install pv

Para o Debian / Ubuntu apt-get install pv,.

Para outros, consulte pv - Pipe Viewer

pv import.sql | mysql -u root -p password -D database_name

1.45GiB 1:50:07 [339.0KiB/s]   [=============>      ] 14% ETA 11:09:36
1.46GiB 1:50:14 [ 246KiB/s]     [=============>      ] 14% ETA 11:09:15
1.47GiB 1:53:00 [ 385KiB/s]     [=============>      ] 14% ETA 11:05:36
Siva Praveen
fonte
Para Centos:yum install pv
Jonny
10

Adicione a --forceopção :

mysql -u username -p database_name --force < file.sql
ktaria
fonte
9

Embora a maioria das respostas aqui apenas mencione o comando simples

mysql -u database_user -p [db_name] <database_file.sql

hoje é bastante comum que bancos de dados e tabelas possuam utf8-collation, onde esse comando não é suficiente. Tendo o utf8-collation nas tabelas exportadas, é necessário usar este comando:

mysql -u database_user -p --default-character-set = utf8 [db_name] <database_file.sql

Surley também funciona para outros charsets, como mostrar a notação correta pode ser visto aqui:

https://dev.mysql.com/doc/refman/5.7/en/show-collation.html

Um comentário mencionou também que, se um banco de dados nunca existir, é necessário primeiro criar um banco de dados vazio. Isso pode estar correto em alguns casos, mas depende do arquivo de exportação. Se o arquivo exportado já incluir o comando para criar o banco de dados, ele nunca precisará ser criado em uma etapa separada, o que pode causar um erro na importação. Portanto, na importação, é recomendável consultar primeiro o arquivo para saber quais comandos estão incluídos nele; na exportação, é recomendável observar as configurações, especialmente se o arquivo for muito grande e difícil de ler em um editor.

Ainda existem mais parâmetros para o comando listados e explicados aqui:

https://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html

Se você usar outra versão do banco de dados, considere procurar também a versão correspondente do manual. Os links mencionados se referem à versão 5.7 do MySQL.

David
fonte
9

Para exportar um banco de dados:

mysqldump -u username -p database_name > file.sql

Para importar um banco de dados:

mysql -u username -p database_name < file.sql
user777388
fonte
8

O comando a seguir funciona para mim na linha de comando (cmd) no Windows 7 no WAMP .

d:/wamp/bin/mysql/mysql5.6.17/bin/mysql.exe -u root -p db_name < database.sql
vencedor
fonte
7

Eu pensei que poderia ser útil para aqueles que estão usando o Mac OS X :

/Applications/xampp/xamppfiles/bin/mysql -u root -p database < database.sql

Substitua xampppor mampou outros servidores da web.

Giri
fonte
6

Às vezes, a porta definida e o endereço IP do servidor desse banco de dados também são importantes ...

mysql -u user -p user -h <Server IP> -P<port> (DBNAME) < DB.sql 
JohnSharath
fonte
6

Importe para o banco de dados:

mysql -u nome de usuário -p database_name </ file path / file_name.sql

Exporte do banco de dados:

mysqldump -u nome de usuário -p database_name> / file path / file_name.sql

Após esses comandos, um prompt solicitará sua senha do MySQL.

NeeruKSingh
fonte
5

Para fins de backup, crie um arquivo BAT e execute-o usando o Agendador de tarefas . Será necessário um backup do banco de dados; copie a linha a seguir e cole no Bloco de notas , salve o arquivo .bat e execute-o no seu sistema.

@echo off
for /f "tokens=1" %%i in ('date /t') do set DATE_DOW=%%i
for /f "tokens=2" %%i in ('date /t') do set DATE_DAY=%%i
for /f %%i in ('echo %date_day:/=-%') do set DATE_DAY=%%i
for /f %%i in ('time /t') do set DATE_TIME=%%i
for /f %%i in ('echo %date_time::=-%') do set DATE_TIME=%%i

"C:\Program Files\MySQL\mysql server 5.5\bin\mysqldump" -u username -ppassword mysql>C:/%DATE_DAY%_%DATE_TIME%_database.sql
user3728517
fonte
5

As etapas a seguir ajudam a carregar file.sqlno banco de dados MySQL.

Passo 1: Carregar file.sql.zippara qualquer diretório e descompacte lá
Nota : sudo apt-get install unzip : sudo apt-get unzip file.sql.zip
Passo 2: Agora navegue para esse diretório. Exemplo:cd /var/www/html

Etapa 3: mysql -u username -p database-name < file.sql
digite a senha e aguarde até o upload ser concluído.

Ramesh Sinha
fonte
5

Continuei correndo para o problema em que o banco de dados não foi criado.

Eu consertei assim

mysql -u root -e "CREATE DATABASE db_name"
mysql db_name --force < import_script.sql
David Silva Smith
fonte