Como executar o script SQL no MySQL?

409

Eu quero executar um arquivo de texto contendo consultas SQL, no MySQL.

Tentei executar source /Desktop/test.sqle recebi o erro:

mysql>. \ home \ sivakumar \ Desktop \ test.sql ERRO: falha ao abrir o arquivo '\ home \ sivakumar \ Desktop \ test.sql', erro: 2

Alguma idéia do que estou fazendo de errado?

user1160432
fonte
Basicamente, acho que essa deve ser a resposta aqui: \. /home/sivakumar/Desktop/test.sql
talsibony 18/03/19

Respostas:

434

Se você estiver na linha de comando do MySQL, mysql>precisará declarar o arquivo SQL como source.

mysql> source \home\user\Desktop\test.sql;
Thomas Edwards
fonte
29
Para o mysql 5.6.10 no Mac, não são necessárias aspas simples para o caminho do arquivo.
RNA
3
para Windows, usar '/' em vez de '\' funcionou corretamente para mim. Eu recebi erros quando originalmente usei '/'. Foi isso que funcionou para mim ... fonte C: /Users/macombers/Downloads/midcoast_db.sql;
Zack Macomber
Soltar as citações no ubuntu também (mysql Ver 14,14 debian-linux-gnu (x86_64), utilizando editline invólucro)
Siddhartha
1
@kapil Em relação a quê? Você está dentro do MySQL neste momento, então não tenho parente.
9788 Thomas Edwards
1
@ Sarah Você pode usar \ antes do espaço ou quebrar o nome do arquivo com ".
Thomas Edwards
166

Você tem muitas opções:

  • use o cliente de linha de comando MySQL: mysql -h hostname -u user database < path/to/test.sql
  • Instale as ferramentas GUI do MySQL e abra seu arquivo SQL, depois execute-o
  • Use phpmysql se o banco de dados estiver disponível através do seu servidor web
Eugen Rieck
fonte
3
E a senha do usuário (opção -p)?
Amir Katz
@AmirKatz Embora a senha possa ser fornecida com a -popção, isso não é recomendado: Outros usuários no mesmo host podem usar ferramentas do sistema como pslê-las neste caso.
Eugen Rieck
1
@EugenRieck -psem um prompts argumento para a senha para ser inserido na linha seguinte
Bobby Jack
130

você pode executar instruções mysql que foram gravadas em um arquivo de texto usando o seguinte comando:

mysql -u yourusername -p yourpassword yourdatabase < text_file

se o seu banco de dados ainda não foi criado, entre no seu mysql primeiro usando:

mysql -u yourusername -p yourpassword yourdatabase

então:

mysql>CREATE DATABASE a_new_database_name

então:

mysql -u yourusername -p yourpassword a_new_database_name < text_file

isso deve resolver!

Mais informações aqui: http://dev.mysql.com/doc/refman/5.0/en/mysql-batch-commands.html

Paul Preibisch
fonte
7
no Windows: para a senha, tive que usar aspas e sem espaço para fazê-lo funcionar (a senha em si não continha espaços ou caracteres especiais):mysql -u yourusername -p"yourpassword"
TmTron
1
Se você não quer que sua senha para estar no prompt de eu acredito que o método descrito aqui vai funcionar: stackoverflow.com/questions/9293042/...
alex9311
59

Minha opção favorita para fazer isso será:

 mysql --user="username" --database="databasename" --password="yourpassword" < "filepath"

Eu o uso desta maneira porque quando você o "" amarra, você evita caminhos errados e erros de espaço e - e provavelmente mais problemas com caracteres que eu não encontrei.


Com o comentário @elcuco, sugiro usar este comando com [space] antes, para que o bash ignore o salvamento no histórico, isso funcionará imediatamente na maioria dos bash.

Caso ainda esteja salvando seu comando no histórico, consulte as seguintes soluções:

Executar comando sem mantê-lo no histórico


edição de segurança extra

Caso você queira ter segurança extra, use o seguinte comando e digite a senha na entrada da linha de comando:

mysql --user="username" --database="databasename" -p < "filepath"
talsibony
fonte
18
Eu não recomendaria passar a senha para a linha de comando, pois ela será salva no ~ / .bash_history e pode ser acessada por outros programas através de / proc /.
Elcuco 13/05
Excelente conselho de @elcuco! Além disso, provavelmente use outro sinalizador após -p (ou esse seja o último argumento) para que outro parâmetro não seja erroneamente considerado a senha pretendida.
Davernator 26/05
Observe que os argumentos da linha de comando ainda são visíveis por outros usuários. Exemplo: para i em / proc / * / cmdline; ecoam $ i; cat $ i; done
elcuco
Este não é retomada como você expor sua senha servidores para a história do console
Alexius DIAKOGIANNIS
@AlexiusDiakogiannis, você pode me dar um exemplo, como você pode ver o comando do histórico quando o executa com [espaço] antes do comando?
talsibony
56

