Maison  >  Questions et réponses  >  le corps du texte

Le nom de la base de données Mysql bash est erroné lorsque la base de données existe ?

Je suis actuellement en train de créer un script pour la migration à l'aide de scripts bash. Lorsque j'essaie d'ouvrir la base de données via une variable dans un script bash, le nom de la base de données est incorrect. J'obtiens l'erreur suivante "'RROR 1102 (42000) : Nom de base de données incorrect 'développement'"

mysql --batch --host=********** --user=**** --password=***** $dbName -e "${fileContents}"

Quand je fais cela dans un script bash, la base de données existe

mysql --batch --host=********** --user=**** --password=***** development -e "${fileContents}"

La variable fileContents est le script de migration en SQL. La variable dbName est le nom de la base de données.

J'obtiens le nom de la base de données à partir d'une table de la base de données avec les lignes suivantes

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

Les noms dans le tableau de la base de données semblent corrects, mais je pense que le tableau gâche les choses. Je parcours le vrai tableau comme suit.

for dbName in "${databaseNames[@]}" do

P粉818125805P粉818125805264 Il y a quelques jours384

répondre à tous(1)je répondrai

  • P粉714844743

    P粉7148447432024-01-30 10:57:21

    Votre tableau est vide. Vous devez changer la boucle while en

    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;')

    Alors

    for dbName in "${databaseNames[@]}"
    do
      echo $dbName
      mysql --batch --raw  --host=$host --port=$port --user=$user --password=$password  --database="$dbName" -e '${fileContents};')
    done

    répondre
    0
  • Annulerrépondre