Con este pequeño script podemos hacer backup de las bases de datos del servidor MySQL
Hacer backup de todas las bases en archivos separados
Creamos el Archivo /usr/local/bin/mysql_backup.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# nano /usr/local/bin/mysql_backup.sh #!/bin/bash # Add the backup dir location, MySQL root password, MySQL and mysqldump location DATE=$(date +%d-%m-%Y) BACKUP_DIR="/backup/test-backup" MYSQL_USER="root" MYSQL_PASSWORD="***" MYSQL=/u01/mysql/bin/mysql MYSQLDUMP=/u01/mysql/bin/mysqldump # To create a new directory in the backup directory location based on the date mkdir -p $BACKUP_DIR/$DATE # To get a list of databases databases=`$MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema)"` # To dump each database in a separate file for db in $databases; do echo $db $MYSQLDUMP --force --opt --skip-lock-tables --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/$DATE/$db.sql.gz" done # Delete the files older than 10 days find $BACKUP_DIR/* -mtime +10 -exec rm {} \; |
Le damos permisos de ejecucion
1 |
chmod +x /usr/local/bin/mysql_backup.sh |
Ejecutamos el script
1 |
sh mysql_backup.sh |
Revisamos los archivos
1 2 3 4 5 6 |
ls -lh /backup/db-backup/06-04-2019/ total 11M -rw-r--r-- 1 root root 134K Apr 6 10:14 mysql.sql.gz -rw-r--r-- 1 root root 4.6K Apr 6 10:14 performance_schema.sql.gz -rw-r--r-- 1 root root 266K Apr 6 10:14 testdb1.sql.gz -rw-r--r-- 1 root root 11M Apr 6 10:14 testdb.sql.gz |
Agregamos los siguiente en el crontab para ejecutarlo todos los dias a la 1 AM
1 |
0 1 * * * /usr/local/bin/mysql_backup.sh |
Hacer backup de solo 1 base de datos
Creamos el script mysql_backup_1.sh
1 2 3 4 5 6 7 8 9 10 |
# nano /usr/local/bin/mysql_backup_1.sh #!/bin/bash MYSQL_PASSWORD="*****" DATE=$(date +%d-%m-%Y) BACKUP_DIR="/backup/db-backup" DB=testdb echo $DB mysqldump -u root -p$MYSQL_PASSWORD $DB | gzip -9 > "$BACKUP_DIR/testdb-$DATE.sql.gz" find $BACKUP_DIR/* -mtime +5 -exec rm {} \; |
Hacer backup de todas las bases en 1 solo archivo
1 2 3 4 5 6 7 8 9 |
# nano /usr/local/bin/mysql_backup_2.sh #!/bin/bash MYSQL_PASSWORD="*****" DATE=$(date +%d-%m-%Y) BACKUP_DIR="/backup/db-backup" DB=testdb mysqldump -u root -p$MYSQL_PASSWORD --all-databases | gzip -9 > "$BACKUP_DIR/all-dbs-$DATE.sql.gz" find $BACKUP_DIR/* -mtime +5 -exec rm {} \; |