1 votos

script de mysqldump no funcionaba correctamente invocado por launchctl en OS X

Aquí está mi pregunta formulada en StackExchange hace 2 días. https://stackoverflow.com/q/35839190/4772652 Alguien me sugirió que preguntara aquí. ¿Alguien podría echarme una mano para solucionarlo?

\============

Había intentado lanzar un script de mysqldump para la copia de seguridad diaria mediante launchd y también mediante Carbon Copy Cloner (CCC). El script funciona bien bajo línea de comandos. Sin embargo, aparece con un archivo vacío bajo launchd o CCC.

Mientras ejecutaba manualmente el comando sh mysqldump.sh , a <DATE>.sql.gz se creará un archivo. Y si el launchd/CCC llamó al script, se creará un <DATE>.sql.gz también se creará. Sin embargo, el tamaño del archivo será de 2 0B.

Este es el contenido de mi archivo 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>

Y el estado de launchd para este plist es - 0 com.MySQL.crontab

Aquí está el script para mysqldump, que es creado por Schulz con ligeras modificaciones

#!/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

¿Qué puedo hacer para resolver este problema?

0 votos

¿Dónde está mysqldump? El problema probable es que no está en la ruta para launchd aunque usted tiene el /bin/mysqldump.sh en la zona controlada de Apple por lo que podría estar equivocado

0 votos

¿Es la ruta al script realmente /bin/mysqldump como muestra el script?

1voto

klanomath Puntos 19587

A su shell script le falta la ruta completa a mysqldump (suponiendo que haya instalado MySQL Community Edition de Oracle):

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

Si necesitas una contraseña defínela en el shell script:

dbPassword="my_dbuser_password"

y cambiar la línea anterior a:

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

¡No hay espacio entre -p y $dbP...!

También aconsejo mover el shell script a otra ruta (p.ej. /usr/local/bin/ ). Usted tiene que ajustar su plist entonces y la línea

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

se convierte:

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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X