Featured image of post Script para respaldar bases de datos MySQL versión 2

Script para respaldar bases de datos MySQL versión 2

Este script en BASH sirve para reparar, optimizar y respaldar bases de datos mysql de un servidor de forma fácil y rápida.

Hace tiempo hice un script para respaldar bases de datos MySQL de un servidor MySQL, pero dejó de funcionar. Esta nueva versión arregla los problemas del anterior, aunque en esencia hace las mismas funciones.

Un pingüino creando un programa para respaldar bases de datos mysql.

Un pingüino creando un programa para respaldar bases de datos mysql.

El script

El script anterior dejó de funcionar porque en una actualización del paquete mysql-clients no permitía la comprobación, reparación y optimización de las bases de datos en una sola línea. Así que para evitar este problema tuve que separar estas tareas.

Con este código primero revisamos y reparamos cualquier error que pudieran tener todas las tablas de nuestro servidor de trabajo

mysqlcheck -c -A --auto-repair -h $IP_SERVIDOR_MYSQL -u $USUARIO --password=$DB_PASS

Para luego optimizar las tablas

mysqlcheck -A -o -h $IP_SERVIDOR_MYSQL -u $USUARIO --password=$DB_PASS

Claro que ahora el script se tarda un poco más en ejecutar, pero yo no hice las reglas :) .

Adicionalmente, le hice algunos ajustes para que el nombre de los archivos de volcado incluyera información como la fecha, hora, minutos y segundos.

Si quieren darle un vistazo al código completo verán que es muy simple de ajustar.

#!/bin/sh
#
# Este programa es software libre. Puede redistribuirlo y/o
# modificarlo bajo los términos de la Licencia Pública General
# de GNU según es publicada por la Free Software Foundation,
# bien de la versión 2 de dicha Licencia o bien (según su
# elección) de cualquier versión posterior.
#
# Este programa se distribuye con la esperanza de que sea
# útil, pero SIN NINGUNA GARANTÍA, incluso sin la garantía
# MERCANTIL implícita o sin garantizar la CONVENIENCIA PARA UN
# PROPÓSITO PARTICULAR. Para más detalles, véase la Licencia
# Pública General de GNU.
#
# Copyleft 2012
# Autor: Linuxman inguanzo@gmail.com http://linuxmanr4.com
# versión 2.0

NAME="MySQL Backup"									# Nombre script.
													# Descripción: Script para hacer un respaldo de todas las bases de datos de un servidor MySQL.
: ${DATE:=$(date +'%Y-%m-%d')}						# Variable para Fecha.
: ${TIME:=$(date +'%R')}							# Variable para Hora.
: ${WORK_DIR:=/home/usuario/directorioderespaldo/}	# Directorio de trabajo.
: ${IP_SERVIDOR_MYSQL:=IP_DEL_SERVIDOR_MYSQL}		# Dirección del servidor MySQL.
: ${USUARIO:=root}									# Usuario con privilegios a la base de datos. Ej. root
: ${DB_PASS:=CONTRASEÑA}							# La contraseña de root de nuestro servidor MySQL.

# Antes de respaldar optimizamos y reparamos las bases de datos.
clear
echo "Revisando y reparando las bases de datos."
echo "========================================="
mysqlcheck -c -A --auto-repair -h $IP_SERVIDOR_MYSQL -u $USUARIO --password=$DB_PASS

echo
echo "Optimizando las bases de datos."
echo "========================================="
mysqlcheck -A -o -h $IP_SERVIDOR_MYSQL -u $USUARIO --password=$DB_PASS

# Cambiamos a nuestro directorio de trabajo
cd $WORK_DIR

echo
echo "Iniciando el vaciado de todas las bases de datos."
echo "================================================="

# Iniciamos un vaciado de todas las bases de datos del servidor.
TABLES=`mysql -h $IP_SERVIDOR_MYSQL -u$USUARIO --password=$DB_PASS --execute="SHOW DATABASES;" |awk '{print($1)}' |grep -v "Database" |grep -v "information_schema"`
for table in $TABLES; do
	echo "Respaldando la tabla $table..."
	file=$table.respaldo_`date +%Y%m%d-%H:%M:%S`.sql
	mysqldump  -h $IP_SERVIDOR_MYSQL -u"$USUARIO" -p"$DB_PASS" $table > $file
	echo "Comprimiendo $file ..."
	gzip $file
done

echo
echo "RESPALDO TERMINADO!!!"

Sólo tienen que teclear los valores adecuados para los parámetros WORK_DIR, IP_DEL_SERVIDOR_MYSQL, USUARIOCONTRASEÑA.

Y por su puesto, darle permisos de ejecución al script, Ej.

chmod +x mysql_backup.sh

Problemas con mariadb-clients (1054)

Esta es una actualización, he usado este script durante muchos años y nunca me había tenido problemas, hasta ahora.

Y es que en mi Manjaro se dejó de utilizar MySQL y su lugar lo ocupó MariaDB , esto es perfectamente normal, lo mismo ocurrió en muchas distribuciones de Linux.

Pero Manjaro es una distribución de actualización constante y tarde o temprano iba a tener un problema.

Resulta que mi servidor utiliza la versión 5.0 de MySQL y parece que no se lleva bien con la versión 10.11.2 del paquete mariadb-clients.

Al ejecutar el script aparece un error como este:

mysqldump: Couldn't execute 'select column_name, extra, generation_expression, data_type from information_schema.columns where table_schema=database() and table_name='db'': Unknown column 'generation_expression' in 'field list' (1054)

Inicie mi investigación en Google, intenté varios ajustes pero no, lo mejor es hacer un downgrade a la versión anterior que funciona que es la número 10.10.3.

sudo downgrade mariadb-clients mariadb-libs

Para evitar que estos paquetes se actualicen los agregué a la lista de paquetes ignorados en el archivo /etc/pacman.conf

#
# GENERAL OPTIONS
#
[options]
IgnorePkg = mariadb-clients mariadb-libs

Noten que también hay que hacer un downgrade al paquete mariadb-libs ya que uno depende del otro.

Otra solución sería hacer una actualización al servidor MySQL pero eso implica un montón de pruebas de compatibilidad con otros elementos de programación y la verdad no le veo el caso.

En todos estos años jamás he perdido un registro con la versión que estoy utilizando.

Así que con hacer el downgrade es más que suficiente para que el script vuelva a funcionar.

Si tienen cualquier comentario al respecto se los agradeceré. Espero que les sea de utilidad.

Licensed under CC BY-NC-SA 4.0
Última actualización 22 may. 2013 522:00 CST
Todas las imágenes, nombres de productos y nombres de empresa o logotipos citados en esta página web son propiedad de sus respectivos propietarios.
Creado con Hugo
Tema Stack diseñado por Jimmy