Musisz użyć -p
flagę, aby wysłać hasło. I jest to trudne, ponieważ nie możesz mieć spacji między -p
i hasło.
$ mysql -h "server-name" -u "root" "-pXXXXXXXX" "database-name" < "filename.sql"
Jeśli użyjesz spacji po -p
sprawia, że klient mysql pyta interaktywnie o hasło, a następnie interpretuje następny argument polecenia jako nazwę bazy danych:
$ 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'
Właściwie wolę przechowywać użytkownika i hasło w ~/.my.cnf, więc nie muszę w ogóle umieszczać ich w wierszu poleceń:
[client]
user = root
password = XXXXXXXX
Następnie:
$ mysql -h "server-name" "database-name" < "filename.sql"
Odpowiedz na swój komentarz:
Cały czas uruchamiam polecenia mysql w trybie wsadowym, takie jak powyżej, w wierszu poleceń i w skryptach powłoki. Trudno jest zdiagnozować, co jest nie tak ze skryptem powłoki, ponieważ nie udostępniłeś dokładnego skryptu ani żadnych komunikatów o błędach. Sugeruję edycję pierwotnego pytania powyżej i podanie przykładów tego, co poszło nie tak.
Również podczas rozwiązywania problemów ze skryptem powłoki używam -x
flagę, abym mógł zobaczyć, jak wykonuje każde polecenie:
$ bash -x myscript.sh