IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Parenthèse, script tout simple de backup d'un serveur de base de donnée dans docker


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Par défaut Parenthèse, script tout simple de backup d'un serveur de base de donnée dans docker
    Bonjour, j'ai un problème de connaissance en script shell. Je veux faire une commande toute simple qui me permet de sauvegarder une base de donnée dans un container docker

    Voici ce qui est affiché dans la console après execution (il y a des echo) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    stretch@DebianStretch:~/scripts/backup/mssql$ ./backup_mssql.sh 
    sql1 /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P MOTDEPASSE -Q "BACKUP LOG WITH NORECOVERY DATABASE [vega] TO DISK = N'/var/opt/mssql/backup/MSSQL_vega-2017-11-07-20.31.43.bak' WITH NOFORMAT, NOINIT, NAME = 'vega', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
    ---
    Sqlcmd: 'LOG" "WITH" "NORECOVERY" "DATABASE" "[vega]" "TO" "DISK" "=" "N'/var/opt/mssql/backup/MSSQL_vega-2017-11-07-20.31.43.bak'" "WITH" "NOFORMAT," "NOINIT," "NAME" "=" "'vega'," "SKIP," "NOREWIND," "NOUNLOAD," "STATS" "=" "10""': Unexpected argument. Enter '-?' for help.
    et voici mon script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/bash
    HOST="localhost"
    LOGIN="SA"
    PASSWORD="MOTDEPASSE"
    DATABASE="vega"
    DATEBACKUP=$(date +%Y-%m-%d-%H.%M.%S)
    CMDLINE="BACKUP LOG WITH NORECOVERY DATABASE [$DATABASE] TO DISK = N'/var/opt/mssql/backup/MSSQL_$DATABASE-$DATEBACKUP.bak' WITH NOFORMAT, NOINIT, NAME = '$DATABASE', SKIP, NOREWIND, NOUNLOAD, $
    CMDLINE_COMPLET="sql1 /opt/mssql-tools/bin/sqlcmd -S $HOST -U $LOGIN -P $PASSWORD -Q \"$CMDLINE\""
    echo $CMDLINE_COMPLET
    echo "---"
    docker exec -it $CMDLINE_COMPLET
    la commande que je veux executer est toute simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd -S $HOST -U $LOGIN -P $PASSWORD -Q "BACKUP LOG WITH NORECOVERY DATABASE [$DATABASE] TO DISK = N'/var/opt/mssql/backup/MSSQL_$DATABASE-$DATEBACKUP.bak' WITH NOFORMAT, NOINIT, NAME = '$DATABASE', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
    comment faire pour éviter cette erreur à l'execution du script ? Le shell me met tout les mots entre parenthèse, c'est une erreur bizarre que je n'arrive pas à résoudre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sqlcmd: 'LOG" "WITH" "NORECOVERY" "DATABASE" "[vega]" "TO" "DISK" "=" "N'/var/opt/mssql/backup/MSSQL_vega-2017-11-07-20.31.43.bak'" "WITH" "NOFORMAT," "NOINIT," "NAME" "=" "'vega'," "SKIP," "NOREWIND," "NOUNLOAD," "STATS" "=" "10""': Unexpected argument. Enter '-?' for help.
    J'ai pourtant mis des

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 348
    Par défaut
    Tu veux dire des guillemets ???
    essayes comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docker exec -it "$CMDLINE_COMPLET"

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Par défaut
    j'obtiens ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    "docker exec" requires at least 2 arguments.
    See 'docker exec --help'.
     
    Usage:  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
     
    Run a command in a running container

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Voilà une information qu'elle est claire!

    Donc, manifestement, "docker exec" attend au moins 2 arguments, le conteneur et la commande, suivie de ses arguments (à elle).

    Il me semble que ça va être compliqué d'arriver à tout mettre dans une variable CMDLINE_COMPLET...

    De plus, tu disais précédemment:
    Citation Envoyé par stephane86 Voir le message
    voici mon script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/bash
    HOST="localhost"
    LOGIN="SA"
    PASSWORD="MOTDEPASSE"
    DATABASE="vega"
    DATEBACKUP=$(date +%Y-%m-%d-%H.%M.%S)
    CMDLINE="BACKUP LOG WITH NORECOVERY DATABASE [$DATABASE] TO DISK = N'/var/opt/mssql/backup/MSSQL_$DATABASE-$DATEBACKUP.bak' WITH NOFORMAT, NOINIT, NAME = '$DATABASE', SKIP, NOREWIND, NOUNLOAD, $
    CMDLINE_COMPLET="sql1 /opt/mssql-tools/bin/sqlcmd -S $HOST -U $LOGIN -P $PASSWORD -Q \"$CMDLINE\""
    echo $CMDLINE_COMPLET
    echo "---"
    docker exec -it $CMDLINE_COMPLET
    D'abord, est-il "normal" que la ligne définissant CMDLINE se termine par un dollar tout seul et que le guillemet de départ ne soit pas fermé?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CMDLINE="BACKUP LOG WITH NORECOVERY DATABASE [$DATABASE] TO DISK = N'/var/opt/mssql/backup/MSSQL_$DATABASE-$DATEBACKUP.bak' WITH NOFORMAT, NOINIT, NAME = '$DATABASE', SKIP, NOREWIND, NOUNLOAD, $
    Ensuite, tu disais aussi:
    Citation Envoyé par stephane86 Voir le message
    la commande que je veux executer est toute simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd -S $HOST -U $LOGIN -P $PASSWORD -Q "BACKUP LOG WITH NORECOVERY DATABASE [$DATABASE] TO DISK = N'/var/opt/mssql/backup/MSSQL_$DATABASE-$DATEBACKUP.bak' WITH NOFORMAT, NOINIT, NAME = '$DATABASE', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
    Peux-tu nous dire si cette commande "toute simple" (sic!) fonctionne toute seule?

    C'est-à-dire, que se passe-t-il si tu remplaces la dernière ligne de ton script par celle que tu donnes (sans passer par $CMDLINE_COMPLET), comme ceci (en protégeant toutes les variables par des guillemets, comme il se doit):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash
    HOST="localhost"
    LOGIN="SA"
    PASSWORD="MOTDEPASSE"
    DATABASE="vega"
    DATEBACKUP=$(date +%Y-%m-%d-%H.%M.%S)
     
    echo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd -S "${HOST}" -U "${LOGIN}" -P "${PASSWORD}" -Q "BACKUP LOG WITH NORECOVERY DATABASE [${DATABASE}] TO DISK = N'/var/opt/mssql/backup/MSSQL_${DATABASE}-${DATEBACKUP}.bak' WITH NOFORMAT, NOINIT, NAME = '${DATABASE}', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
    echo "---"
    docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd -S "${HOST}" -U "${LOGIN}" -P "${PASSWORD}" -Q "BACKUP LOG WITH NORECOVERY DATABASE [${DATABASE}] TO DISK = N'/var/opt/mssql/backup/MSSQL_${DATABASE}-${DATEBACKUP}.bak' WITH NOFORMAT, NOINIT, NAME = '${DATABASE}', SKIP, NOREWIND, NOUNLOAD, STATS = 10"

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Par défaut
    D'abord, est-il "normal" que la ligne définissant CMDLINE se termine par un dollar tout seul et que le guillemet de départ ne soit pas fermé?
    C'est une erreur merci !

    Peux-tu nous dire si cette commande "toute simple" (sic!) fonctionne toute seule?
    Oui elle fonctionne, j'ai réussi a faire un backup de mon container docker qui a comme fonction d'être un SqlServeur

    Peux-tu nous dire si cette commande "toute simple" (sic!) fonctionne toute seule?

    C'est-à-dire, que se passe-t-il si tu remplaces la dernière ligne de ton script par celle que tu donnes (sans passer par $CMDLINE_COMPLET), comme ceci (en protégeant toutes les variables par des guillemets, comme il se doit):
    (J'ai enlevé les echo pour simplifier la lecture)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
    HOST="localhost"
    LOGIN="SA"
    PASSWORD="MOTDEPASSE"
    DATABASE="vega"
    DATEBACKUP=$(date +%Y-%m-%d-%H.%M.%S)
    docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd -S "${HOST}" -U "${LOGIN}" -P "${PASSWORD}" -Q "BACKUP LOG WITH NORECOVERY DATABASE [${DATABASE}] TO DISK = N'/var/opt/mssql/backup/MSSQL_${DATABASE}-${DATEBACKUP}.bak' WITH NOFORMAT, NOINIT, NAME = '${DATABASE}', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
    j'obtiens ce message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Msg 156, Level 15, State 1, Server 024a1a9162e1, Line 1
    Incorrect syntax near the keyword 'WITH'.
    Msg 319, Level 15, State 1, Server 024a1a9162e1, Line 1
    Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.
    merci des reponses !

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par stephane86 Voir le message
    j'obtiens ce message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Msg 156, Level 15, State 1, Server 024a1a9162e1, Line 1
    Incorrect syntax near the keyword 'WITH'.
    Msg 319, Level 15, State 1, Server 024a1a9162e1, Line 1
    Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.
    On n'a plus l'erreur de "docker", ni l'erreur de "Sqlcmd"!
    Je dirais donc qu'on a progressé!

    Mais, du coup, ce n'est plus un problème "shell", mais un problème sql, me semble-t-il...

    Oui elle fonctionne, j'ai réussi a faire un backup de mon container docker qui a comme fonction d'être un SqlServeur
    Pourrais-tu nous montrer la ligne précise de commande (sans les password, évidemment) avec laquelle tu as réussi à faire ton backup, afin que nous puissions comparer avec la version en script et déterminer quelle différence fait échouer la commande?

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/11/2010, 14h25
  2. Script tout simple avec GreaseMonkey
    Par jpascal dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/06/2007, 11h25
  3. Script tout simple qui ne marche pas sous IE
    Par Bleuarff dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/02/2007, 18h48
  4. script de sauvegarde de base de données dans VB.net
    Par bathis_dev dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 07/02/2007, 12h16
  5. Pb sur un script tout simple !
    Par ladybird dans le forum Langage
    Réponses: 12
    Dernier message: 06/12/2006, 21h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo