我目前正在使用 bash 脚本编写迁移脚本。 当我尝试通过 bash 脚本中的变量打开数据库时,数据库名称不正确。 我收到以下错误 “‘RROR 1102 (42000):数据库名称‘development’不正确”
mysql --batch --host=********** --user=**** --password=***** $dbName -e "${fileContents}"
当我在 bash 脚本中执行此操作时,数据库存在
mysql --batch --host=********** --user=**** --password=***** development -e "${fileContents}"
变量fileContents是SQL中的迁移脚本。 变量 dbName 是数据库的名称。
我通过以下几行从数据库中的表中获取数据库名称
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
数据库数组中的名称似乎是正确的,但我认为该数组把事情弄乱了。 我按如下方式循环 true 数组。
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