Du måste använda -p
flagga för att skicka ett lösenord. Och det är knepigt eftersom du inte får ha något mellanslag mellan -p
och lösenordet.
$ mysql -h "server-name" -u "root" "-pXXXXXXXX" "database-name" < "filename.sql"
Om du använder ett mellanslag efter -p
det får mysql-klienten att fråga dig interaktivt om lösenordet, och sedan tolkar den nästa kommandoargument som ett databasnamn:
$ 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'
Egentligen föredrar jag att lagra användaren och lösenordet i ~/.my.cnf så att jag inte behöver lägga det på kommandoraden alls:
[client]
user = root
password = XXXXXXXX
Sedan:
$ mysql -h "server-name" "database-name" < "filename.sql"
Angående din kommentar:
Jag kör batch-mode mysql-kommandon som ovan på kommandoraden och i skalskript hela tiden. Det är svårt att diagnostisera vad som är fel med ditt skalskript, eftersom du inte har delat det exakta skriptet eller något felutdata. Jag föreslår att du redigerar din ursprungliga fråga ovan och ger exempel på vad som går fel.
När jag felsöker ett skalskript använder jag även -x
flagga så att jag kan se hur det utförs varje kommando:
$ bash -x myscript.sh