respaldar datos automatico crontab mysqldump

automatico - Comandos mysqldump y gzip para crear correctamente un archivo comprimido de una base de datos MySQL usando crontab



backup automatico mysql workbench (4)

Personalmente, he creado un archivo.sh (755 a la derecha) en el directorio raíz, el archivo que hace este trabajo, por orden de crontab.

Código crontab:

10 2 * * * raíz /root/backupautomatique.sh

Código de File.sh:

rm -f /home/mordb-148-251-89-66.sql.gz # (Para borrar el anterior)

mysqldump mor | gzip> /home/mordb-148-251-89-66.sql.gz (lo que has hecho)

scp -P2222 /home/mordb-148-251-89-66.sql.gz root @ otherip: /home/mordbexternes/mordb-148-251-89-66.sql.gz

(para enviar una copia a otro lugar si el servidor de envío falla, porque es muy viejo, como yo ;-))

www.tikvamal.org

Estoy teniendo problemas para hacer que un crontab funcione. Quiero automatizar una copia de seguridad de base de datos MySQL.

La puesta en marcha:

  • Debian GNU / Linux 7.3 (sibilante)
  • Versión del servidor MySQL: 5.5.33-0 + wheezy1 (Debian)
  • Los directorios de usuario, backup y backup2 tienen 755 permisos.
  • Los nombres de usuario para MySQL db y la cuenta de Debian son los mismos

Desde el shell este comando funciona.

mysqldump -u user -p[user_password] [database_name] | gzip > dumpfilename.sql.gz

Cuando coloco esto en un crontab usando crontab -e

* * /usr/bin/mysqldump -u user -pupasswd mydatabase | gzip> /home/user/backup/mydatabase-backup-`date +/%m/%d_/%Y`.sql.gz >/dev/null 2>&1

Se crea un archivo cada minuto en el directorio / home / user / backup, pero tiene 0 bytes.

Sin embargo, cuando redirecciono esta salida a un segundo directorio, backup2, observo que en él se crea el archivo mysqldump debidamente comprimido. No puedo entender cuál es el error que estoy cometiendo y que resulta en un archivo de 0 bytes en el primer directorio y la salida esperada en el segundo directorio.

* * /usr/bin/mysqldump -u user -pupasswd my-database | gzip> /home/user/backup/mydatabase-backup-`date +/%m/%d_/%Y`.sql.gz >/home/user/backup2/mydatabase-backup-`date +/%m/%d_/%Y`.sql.gz 2>&1

Apreciaría mucho una explicación.

Gracias


Primero se ejecuta el comando mysqldump y la salida generada se redirige utilizando la canalización. La tubería está enviando la salida estándar al comando gzip como entrada estándar. Después de filename.gz, es el operador de redirección de salida (>) que continuará redirigiendo los datos hasta el último nombre de archivo, que es donde se guardarán los datos.

Por ejemplo, este comando volcará la base de datos y la ejecutará a través de gzip y los datos finalmente aterrizarán en three.gz

mysqldump -u user -pupasswd my-database | gzip > one.gz > two.gz > three.gz $> ls -l -rw-r--r-- 1 uname grp 0 Mar 9 00:37 one.gz -rw-r--r-- 1 uname grp 1246 Mar 9 00:37 three.gz -rw-r--r-- 1 uname grp 0 Mar 9 00:37 two.gz

Mi respuesta original es un ejemplo de redireccionamiento del volcado de base de datos a muchos archivos comprimidos (sin comprimir dos veces). (Desde que escaneé la pregunta y la extrañé seriamente, perdón por eso)

Este es un ejemplo de recompresión de archivos:

mysqldump -u user -pupasswd my-database | gzip -c > one.gz; gzip -c one.gz > two.gz; gzip -c two.gz > three.gz $> ls -l -rw-r--r-- 1 uname grp 1246 Mar 9 00:44 one.gz -rw-r--r-- 1 uname grp 1306 Mar 9 00:44 three.gz -rw-r--r-- 1 uname grp 1276 Mar 9 00:44 two.gz

Este es un buen recurso que explica la redirección de E / S: http://www.codecoffee.com/tipsforlinux/articles2/042.html


Puede usar el comando tee para redirigir la salida:

/usr/bin/mysqldump -u user -pupasswd my-database | / tee >(gzip -9 -c > /home/user/backup/mydatabase-backup-`date +/%m/%d_/%Y`.sql.gz) | / gzip> /home/user/backup2/mydatabase-backup-`date +/%m/%d_/%Y`.sql.gz 2>&1

ver documentación here


Si necesita agregar una fecha y hora a su nombre de archivo de copia de seguridad (Centos7), use lo siguiente:

/usr/bin/mysqldump -u USER -pPASSWD DBNAME | gzip > ~/backups/db.$(date +%F.%H%M%S).sql.gz

esto creará el archivo: db.2017-11-17.231537.sql.gz