搜索

首页  >  问答  >  正文

Mysql bash 数据库存在时数据库名称错误?

我目前正在使用 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粉818125805P粉818125805328 天前458

全部回复(1)我来回复

  • P粉714844743

    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

    回复
    0
  • 取消回复