Diferència entre revisions de la pàgina «ASIX/M02/UF3/A07»

De Lordwektabyte Wiki
Salta a la navegació Salta a la cerca
Línia 92: Línia 92:
 
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.<br/>Indica tots els passos que has fet.
 
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.<br/>Indica tots els passos que has fet.
 
===Solució===
 
===Solució===
 +
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
 +
{{imatge|M02UF3A07-8.png}}

Revisió del 14:23, 12 juny 2018

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ó

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

M02UF3A07-8.png