Recuperació M2UF3 Juny

De Lordwektabyte Wiki
Salta a la navegació Salta a la cerca

Guillem Solà i Boeck (host A10BPC24)

Notes

  • La connexió a la màquina CentOS la faré a través de SSH, utilitzant el Yakuake. Si no es veu la resta de pantalla, és perquè utilitzo el Yakuake en mode de pantalla completa; no pas perquè modifiqui les imatges.
  • La màquina instal·lada es troba a l'adreça 192.168.56.254, de manera que les connexions remotes es faran a través d'aquesta IP.

Exercici 1

Crea un sistema de còpies de seguretat per tal que no es perdi cap dada en cas de fallida del sistema.
Indica tots els passos que has fet.

Solució

Còpia de seguretat

Primer de tot instal·laré un servidor de bases de dades MariaDB amb

yum install mariadb-server -y
M02UF3A07-1.png


Una vegada instal·lat, activarem l'arrencada del servei amb systemctl enable mariadb i l'engegarem manualment amb systemctl start mariadb

M02UF3A07-2.png


Llavors posarem a punt el SGBD amb l'script de configuració inicial mysql_secure_installation

M02UF3A07-3.png


Finalment, haurem d'obrir el port del Firewall i permetre al SELinux d'accedir al SGBD, de manera que poguem connectar remotament al servidor des d'altres dispositius de xarxa (clients). En el meu cas, per simplicitat, desactivaré directament tant el firewall com el SELinux. Tot i que en un entorn real, en producció, seria millor obrir el port 3306 i aplicar la política corresponent al SELinux. Les comandes per desactivar el firewall i desactivar el SELinux són les següents:

systemctl stop firewalld     #Paro el servei de tallafoc
systemctl disable firewalld  #El deshabilito perquè no s'activi al fer ''reboot'' del servidor
setenforce 0                 #Desactivo el SELinux de manera temporal fins al pròxim reinici

Per desactivar el SELinux de manera persistent entre reinicis, hem d'editar el seu fitxer de configuració /etc/selinux/config amb qualsevol editor de text. On trobem el paràmetre SELINUX=enforcing ho substituirem per SELINUX=disabled

M02UF3A07-4.png


Amb això queda a punt el servidor per a poder començar a treballar amb bases de dades.

Per a poder muntar un sistema de còpies de seguretat robust, haurem d'activar els anomenats logs binaris de MariaDB. Aquests logs són els que s'aniran omplint a mida que es fan canvis a les bases de dades del sistema, entre comandes de còpia de seguretat completa. De manera que, per a poder restaurar el sistema en un punt de temps donat, necessitarem l'última còpia completa (executada amb mysqldump) conjuntament amb els arxius de logs binaris fins al moment de la fallada.
Per a activar els logs binaris, modificarem l'arxiu de configuració de MariaDB /etc/my.cnf.d/server.cnf i afegirem

[mysqld]
#Binary log
log_bin=/var/log/mariadb/binary.log

A sota la secció [mysqld]. Prendrem nota de la ruta on definim els logs per a desar-se: /var/log/mariadb/binary.log ja que la necessitarem per a poder crear un script d'automatització de backups.

M02UF3A07-5.png


Una vegada desats els canvis, reiniciarem el servei de mariadb amb systemctl restart mariadb per tal que recarregui la nova configuració.

A partir d'ara, els canvis que fem a les BBDD quedaran reflectits en arxius del tipus /var/log/mariadb/binary.xxxxxx on xxxxxx correspondrà a l'índex d'aquell arxiu de logs i tindrem un altre arxiu binary.index que desarà solament el nom dels logs binaris vàlids en aquell moment


Aleshores, l'script que farà la còpia de seguretat, per exemple, el podem desar com /root/backup-sql.sh el crearé i li posaré el següent contingut:

#!/bin/bash
dia=$(date +%Y-%m-%d)
file=/root/backups/mariadb-backup_$dia.sql

echo "... Creant còpia de seguretat de totes les bases de dades cap a l'arxiu $file ... "
mysqldump -uroot -pasix --single-transaction --flush-logs --master-data=2 --all-databases --delete-master-logs > $file
echo "... Backup creat  ..."

Un cop desat, el farem executable amb un chmod +x /root/backup-sql.sh.

  • Hem de tenir en compte que necessitarem crear el directori /root/backups abans d'executar l'script, ja que sinó tindrem un error de directory not found.

Pel que fa a l'automatització, ho deixarem en mans de cron. Més concretament, anacron ja que simplifica la feina del sysadmin de manera que col·locarem un script (o bé un symlink a aquest) en un directori concret perquè s'executi en la freqüència que nosaltres volguem. En aquesta pràctica, programaré l'script creat anteriorment perquè s'executi una vegada al dia. El que hauré de fer, doncs, sabent que l'script es troba a /root/backup-sql.sh, serà fer un enllaç simbòlic d'aquest script cap al directori on anacron busca pels scripts que s'han d'executar diàriament

ln -s /root/backup-sql.sh /etc/cron.daily/backup-mariadb
Creo l'enllaç simbòlic i comprovo que s'ha creat correctament al destí


A partir d'aquí, ja podrem estar tranquils perquè un cop al dia s'executarà l'script de còpia de seguretat i es desarà una còpia completa de la BBDD al lloc especificat. A més a més, a l'activar els logs binaris, els canvis que es produeixin entre les còpies completes (executat mitjançant l'script) seran desats en el directori de logs de MariaDB de manera que podrem tirar enrere canvis no desitjats o bé restaurar la BBDD en qualsevol moment en un altre SGBD.

Restauració

Crearem un script /root/restore-sql.sh amb el següent contingut:

#!/bin/bash
path=$1
date=$(date +%Y-%m-%d)

if [ $# -ne 0 ]; then
	echo "... Convertint logs binaris a SQL ..."
	mysqlbinlog /var/log/mariadb/binary* >> /var/log/mariadb/binlog_$date.sql
	
	echo "... Tots els arxius binaris s'han transformat a l'arxiu /var/log/mariadb/binlog_$date.sql ..."
	
	echo "... Restaurant còpia de seguretat des de l'arxiu "$path" ..." 
	mysql -uroot -pasix < $path
        mysql -uroot -pasix < /var/log/mariadb/binlog_$date.sql
	
	echo "... BBDD restaurada correctament ... "
	
	echo "... Netejant logs binaris antics  ..."	
	rm -f /var/log/mariadb/binary.0*
	rm -f /var/log/mariadb/binary.index
	
	echo "... Reiniciant servei MariaDB  ..."
	systemctl restart mariadb 
else
	echo "Falta la ruta des d'on restaurar la còpia!"
fi

Com podem veure, és un script que requereix un paràmetre per a definir l'arxiu de còpia de seguretat SQL que volem restaurar, per tant, l'haurem de cridar passant-li aquest paràmetre. El que fa aquest script és convertir primer tots els logs binaris que s'han generat des de l'última execució de mysqldump i els converteix a un arxiu de text pla .sql. Aleshores restaura l'arxiu .sql corresponent a la còpia completa (la que s'ha fet amb l'script de l'apartat de backup) i llavors restaura l'arxiu .sql resultant dels arxius binaris transformats. Finalment, és necessari reiniciar el servei de MariaDB perquè es ressetegin els arxius binaris.

Exercici 2

Amb MySQLWorkbench (des de l'amfitrió), crear un nou usuari amb nom "recuperacio" i password "recuperacio". Torna a connectar-te amb MySQLWorkbench amb aquest usuari i carrega la teva base de dades de la mediawiki, exporta-la a la màquina virtual.
Indica tots els passos que has fet.

Solució

Primer crearem un usuari root al MariaDB del servidor per a poder connectar-nos des d'un host remot al que està corrent MariaDB:

MariaDB [mysql]> CREATE USER 'root'@'%' IDENTIFIED BY 'asix';
Query OK, 0 rows affected (0.00 sec)

I li donarem permisos de root amb

MariaDB [(none)]> GRANT ALL ON *.* to 'root'@'%';
Query OK, 0 rows affected (0.00 sec)

Si mirem la taula d'usuaris del SGBD veurem que ja tenim un usuari root per a poder connectar des de qualsevol host

MariaDB [mysql]> select user,host from user;
+------+-----------+
| user | host      |
+------+-----------+
| root | %         |
| root | 127.0.0.1 |
| root | ::1       |
| root | localhost |
| root | template  |
+------+-----------+
5 rows in set (0.00 sec)

Obrirem MySQLWorkbench des de la màquina host i configurarem una nova connexió per a l'usuari root del SGBD de la màquina virtual

Omplirem els camps amb les dades pertinents i provarem la connexió amb el botó Test Connection per a verificar


Com que la connexió és correcta, desarem amb el botó Save i ja podrem accedir amb MySQLWorkbench al servidor CentOS amb la connexió creada.
Per a crear un nou usuari, farem clic a Users and privileges al menú de l'esquerra, i afegirem un compte amb el botó Add account de sota

Posaré les dades com es demana a l'enunciat i faré clic a Apply


Una vegada desat, veurem com apareix el nou usuari a la llista d'usuaris existents al SGBD

M02UF3A07-10.png


Aleshores crearé la BBDD wiki per importar-la i li donaré permisos a l'usuari recuperacio:

MariaDB [mysql]> create database wiki;
Query OK, 1 row affected (0.00 sec)
MariaDB [mysql]> GRANT ALL ON wiki.* to 'recuperacio'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

Un cop he creat l'altre usuari recuperacio, desconnectaré de la sessió del root i faré una nova connexió per a l'usuari recuperacio:

Faig un testeig abans de desar. Successful


Ara crearé una connexió nova per a la màquina virtual on tinc corrent la Wiki (192.168.56.2) per tal de fer l'exportació:

Testejo la connexió perquè vegis que m'hi connecto correctament


Obriré la connexió i, des del menú de l'esquerra →Data export seleccinaré les BBDD que vull exportar (en el meu cas la única que hi ha, la de la wiki) i clicaré al botó Start export de baix a la dreta.

M02UF3A07-13.png


Una vegada exportat, podrem recuperar l'arxiu a la ruta /home/guillem/dumps/Dump20180612-1


Per a importar-lo, obriré la connexió que tinc amb el CentOS de l'exercici i, de la mateixa manera, al menú de l'esquerra faré clic a Data import:

Posaré la ruta on he exportat la BBDD de la wiki des de la VM i clicaré Start import


Quan acabi la importació tindrem el missatge de Import complete amb les 48 taules importades correctament.

M02UF3A07-17.png


Si miro per consola la BBDD wiki del servidor CentOS de l'exercici, veuré com hi ha les taules creades:

M02UF3A07-18.png