Lo script di mysqldump non ha funzionato correttamente invocato da launchctl in OS X

1

Ecco la mia domanda su StackExchange 2 giorni fa. link Qualcuno mi ha suggerito di chiedere qui. Qualcuno potrebbe darmi una mano per risolvere questo?

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

Avevo provato a lanciare uno script di mysqldump per il backup giornaliero tramite launchd e anche da Carbon Copy Cloner (CCC). Lo script funziona bene sotto la riga di comando. Tuttavia, viene fornito con file vuoto sotto launchd o CCC.

Mentre eseguivo manualmente il comando sh mysqldump.sh , verrà creato un file <DATE>.sql.gz . E se launchd / CCC ha chiamato lo script, verrà creato anche un file <DATE>.sql.gz . Tuttavia, la dimensione del file sarà di 2 0B.

Ecco il contenuto del mio file 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>

E lo stato di avvio per questo plist è - 0 com.MySQL.crontab

Ecco lo script per mysqldump, che è stato creato da Schulz con una leggera modifica

#!/bin/sh
# *************************************************************
# file: mysqldump.sh
# date: 2015-03-27
# author: (c) by Marko Schulz - <[email protected]>
# 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

Che cosa posso fare per risolvere questo problema?

    
posta LinCW 09.03.2016 - 11:59
fonte

1 risposta

1

Lo script della shell non ha il percorso completo per mysqldump (supponendo che tu abbia installato MySQL Community Edition da Oracle):

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

Se hai bisogno di una password definiscilo nello script della shell:

dbPassword="my_dbuser_password"

e cambia la linea sopra in:

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

Non c'è spazio tra -p e $ dbP ...!

Consiglio anche di spostare lo script della shell su un altro percorso (ad es. / usr / local / bin / ). Devi aggiustare il tuo plist e poi la linea

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

diventa:

    <string>/usr/local/bin/mysqldump.sh</string>
    
risposta data 09.03.2016 - 20:44
fonte

Leggi altre domande sui tag