Le script de mysqldump n'a pas fonctionné correctement invoqué par launchctl sous OS X


1

Voici ma question posée sur StackExchange il y a 2 jours. https://stackoverflow.com/q/35839190/4772652 Quelqu'un m'a suggéré de demander ici. Quelqu'un pourrait-il me donner un coup de main pour résoudre ce problème?

============

J'avais essayé de lancer un script de mysqldump pour une sauvegarde quotidienne par launchd et également par Carbon Copy Cloner (CCC). Le script fonctionne très bien en ligne de commande. Cependant, il est livré avec un fichier vide sous launchd ou CCC.

Alors que j'ai exécuté manuellement la commande sh mysqldump.sh, une <DATE>.sql.gz le fichier sera créé. Et si le launchd / CCC appelle le script, un <DATE>.sql.gz Le fichier sera également créé. Cependant, la taille du fichier sera de 2 0B.

Voici le contenu de mon fichier plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>com.MySQL.crontab</string>
        <key>Program</key>
        <string>/bin/mysqldump.sh</string>
        <key>RunAtLoad</key>
        <true/>
        <key>StandardErrorPath</key>
        <string>/tmp/AlTest1.err</string>
        <key>StandardOutPath</key>
        <string>/tmp/AlTest1.out</string>
        <key>StartCalendarInterval</key>
        <dict>
            <key>Weekday</key>
            <integer>5</integer>
            <key>Hour</key>
            <integer>6</integer>
            <key>Minute</key>
            <integer>0</integer>
        </dict>
    </dict>
</plist>

Et le statut de lancement pour ce plist est - 0 com.MySQL.crontab

Voici le script pour mysqldump, qui est créé par Schulz avec une légère modification

#!/bin/sh
# *************************************************************
# file: mysqldump.sh
# date: 2015-03-27
# author: (c) by Marko Schulz - <info@tuxnet24.de>
# description: Get a mysqldump of all mysql databases.
# *************************************************************

dbUsername="me"
dbBackup="/Backup/MySQL_backup"

date=$( date +%Y%m%d )

find $dbBackup/ -mtime +30 -type f -name '*.sql.gz' -exec rm -rf {} ';' >/dev/null 2>&1

mysqldump -u $dbUsername --all-databases | gzip > ${dbBackup}/${date}.sql.gz 2>&1

Que pourrais-je faire pour résoudre ce problème?


Où est mysqldump? Le problème probable est que ce n'est pas sur le chemin de launchd bien que vous ayez le fichier /bin/mysqldump.sh dans la zone contrôlée par Apple, donc je me trompe peut-être
Mark

Le chemin du script est-il réellement / bin / mysqldump comme le montre le script?
Mikey T.K.

Réponses:


1

Votre script shell ne contient pas le chemin complet vers mysqldump (en supposant que vous avez installé MySQL Community Edition par Oracle):

/usr/local/mysql/bin/mysqldump -u $dbUsername --all-databases | gzip > ${dbBackup}/${date}.sql.gz 2>&1

Si vous avez besoin d'un mot de passe, définissez-le dans le script shell:

dbPassword="my_dbuser_password"

et remplacez la ligne ci-dessus par:

/usr/local/mysql/bin/mysqldump -u $dbUsername -p$dbPassword --all-databases | gzip > ${dbBackup}/${date}.sql.gz 2>&1

Il n'y a pas d'espace entre -p et $ dbP ...!

Je conseille également de déplacer le script shell vers un autre chemin (par exemple, / usr / local / bin / ). Vous devez alors ajuster votre plist et la ligne

    <string>/bin/mysqldump.sh</string>

devient:

    <string>/usr/local/bin/mysqldump.sh</string>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.