Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie führe ich einen MySQL-Befehl aus einem Shell-Skript aus?

Sie müssen den -p verwenden Flag, um ein Passwort zu senden. Und es ist knifflig, weil zwischen -p kein Leerzeichen stehen darf und das Passwort.

$ mysql -h "server-name" -u "root" "-pXXXXXXXX" "database-name" < "filename.sql"

Wenn Sie nach -p ein Leerzeichen verwenden es veranlasst den MySQL-Client, Sie interaktiv nach dem Passwort zu fragen, und interpretiert dann das nächste Befehlsargument als einen Datenbanknamen:

$ 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'

Tatsächlich bevorzuge ich es, den Benutzer und das Passwort in ~/.my.cnf zu speichern, damit ich es überhaupt nicht in die Befehlszeile eingeben muss:

[client]
user = root
password = XXXXXXXX

Dann:

$ mysql -h "server-name" "database-name" < "filename.sql"

Zu Ihrem Kommentar:

Ich führe die ganze Zeit MySQL-Befehle im Stapelmodus wie die obigen in der Befehlszeile und in Shell-Skripten aus. Es ist schwer zu diagnostizieren, was mit Ihrem Shell-Skript nicht stimmt, da Sie weder das genaue Skript noch eine Fehlerausgabe geteilt haben. Ich schlage vor, dass Sie Ihre ursprüngliche Frage oben bearbeiten und Beispiele dafür angeben, was schief geht.

Auch wenn ich ein Shell-Skript behebe, verwende ich den -x Flag, damit ich sehen kann, wie es jeden Befehl ausführt:

$ bash -x myscript.sh