Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como executar um comando MySQL a partir de um script de shell?


Você precisa usar o -p sinalizador para enviar uma senha. E é complicado porque você não deve ter espaço entre -p e a senha.
$ mysql -h "server-name" -u "root" "-pXXXXXXXX" "database-name" < "filename.sql"

Se você usar um espaço após -p ele faz com que o cliente mysql solicite a senha interativamente e, em seguida, interpreta o próximo argumento de comando como um nome de banco de dados:
$ mysql -h "server-name" -u "root" -p "XXXXXXXX" "database-name" < "filename.sql"
Enter password: <you type it in here>
ERROR 1049 (42000): Unknown database 'XXXXXXXX'

Na verdade, prefiro armazenar o usuário e a senha em ~/.my.cnf para não precisar colocá-lo na linha de comando:
[client]
user = root
password = XXXXXXXX

Então:
$ mysql -h "server-name" "database-name" < "filename.sql"

Re seu comentário:

Eu executo comandos mysql em modo de lote como o acima na linha de comando e em scripts de shell o tempo todo. É difícil diagnosticar o que há de errado com seu script de shell, porque você não compartilhou o script exato ou qualquer saída de erro. Sugiro que você edite sua pergunta original acima e forneça exemplos do que dá errado.

Além disso, quando estou solucionando problemas de um script de shell, uso o -x flag para que eu possa ver como está executando cada comando:
$ bash -x myscript.sh