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