GNU/Linux >> Tutoriales Linux >  >> Linux

Script de shell de Linux para la copia de seguridad de la base de datos

Tengo el mismo problema. Pero logro escribir un guión. Espero que esto ayude.

#!/bin/bash
# Database credentials
user="username"
password="password"
host="localhost"
db_name="dbname"
# Other options
backup_path="/DB/DB_Backup"
date=$(date +"%d-%b-%Y")
# Set default file permissions
umask 177
# Dump database into SQL file
mysqldump --user=$user --password=$password --host=$host $db_name >$backup_path/$db_name-$date.sql

# Delete files older than 30 days
find $backup_path/* -mtime +30 -exec rm {} \;


#DB backup log
echo -e "$(date +'%d-%b-%y  %r '):ALERT:Database has been Backuped"    >>/var/log/DB_Backup.log

Cree un script similar a este:

#!/bin/sh -e

location=~/`date +%Y%m%d_%H%M%S`.db

mysqldump -u root --password=<your password> database_name > $location

gzip $location

Luego puedes editar el crontab del usuario que el script se ejecutará como:

$> crontab -e

Y agregue la entrada

01 * * * * ~/script_path.sh

Esto hará que funcione en el primer minuto de cada hora todos los días.

Luego, solo tiene que agregar sus rollos y otras funciones y listo.


Después de horas y horas de trabajo, creé una solución como la siguiente. Copio y pego para otras personas que pueden beneficiarse.

Primero cree un archivo de secuencia de comandos y otorgue a este archivo permiso de ejecución.

# cd /etc/cron.daily/
# touch /etc/cron.daily/dbbackup-daily.sh
# chmod 755 /etc/cron.daily/dbbackup-daily.sh
# vi /etc/cron.daily/dbbackup-daily.sh

Luego copie las siguientes líneas en el archivo con Shift+Ins

#!/bin/sh
now="$(date +'%d_%m_%Y_%H_%M_%S')"
filename="db_backup_$now".gz
backupfolder="/var/www/vhosts/example.com/httpdocs/backups"
fullpathbackupfile="$backupfolder/$filename"
logfile="$backupfolder/"backup_log_"$(date +'%Y_%m')".txt
echo "mysqldump started at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
mysqldump --user=mydbuser --password=mypass --default-character-set=utf8 mydatabase | gzip > "$fullpathbackupfile"
echo "mysqldump finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
chown myuser "$fullpathbackupfile"
chown myuser "$logfile"
echo "file permission changed" >> "$logfile"
find "$backupfolder" -name db_backup_* -mtime +8 -exec rm {} \;
echo "old files deleted" >> "$logfile"
echo "operation finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
echo "*****************" >> "$logfile"
exit 0

Editar:
Si usa InnoDB y la copia de seguridad lleva demasiado tiempo, puede agregar el argumento de "transacción única" para evitar el bloqueo. Así que la línea mysqldump será así:

mysqldump --user=mydbuser --password=mypass --default-character-set=utf8
          --single-transaction mydatabase | gzip > "$fullpathbackupfile"

Linux
  1. 4 formas de ejecutar un script de shell en UNIX/Linux

  2. 2 Scripts Perl de regresión de memoria para Linux

  3. Cómo buscar archivos usando expresiones regulares en el script de shell de Linux

  4. Copia de seguridad automática de la base de datos MySQL en el servidor Linux

  5. Script de transliteración para shell de linux

Trucos de formato para el comando de fecha de Linux

Cómo almacenar un comando de Linux como una variable en el script de Shell

Cómo ejecutar Shell Script como servicio SystemD en Linux

Imprimir el tiempo de ejecución de la secuencia de comandos de Shell en Linux

¿Qué es Shebang en Linux Shell Scripting?

Los 15 mejores software de copia de seguridad para escritorio Linux