Como importar um ficheiro SQL com a linha de comandos do MySQL?
tenho um ficheiro .sql
com uma exportação de phpMyAdmin
. Eu quero importá-lo para um servidor diferente usando a linha de comando.
eu tenho uma instalaçãoWindows Server 2008 R2. Eu coloquei o arquivo .sql
no unidade C, e eu tentei este comando.
database_name < file.sql
Não está a funcionar. tenho erros de sintaxe.
-
Como posso importar este ficheiro sem problemas?
Preciso de criar uma base de dados primeiro?
30 answers
Tenta:
mysql -u username -p database_name < file.sql
Verifique As Opções Do MySQL .
Nota-1: é melhor usar a localização completa do ficheiro SQL file.sql
.
Nota-2: usar -R
e --triggers
para manter as rotinas e gatilhos da base de dados original. Eles não são copiados por padrão.
Um uso comum de mysqldump é para fazer uma cópia de segurança de uma base de dados inteira:
shell> mysqldump db_name > backup-file.sql
Você pode carregar o ficheiro dump de volta para o servidor assim:
UNIX
shell> mysql db_name < backup-file.sql
O mesmo em Windows comando prompt:
mysql -p -u [user] [database] < backup-file.sql
PowerShell
C:\> cmd.exe /c "mysql -u root -p db_name < backup-file.sql"
Linha de comandos MySQL
mysql> use db_name;
mysql> source backup-file.sql;
Em relação ao tempo necessário para a importação de ficheiros enormes: mais importante ainda, demora mais tempo porque a configuração predefinida do MySQL é autocommit = true
. Você deve ativar isso antes de importar o seu arquivo e, em seguida, verificar como a importação funciona como uma jóia.
Só tens de fazer a seguinte coisa:
mysql> use db_name;
mysql> SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;
Entre todas as respostas, para o problema acima, este é o melhor:
mysql> use db_name;
mysql> source file_name.sql;
Podemos usar este comando para importar SQL da linha de comandos:
mysql -u username -p password db_name < file.sql
Por exemplo, se o Utilizador for root
e a senha for password
. E você tem um nome de banco de dados como bank
e o arquivo SQL é bank.sql
. Então, simplesmente faça assim:
mysql -u root -p password bank < bank.sql
Lembra-te onde está o teu ficheiro SQL. Se o seu ficheiro SQL estiver na pasta/pasta Desktop
, Então vá para a pasta do ambiente de trabalho e indique o comando assim:
~ ? cd Desktop
~/Desktop ? mysql -u root -p password bank < bank.sql
E se estiver no directório Project
e o seu ficheiro SQL estiver no Desktop
directório. Se você quiser acessá-lo a partir do diretório Project
então você pode fazer assim:
~/Project ? mysql -u root -p password bank < ~/Desktop/bank.sql
- Abra a linha de comandos MySQL
- Escreva a localização do seu directório de bin mysql e carregue em indique
- cole o seu ficheiro SQL dentro da pasta
bin
do servidor de mysql.
Cria uma base de dados no MySQL.
- Use essa base de dados em particular onde deseja importar o ficheiro SQL.
- Tipo
source databasefilename.sql
e indique - o seu ficheiro SQL foi enviado com sucesso.
Se já tiver a base de dados use o seguinte para importar o dump
ou o sql
ficheiro
mysql -u username -p database_name < file.sql
Se não precisar de criar a base de Dados relevante (vazia) no MySQL, para o primeiro registo na consola {[[6]}, executando o seguinte comando no terminal ou no cmd
mysql -u userName -p;
E quando solicitado, indique a senha.
Em seguida, crie uma base de dados e use-a
mysql>create database yourDatabaseName;
mysql>use yourDatabaseName;
Depois importar o sql
ou o ficheiro dump
para a base de dados de
mysql> source pathToYourSQLFile;
Nota: Se o seu terminal não estiver no local onde o ficheiro dump
ou sql
existe, use a localização relativa em cima.
Uma solução que funcionou para mim está abaixo:
Use your_database_name;
SOURCE path_to_db_sql_file_on_your_local;
Vá para a pasta onde tem o executável MySQL. -u
para o utilizador e -p
para pedir a senha:
C:\xampp\mysql\bin>mysql -u username -ppassword databasename < C:\file.sql
Para importar uma única base de dados, use o seguinte comando.
mysql -u username -p password dbname < dump.sql
Para importar vários dumps de bases de dados, use o seguinte comando.
mysql -u username -p password < dump.sql
Para enviar uma base de dados para um ficheiro SQL use o seguinte comando
mysqldump -u username -p database_name > database_name.sql
Para importar um ficheiro SQL para uma base de dados (certifique-se que está na mesma pasta que o ficheiro SQL ou forneça a localização completa do ficheiro)
mysql u -username -p database_name < database_name.sql
Acho que vale a pena mencionar que você também pode carregar umgzipped (comprimido) com zcat
Como mostrado abaixo:
zcat database_file.sql.gz | mysql -u username -p -h localhost database_name
mysql --user=[user] --password=[password] [database] < news_ml_all.sql
Para importar vários ficheiros SQL de uma só vez, use isto:
# 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
Você não precisa especificar o nome da base de dados na linha de comandos se o .o ficheiro sql contém declarações CREATE DATABASE IF NOT EXISTS db_name
e USE db_name
.
Certifique-se apenas de que está a ligar-se a um utilizador que tem as permissões para criar a base de dados, se a base de dados mencionada no .o ficheiro sql não existe.
Importar uma base de dados
-
Vai conduzir:
command: d:
-
Login MySQL
command: c:\xampp\mysql\bin\mysql -u root -p
-
Vai pedir pwd. Digite:
pwd
-
Seleccione a base de Dados
use DbName;
-
Indique o nome do ficheiro
\.DbName.sql
Adicione o --force
Opção:
mysql -u username -p database_name --force < file.sql
Eu pensei que poderia ser útil para aqueles que estão usando Mac OS X:
/Applications/xampp/xamppfiles/bin/mysql -u root -p database < database.sql
Substituir xampp
por mamp
ou outros servidores web.
O seguinte comando funciona para mim a partir da linha de comandos (cmd) em Windows 7 em WAMP .
d:/wamp/bin/mysql/mysql5.6.17/bin/mysql.exe -u root -p db_name < database.sql
Vá para o directório onde tem o MySQL.
c:\mysql\bin\> mysql -u username -p password database_name <
filename.sql
Também para descarregar todas as bases de dados, use a opção -all-databases
, e já não é necessário indicar o nome das bases de dados.
mysqldump -u username -ppassword –all-databases > dump.sql
Ou podes usar alguns clientes GUI como o SQLyog para fazer isto.
Para fins de salvaguarda, crie um ficheiro BAT e execute este ficheiro BAT com Escalonador de Tarefas. Ele terá uma cópia de segurança da base de dados; basta copiar a seguinte linha e colar em Notepad e, em seguida, salvar o .arquivo bat, e executá-lo em 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
Arranjei-o assim
mysql -u root -e "CREATE DATABASE db_name"
mysql db_name --force < import_script.sql
Para informação que eu tinha o root + default withoutpassword, ele não funciona com todas as respostas acima.
Criei um novo utilizador com todos os privilégios e uma senha. Funciona.
-palavra-chave sem espaço.
Estou a usar o Windows 10 com o Powershell 5 e encontrei quase todas as soluções "unix-like" que não funcionam para mim.
> mysql -u[username] [database-name] < my-database.sql
At line:1 char:31
+ mysql -u[username] [database-name] < my-database.sql
+ ~
The '<' operator is reserved for future use.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : RedirectionNotSupported
Acabo por usar este comando.
> type my-database.sql | mysql -u[username] -h[localhost] -p [database-name]
E funciona perfeitamente, espero que ajude.
Graças a @Francesco Casula's resposta btw.
Da mesma forma que https://stackoverflow.com/a/17666285/1888983
Diferenças fundamentais para mim:
- a base de dados tem de existir primeiro
- não há espaço entre
-p
e a senha
shell> mysql -u root -ppassword #note: no space between -p and password
mysql> CREATE DATABASE databasename;
mysql> using databasename;
mysql> source /path/to/backup.sql
A correr o fedora 26 com a MariaDB.
mysql -u root -p password -D database_name << import.sql
Usar a ajuda do mysql para mais detalhes mysql --help
Penso que estas serão opções úteis no 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 a importar uma grande base de dados e não temos uma barra de progresso. Use o Visualizador de tubos e veja a transferência de dados através do pipe
Para Mac, brew install pv
.Para Debian / Ubuntu, apt-get install pv
.
Outros, consultar http://www.ivarch.com/programs/pv.shtml
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
Embora a maioria das respostas aqui apenas mencione o comando simples
Mysql-u database_user-p [db_name]
Hoje é bastante comum que bases de dados e tabelas tenham colação utf8 onde este comando não é suficiente. Tendo a colação utf8 nas tabelas exportadas, é necessário usar este comando:
Surley isto. funciona para outros charsets também, como mostrar a notação certa pode ser visto aqui:Mysql-u database_user-p --default-character-set=utf8 [db_name]
Um comentário mencionado também que se uma base de dados nunca existir uma base de dados vazia teve de ser criada primeiro. Isto pode estar certo em alguns casos, mas depende do arquivo de exportação. Se o arquivo exportado já inclui o comando para criar o banco de dados, então o banco de dados nunca tem que ser criado em uma etapa separada, que até pode causar um erro na importação. Assim, na importação, é aconselhável dar uma olhada primeiro no arquivo para saber quais comandos são incluídos, na exportação é aconselhável observação as configurações, especialmente se o arquivo é muito grande e difícil de ler em um editor.
Existem ainda mais parâmetros para o comando que estão listados e explicados aqui:
Https://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html
Se utilizar outro banco de Dados-versão considere procurar a versão correspondente do manual também. Os links mencionados referem-se ao MySQL versão 5.7.
Os seguintes passos ajudam a enviar {[[0]} para a base de dados MySQL.
Passo 1: Enviar file.sql.zip
para qualquer pasta e abrir ali
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
Passo 3: mysql -u username -p database-name < file.sql
Digite a senha e espere até que o upload esteja completo.
mysql --defaults-extra-file=etc/myhost.cnf database_name < file.sql
Onde etc/myhost.cnf é um arquivo que contém máquina, usuário, senha, e você evita expor a senha na linha de comando. Aqui está uma amostra,
[client]
host=hostname.domainname
user=dbusername
password=dbpassword