LINUX

Shell Script para hacer una copia de seguridad de todas las bases de datos MySql

En este tutorial, mostraré cómo escribir un script de shell para hacer una copia de seguridad de todas sus bases de datos mysql. Es muy esencial realizar una copia de seguridad de la base de datos de manera oportuna.

El script de shell creará un volcado de todas las bases de datos del servidor mysql y luego convertirá el archivo a un formato comprimido (tar.gz). El script usa mysqldump y el comando tar para este propósito.

Shell Script para hacer una copia de seguridad de toda la base de datos mysql y comprimir el archivo

#!/bin/bash

#Check if user input hostname, if not – exit from script
if [ "$#" = "0" ]; then

echo "Usage: `basename $0` "

exit 2

fi

#We use some variables:
#we save hostname that user input to MYSQL variable
MYSQL=$1

#Folder to keep backups
BACKUP_DIR="/data"

#we getting current timestamp, to use in filenames
NOW=`date +%Y%m%d-%H%M%S`

#name of file will be HOSTNAME-CURRENT_TIMESTAMP
NAME=${MYSQL}-${NOW}

#we use mysql access without password
PASSWORD=""

#This will create folder, where we will keep all dumps
mkdir ${BACKUP_DIR}/${NAME}

#Telling user that we start to process hostnname
echo "Processing ${MYSQL}..."

#This will get list all of databases, we use mysql command to login to server, and with awk get only
#database name without description and database with name information_schema
DBS=`echo "show databases;" | mysql --host=${MYSQL} --user=root --password=${PASSWD} | 

awk '{if ($1 != "Database" && $1 != "information_schema") {print $1}}'`

#Now we will process every database, we will create dump for each
for DB in ${DBS}; do

#telling user that we starting to dump each database
echo -n " Dumping ${DB}... "

#if database is not mysql we need to lock tables, to avoid problems when user during same time save
#something to db
if [ ${DB} != "mysql" ]; then

LOCKS="--lock-tables"

else

LOCKS=""

fi

#command that will create dump
mysqldump --host=${MYSQL} --user=root --password=${PASSWD} --force 

--allow-keywords --complete-insert --add-drop-table --add-locks --flush-logs 

${LOCKS} --result-file=${BACKUP_DIR}/${NAME}/${DB}-`date +%Y%m%d-%H%M%S`.sql ${DB} < /dev/null #telling user that process done for this database echo "Done" done echo #Now we will compress all dumps (stored in directory) to single file echo -n " Compressing files... " #with tar command we compress directory tar -czf ${BACKUP_DIR}/mysql-${NAME}.tar.gz ${BACKUP_DIR}/${NAME} >/dev/null 2>&1

echo Done

#removing uneeded directory
rm -rf ${BACKUP_DIR}/${NAME}

echo "Dump of host ${MYSQL} finished"

Salida de secuencia de comandos

Nombramos script como ‘mysql_backup.sh’ y se ejecuta en localhost. A continuación se muestra la salida del script.

#./mysql_backup.sh localhost

Processing localhost...

Dumping mysql... Done

Dumping test... Done

Compressing files... Done

Dump of host localhost finished
#ls -la /data/
# to get list of files inside directory
total 152

drwxrwxrwx 2 root root 4096 Mar 4 14:44 .

drwxr-xr-x 23 root root 4096 Mar 4 14:25 ..

-rw-r--r-- 1 yevhen yevhen 139361 Mar 4 14:44 mysql-localhost-20130304-144450.tar.gz

Desempaquetar el archivo tar.gz

Puede usar el comando tar para descomprimir el archivo comprimido como se muestra a continuación:

server# tar -zxvf mysql-localhost-20130304-144450.tar.gz

data/localhost-20130304-144450/

data/localhost-20130304-144450/test-20130304-144450.sql

data/localhost-20130304-144450/mysql-20130304-144450.sql

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar