Com fer una còpia de seguretat/restaurar MySQL/MariaDB i PostgreSQL mitjançant les eines Automysqlbackup i Autopostgresqlbackup


Si sou un administrador de bases de dades (DBA) o sou responsable del manteniment, la còpia de seguretat i la restauració de bases de dades, sabeu que no us podeu permetre el luxe de perdre dades. El motiu és senzill: perdre dades no només significa la pèrdua d'informació important, sinó que també pot danyar econòmicament el vostre negoci.

Per aquest motiu, sempre has d'assegurar-te que:

1. Es fa una còpia de seguretat de les vostres bases de dades periòdicament,
2. aquestes còpies de seguretat s'emmagatzemen en un lloc segur i
3. Realitzeu exercicis de restauració amb regularitat.

Aquesta última activitat no s'ha de passar per alt, ja que no es vol topar amb un problema important sense haver practicat el que s'ha de fer en aquesta situació.

En aquest tutorial us presentarem dues utilitats agradables per fer una còpia de seguretat de les bases de dades MySQL/MariaDB i PostgreSQL, respectivament: automysqlbackup i autopostgresqlbackup.

Com que el segon es basa en el primer, centrarem la nostra explicació en automysqlbackup i destacarem les diferències amb autopgsqlbackup, si n'hi ha.

És molt recomanable emmagatzemar les còpies de seguretat en una compartició de xarxa muntada al directori de còpies de seguretat de manera que en cas d'error a tot el sistema, encara estareu cobert.

Llegiu les guies útils següents sobre MySQL:

Instal·lació de bases de dades MySQL/MariaDB/PostgreSQL

1. Aquesta guia suposa que heu de tenir una instància MySQL/MariaDB/PostgreSQL en execució. Si no, instal·leu els paquets següents:

# 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. Teniu una base de dades de prova MySQL/MariaDB/PostgreSQL que podeu utilitzar (se recomana que NO utilitzeu ni automysqlbackup ni autopostgresqlbackup en un entorn de producció fins que no us hàgiu familiaritzat amb aquestes eines).

En cas contrari, creeu dues bases de dades de mostra i ompliu-les amb dades abans de continuar. En aquest article faré servir les següents bases de dades i taules:

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);

Instal·lació d'automysqlbackup i autopgsqlbackup a CentOS 7 i Debian 8

3. A Debian 8, ambdues eines estan disponibles als dipòsits, de manera que instal·lar-les és tan senzill com executar:

# aptitude install automysqlbackup autopostgresqlbackup

Mentre que a CentOS 7 haureu de descarregar els scripts d'instal·lació i executar-los. A les seccions següents ens centrarem exclusivament a instal·lar, configurar i provar aquestes eines a CentOS 7, ja que per a Debian 8, on gairebé funcionen de manera immediata, farem els aclariments necessaris més endavant en aquest article.

4. Comencem creant un directori de treball dins de /opt per descarregar l'script d'instal·lació i executar-lo:

# 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 fitxer de configuració d'automysqlbackup es troba dins de /etc/automysqlbackup amb el nom myserver.conf. Fem una ullada a les directives de configuració més rellevants:

# 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 )
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"

Un cop hàgiu configurat automysqlbackup segons les vostres necessitats, us recomanem que comproveu el fitxer README que es troba a /etc/automysqlbackup/README.

6. Quan estigueu preparat, seguiu endavant i executeu el programa, passant el fitxer de configuració com a argument:

# automysqlbackup /etc/automysqlbackup/myserver.conf

Una inspecció ràpida del directori diari mostrarà que automysqlbackup s'ha executat correctament:

# pwd
# ls -lR daily

Per descomptat, podeu afegir una entrada crontab per executar automysqlbackup a l'hora del dia que millor s'adapti a les vostres necessitats (1:30 am cada dia a l'exemple següent):

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

7. Ara deixem la base de dades mariadb_db a propòsit:

Tornem a crear-lo i restaurem la còpia de seguretat. A l'indicador de MariaDB, escriviu:

CREATE DATABASE mariadb_db;
exit

Llavors localitza:

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

I restaura la còpia de seguretat:

# 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;

Instal·lació i configuració d'autopostgresqlbackup a CentOS 7

8. Perquè autopostgresql funcioni perfectament a CentOS 7, primer haurem d'instal·lar algunes dependències:

# yum install mutt sendmail

A continuació, repetim el procés com abans:

# 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

Fem que l'script sigui executable i iniciem/habilitem el servei:

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

Finalment, editarem el valor de la configuració del directori de còpia de seguretat a:

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

Després d'haver passat pel fitxer de configuració d'automysqlbackup, configurar aquesta eina és molt fàcil (aquesta part de la tasca us queda a vosaltres).

9. A CentOS 7, a diferència de Debian 8, autopostgresqlbackup s'executa millor com a usuari del sistema postgres, de manera que per fer-ho hauríeu de canviar a aquest compte o afegir un treball cron al fitxer crontab:

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

El directori de còpia de seguretat, per cert, s'ha de crear i els seus permisos i la propietat del grup s'han d'establir recursivament a 0770 i postgres (de nou, això NO serà necessari a Debian):

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

El resultat:

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

10. Ara podeu restaurar els fitxers quan sigui necessari (recordeu fer-ho com a usuari postgres després de recrear la base de dades buida):

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

Consideracions a Debian 8

Com hem esmentat anteriorment, no només la instal·lació d'aquestes eines a Debian és més senzilla, sinó també les seves configuracions respectives. Trobareu els fitxers de configuració a:

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

Resum

En aquest article hem explicat com instal·lar i utilitzar automysqlbackup i autopostgresqlbackup (aprendre a utilitzar el primer també us ajudarà a dominar el segon), dues grans eines de còpia de seguretat de bases de dades que poden fer les vostres tasques com a DBA o administrador/enginyer del sistema. molt més fàcil.

Tingueu en compte que podeu ampliar aquest tema configurant notificacions per correu electrònic o enviant fitxers de còpia de seguretat com a fitxers adjunts per correu electrònic, no és estrictament obligatori, però de vegades pot ser útil.

Com a nota final, recordeu que els permisos dels fitxers de configuració s'han de posar al mínim (0600 en la majoria dels casos). Esperem saber què en penseu sobre aquest article. No dubteu a enviar-nos una nota mitjançant el formulari següent.