Heim > Fragen und Antworten > Hauptteil
Ich skripte derzeit die Migration mithilfe von Bash-Skripten. Wenn ich versuche, die Datenbank über eine Variable in einem Bash-Skript zu öffnen, ist der Datenbankname falsch. Ich erhalte die folgende Fehlermeldung „‚RROR 1102 (42000): Falscher Datenbankname ‚Entwicklung‘“
mysql --batch --host=********** --user=**** --password=***** $dbName -e "${fileContents}"
Wenn ich das in einem Bash-Skript mache, ist die Datenbank vorhanden
mysql --batch --host=********** --user=**** --password=***** development -e "${fileContents}"
Die Variable fileContents ist das Migrationsskript in SQL. Die Variable dbName ist der Name der Datenbank.
Ich erhalte den Datenbanknamen aus einer Tabelle in der Datenbank mit den folgenden Zeilen
databaseNames=() shopt -s lastpipe mysql --batch --raw --host=***** --user=**** --password=***** -e 'SELECT database_name FROM users.organisations' | while read dbName guid; do if [ $i -gt 0 ] then databaseNames+=($dbName) fi i=$(($i + 1)) done
Die Namen im Datenbank-Array scheinen korrekt zu sein, aber ich denke, dass das Array die Dinge durcheinander bringt. Ich durchlaufe das wahre Array wie folgt.
for dbName in "${databaseNames[@]}" do
P粉7148447432024-01-30 10:57:21
您的数组为空。您必须将 while 循环更改为
while read dbName guid; do databaseNames+=($dbName) done < <(mysql --batch --raw --host=$host --port=$port --user=$user --password=$password --database="yourdatabase" -e 'SELECT database_name FROM users.organisations;')
然后
for dbName in "${databaseNames[@]}" do echo $dbName mysql --batch --raw --host=$host --port=$port --user=$user --password=$password --database="$dbName" -e '${fileContents};') done