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