Todas as principais respostas são boas. Mas, caso alguém queira executar a consulta de um arquivo de texto em um servidor remoto E salvar os resultados em um arquivo (em vez de aparecer no console), você pode fazer o seguinte:

mysql -u yourusername -p yourpassword yourdatabase < query_file > results_file

Espero que isso ajude alguém.

Bhushan
fonte
10
Eu acho que não deve haver espaço entre -pe a senha
webNeat
Se o objetivo de gravar em um arquivo for fazer o despejo de dados, acho que SELECT ... INTO OUTFILE /path/to/file.csvé a maneira mais eficiente. Veja opções e sintaxe aqui - dev.mysql.com/doc/refman/5.7/en/select-into.html
Anis
20

Dê o caminho do arquivo .sql como:

source c:/dump/SQL/file_name.sql;

Veja na imagem:

Shubham Verma
fonte
Muito obrigado! Isso funciona mesmo se o usuário não tem sudo direitos e no controle remoto Amazon RDS
Volatil3
20

Eu vim aqui procurando esta resposta também, e aqui está o que eu achei que funciona melhor para mim: Nota: estou usando o Ubuntu 16.xx

  1. Acesse o mysql usando:

mysql -u <your_user> - p

  1. No prompt do mysql, digite:

source file_name.sql

Espero que isto ajude.

Zac Smith
fonte
2
Em vez de iniciar o prompt, pode até ser útil apenas combinar as duas etapas em um único comando:mysql -u<user> -p -e 'source filename.sql'
junix
Obrigado, @junix! A opção de fonte usada dessa maneira é o que eu estava procurando.
ManuelJE 19/02/19
14
mysql> source C:\Users\admin\Desktop\fn_Split.sql

Não especifique aspas simples.

Se o comando acima não estiver funcionando, copie o arquivo para c: drive e tente novamente. como mostrado abaixo,

mysql> source C:\fn_Split.sql
Shankar Kalyankar
fonte
13

Nunca é uma boa prática passar o argumento da senha diretamente da linha de comando, ele é salvo no ~/.bash_history arquivo e pode ser acessado por outros aplicativos.

Use isto:

mysql -u user --host host --port 9999 database_name < /scripts/script.sql -p
Enter password:
Jorge E. Hernández
fonte
10
mysql -uusername -ppassword database-name < file.sql
Мартин Петров
fonte
9

Muito provavelmente, você só precisa alterar a barra / barra preta: de

 \home\sivakumar\Desktop\test.sql

para

 /home/sivakumar/Desktop/test.sql

Portanto, o comando seria:

source /home/sivakumar/Desktop/test.sql
Ben Lin
fonte
6

use o seguinte no prompt de comando do mysql -

source \\home\\user\\Desktop\\test.sql;

Não use cotação. Mesmo que o caminho contenha espaço (''), não use aspas .

Rajesh Paul
fonte
5

em vez de redirecionamento, eu faria o seguinte

mysql -h <hostname> -u <username> --password=<password> -D <database> -e 'source <path-to-sql-file>'

Isso executará o arquivo path-to-sql-file

DataGuru
fonte
5

Tantas maneiras de fazer isso.

From Workbench: File > Run SQL Script -- then follow prompts

From Windows Command Line:
   Option 1: mysql -u usr -p
             mysql> source file_path.sql
   Option 2: mysql -u usr -p '-e source file_path.sql'
   Option 3: mysql -u usr -p < file_path.sql
   Option 4: put multiple 'source' statements inside of file_path.sql (I do this to drop and recreate schemas/databases which requires multiple files to be run)
             mysql -u usr -p < file_path.sql

Se você receber erros na linha de comando, verifique se executou anteriormente

cd {!!>>mysqld.exe home directory here<<!!}
mysqld.exe --initialize 

Isso deve ser executado no diretório mysqld.exe, daí o CD.

Espero que isso seja útil e não apenas redundante.

DonkeyKong
fonte
3

Desde mysql -u yourusername -p yourpassword yourdatabase < text_fileque não funcionou em um servidor remoto (EC2 da Amazon) ...

Certifique-se de que o banco de dados seja criado primeiro.

Então:

mysql --host=localhost --user=your_username --password=your_password your_database_name < pathTofilename.sql
Damir Olejar
fonte
3

Para referência futura, achei que funcionava contra os métodos mencionados acima, no Windows no console do msql:

mysql >>source c://path_to_file//path_to_file//file_name.sql;

Se o seu drive raiz não for chamado "c", basta trocar com o nome do seu drive. Primeiro tente barras invertidas; se elas não funcionarem, tente a barra. Se eles também não funcionarem, verifique se você possui o caminho completo do arquivo, a extensão .sql no nome do arquivo e se a sua versão insiste em ponto-e-vírgula, verifique se existe e tente novamente.

Chad Mx
fonte
0

Eu tive esse erro e tentei todos os conselhos que não consegui.

Finalmente, o problema era que minha pasta tinha um espaço no nome da pasta que aparecia como uma barra no caminho da pasta, depois que a encontrei e a removi, ela funcionou bem.

user3753416
fonte