Recuperació M2UF3 Juny
Contingut
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
Una vegada instal·lat, activarem l'arrencada del servei amb systemctl enable mariadb
i l'engegarem manualment amb systemctl start mariadb
Llavors posarem a punt el SGBD amb l'script de configuració inicial mysql_secure_installation
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
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.
Una vegada desats els canvis, reiniciarem el servei de mariadb amb systemctl restart mariadb
per tal que recarregui la nova configuració.
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.
- Hem de tenir en compte que necessitarem crear el directori
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
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
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
Una vegada desat, veurem com apareix el nou usuari a la llista d'usuaris existents al SGBD
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:
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ó:
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.
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:
Quan acabi la importació tindrem el missatge de Import complete amb les 48 taules importades correctament.
Si miro per consola la BBDD wiki del servidor CentOS de l'exercici, veuré com hi ha les taules creades: