Cómo hacer una copia de seguridad/restaurar MySQL/MariaDB y PostgreSQL usando las herramientas Automysqlbackup y Autopostgresqlbackup


Si es administrador de bases de datos (DBA) o es responsable de mantener, realizar copias de seguridad y restaurar bases de datos, sabe que no puede permitirse perder datos. La razón es simple: perder datos no solo significa la pérdida de información importante, sino que también puede dañar financieramente su negocio.

Por esa razón, siempre debes asegurarte de que:

1. Sus bases de datos se respaldan periódicamente,
2. esas copias de seguridad se almacenan en un lugar seguro, y
3. Realiza ejercicios de restauración con regularidad.

Esta última actividad no debe pasarse por alto, ya que no querrá encontrarse con un problema importante sin haber practicado lo que debe hacerse en tal situación.

En este tutorial, le presentaremos dos buenas utilidades para realizar copias de seguridad de bases de datos MySQL/MariaDB y PostgreSQL, respectivamente: automysqlbackup y autopostgresqlbackup.

Dado que el último se basa en el primero, centraremos nuestra explicación en automysqlbackup y destacaremos las diferencias con autopgsqlbackup, si es que hay alguna.

Se recomienda encarecidamente almacenar las copias de seguridad en un recurso compartido de red montado en el directorio de copias de seguridad para que, en caso de una falla en todo el sistema, aún esté cubierto.

Lea las siguientes guías útiles sobre MySQL:

Instalación de bases de datos MySQL/MariaDB/PostgreSQL

1. Esta guía asume que debe tener una instancia de MySQL/MariaDB/PostgreSQL en ejecución. De lo contrario, instale los siguientes paquetes:

# yum update && yum install mariadb mariadb-server mariadb-libs postgresql postgresql-server postgresql-libs
# aptitude update && aptitude install mariadb-client mariadb-server mariadb-common postgresql-client postgresql postgresql-common

2. Tiene una base de datos de prueba MySQL/MariaDB/PostgreSQL que puede usar (se recomienda NO usar automysqlbackup o autopostgresqlbackup en un entorno de producción hasta que se haya familiarizado con estas herramientas).

De lo contrario, cree dos bases de datos de muestra y complételas con datos antes de continuar. En este artículo utilizaré las siguientes bases de datos y tablas:

CREATE DATABASE mariadb_db;
CREATE TABLE tecmint_tbl (UserID INT AUTO_INCREMENT PRIMARY KEY, 
UserName VARCHAR(50), 
IsActive BOOL);
CREATE DATABASE postgresql_db;
CREATE TABLE tecmint_tbl (
UserID SERIAL PRIMARY KEY,
UserName VARCHAR(50),
IsActive BOOLEAN);

Instalación de automysqlbackup y autopgsqlbackup en CentOS 7 y Debian 8

3. En Debian 8, ambas herramientas están disponibles en los repositorios, por lo que instalarlas es tan simple como ejecutar:

# aptitude install automysqlbackup autopostgresqlbackup

Mientras que en CentOS 7 deberá descargar los scripts de instalación y ejecutarlos. En las secciones siguientes, nos centraremos exclusivamente en instalar, configurar y probar estas herramientas en CentOS 7, ya que para Debian 8, donde casi funcionan de fábrica, haremos las aclaraciones necesarias más adelante en este artículo.

4. Comencemos por crear un directorio de trabajo dentro de /opt para descargar el script de instalación y ejecutarlo:

# mkdir /opt/automysqlbackup
# cd /opt/automysqlbackup
# wget http://ufpr.dl.sourceforge.net/project/automysqlbackup/AutoMySQLBackup/AutoMySQLBackup%20VER%203.0/automysqlbackup-v3.0_rc6.tar.gz
# tar zxf automysqlbackup-v3.0_rc6.tar.gz
# ./install.sh

5. El archivo de configuración para automysqlbackup se encuentra dentro de/etc/automysqlbackup con el nombre myserver.conf. Echemos un vistazo a las directivas de configuración más relevantes:

# Username to access the MySQL server
CONFIG_mysql_dump_username='root'
# Password
CONFIG_mysql_dump_password='YourPasswordHere'
# Host name (or IP address) of MySQL server
CONFIG_mysql_dump_host='localhost'
# Backup directory
CONFIG_backup_dir='/var/backup/db/automysqlbackup'
# List of databases for Daily/Weekly Backup e.g. ( 'DB1' 'DB2' 'DB3' ... )
# set to (), i.e. empty, if you want to backup all databases
CONFIG_db_names=(AddYourDatabase Names Here)
# List of databases for Monthly Backups.
# set to (), i.e. empty, if you want to backup all databases
CONFIG_db_month_names=(AddYourDatabase Names Here)
# Which day do you want monthly backups? (01 to 31)
# If the chosen day is greater than the last day of the month, it will be done
# on the last day of the month.
# Set to 0 to disable monthly backups.
CONFIG_do_monthly="01"
# Which day do you want weekly backups? (1 to 7 where 1 is Monday)
# Set to 0 to disable weekly backups.
CONFIG_do_weekly="5"
# Set rotation of daily backups. VALUE*24hours
# If you want to keep only today's backups, you could choose 1, i.e. everything older than 24hours will be removed.
CONFIG_rotation_daily=6
# Set rotation for weekly backups. VALUE*24hours. A value of 35 means 5 weeks.
CONFIG_rotation_weekly=35
# Set rotation for monthly backups. VALUE*24hours. A value of 150 means 5 months.
CONFIG_rotation_monthly=150
# Include CREATE DATABASE statement in backup?
CONFIG_mysql_dump_create_database='no'
# Separate backup directory and file for each DB? (yes or no)
CONFIG_mysql_dump_use_separate_dirs='yes'
# Choose Compression type. (gzip or bzip2)
CONFIG_mysql_dump_compression='gzip'
# What would you like to be mailed to you?
# - log   : send only log file
# - files : send log file and sql files as attachments (see docs)
# - stdout : will simply output the log to the screen if run manually.
# - quiet : Only send logs if an error occurs to the MAILADDR.
CONFIG_mailcontent='quiet'
# Email Address to send mail to? ([email protected])
CONFIG_mail_address='root'
# Do you wish to encrypt your backups using openssl?
#CONFIG_encrypt='no'
# Choose a password to encrypt the backups.
#CONFIG_encrypt_password='password0123'
# Command to run before backups (uncomment to use)
#CONFIG_prebackup="/etc/mysql-backup-pre"
# Command run after backups (uncomment to use)
#CONFIG_postbackup="/etc/mysql-backup-post"

Una vez que haya configurado automysqlbackup según sus necesidades, le recomendamos encarecidamente que consulte el archivo README que se encuentra en/etc/automysqlbackup/README.

6. Cuando esté listo, continúe y ejecute el programa, pasando el archivo de configuración como argumento:

# automysqlbackup /etc/automysqlbackup/myserver.conf

Una inspección rápida del directorio diario mostrará que automysqlbackup se ha ejecutado correctamente:

# pwd
# ls -lR daily

Por supuesto, puede agregar una entrada crontab para ejecutar automysqlbackup en el momento del día que mejor se adapte a sus necesidades (1:30 am todos los días en el siguiente ejemplo):

30 01 * * * /usr/local/bin/automysqlbackup /etc/automysqlbackup/myserver.conf

7. Ahora eliminemos la base de datos mariadb_db a propósito:

Vamos a crearlo de nuevo y restaurar la copia de seguridad. En el indicador de MariaDB, escriba:

CREATE DATABASE mariadb_db;
exit

Luego localiza:

# cd /var/backup/db/automysqlbackup/daily/mariadb_db
# ls

Y restaurar la copia de seguridad:

# mysql -u root -p mariadb_db < daily_mariadb_db_2015-09-01_23h19m_Tuesday.sql
# mysql -u root -p
MariaDB [(none)]> USE mariadb_db; 
MariaDB [(none)]> SELECT * FROM tecmint_tb1;

Instalación y configuración de autopostgresqlbackup en CentOS 7

8. Para que autopostgresql funcione sin problemas en CentOS 7, primero necesitaremos instalar algunas dependencias:

# yum install mutt sendmail

Luego repitamos el proceso como antes:

# mkdir /opt/autopostgresqlbackup
# cd /opt/autopostgresqlbackup
# wget http://ufpr.dl.sourceforge.net/project/autopgsqlbackup/AutoPostgreSQLBackup/AutoPostgreSQLBackup-1.0/autopostgresqlbackup.sh.1.0
# mv autopostgresqlbackup.sh.1.0 /opt/autopostgresqlbackup/autopostgresqlbackup.sh

Hagamos que el script sea ejecutable e iniciemos/habilitemos el servicio:

# chmod 755 autopostgresqlbackup.sh
# systemctl start postgresql
# systemctl enable postgresql

Finalmente, editaremos el valor de la configuración del directorio de respaldo para:

BACKUPDIR="/var/backup/db/autopostgresqlbackup"

Después de haber revisado el archivo de configuración de automysqlbackup, configurar esta herramienta es muy fácil (esa parte de la tarea se deja a usted).

9. En CentOS 7, a diferencia de Debian 8, es mejor ejecutar autopostgresqlbackup como usuario del sistema postgres, por lo que, para hacerlo, debe cambiar a esa cuenta o agregar un trabajo cron a su archivo crontab:

# crontab -u postgres -e
30 01 * * * /opt/autopostgresqlbackup/autopostgresqlbackup.sh

El directorio de respaldo, por cierto, debe crearse y sus permisos y la propiedad del grupo deben establecerse recursivamente en 0770 y postgres (nuevamente, esto NO será necesario en Debian):

# mkdir /var/backup/db/autopostgresqlbackup
# chmod -R 0770 /var/backup/db/autopostgresqlbackup
# chgrp -R postgres /var/backup/db/autopostgresqlbackup

El resultado:

# cd /var/backup/db/autopostgresqlbackup
# pwd
# ls -lR daily

10. Ahora puede restaurar los archivos cuando sea necesario (recuerde hacer esto como usuario postgres después de recrear la base de datos vacía):

# gunzip -c postgresql_db_2015-09-02.Wednesday.sql.gz | psql postgresql_db

Consideraciones en Debian 8

Como mencionamos anteriormente, no solo la instalación de estas herramientas en Debian es más sencilla, sino también sus respectivas configuraciones. Encontrarás los archivos de configuración en:

  1. Automysqlbackup:/etc/default/automysqlbackup
  2. Autopostgresqlbackup:/etc/default/autopostgresqlbackup

Resumen

En este artículo, hemos explicado cómo instalar y usar automysqlbackup y autopostgresqlbackup (aprender a usar el primero también lo ayudará a dominar el segundo), dos excelentes herramientas de respaldo de base de datos que pueden realizar sus tareas como DBA o administrador/ingeniero de sistemas más fácil.

Tenga en cuenta que puede ampliar este tema configurando notificaciones por correo electrónico o enviando archivos de respaldo como archivos adjuntos por correo electrónico; no es estrictamente necesario, pero a veces puede resultar útil.

Como nota final, recuerde que los permisos de los archivos de configuración deben establecerse al mínimo (0600 en la mayoría de los casos). Esperamos escuchar su opinión sobre este artículo. No dude en enviarnos una nota utilizando el formulario a continuación.