Table of Contents
Backup
MySQL DB Backup
Il cluster MySQL e' composto da tre macchine nelle quali e' installato Percona XtraDB Cluster. Per eseguire il backup basta utilizzare uno qualsiasi dei tre server, essendo tutti in configurazione attiva. Nel nostro cluster e' stato utilizzato mysql-cluster-01 per eseguire tutte le attivita' di backup.
Percona fornisce un tool per eseguire il backup e restore chiamato innobackupex.
Innobackupex esegue il “full backup” del cluster e non “partial backups” in quanto Percona utilizza un unico tablespace per tutti i databases. Per consentire i “partial backups” e' necessario utilizzare l'opzione innodb_file_per_table nella configurazione di MySQL (attiva nel nostro caso).
Innobackupex e' uno script perl che utilizza il binario xtrabackup per eseguire il backup di tutti i dati delle tabelle InnoDB, tutte le definizioni delle tabelle nel database (.frm files), dati e files riferiti a MyISAM, … , triggers e informazioni di configurazione del database in una directory con nome il timestamp attuale creata nella directory fornita al comando.
I files di backup sono salvati in una partizione montata sotto /backup/mysql/xtrabackup.
[root@mysql-cluster-01 ~]# ll /backup/mysql/xtrabackup/
………………………………………..
drwxr-xr-x 28 root root 4096 Sep 19 20:00 /backup/mysql/xtrabackup/2014-09-19_20-00-05
drwxr-xr-x 28 root root 4096 Sep 20 20:00 /backup/mysql/xtrabackup/2014-09-20_20-00-02
drwxr-xr-x 28 root root 4096 Sep 21 20:00 /backup/mysql/xtrabackup/2014-09-21_20-00-06
drwxr-xr-x 28 root root 4096 Sep 22 20:00 /backup/mysql/xtrabackup/2014-09-22_20-00-02
drwxr-xr-x 28 root root 4096 Sep 23 20:00 /backup/mysql/xtrabackup/2014-09-23_20-00-06
Full Backup/Restore
Il backup viene eseguito ogni sera alle 20:00 tramite un cron job, nel quale viene invocato il comando: /usr/bin/innobackupex /backup/mysql/xtrabackup/<timestamp>
Per eseguire il restore bisogna innanzitutto copiare il backup in un area temporanea e applicare i logs al backup con i seguenti comandi:
mkdir /tmp/backup cp -r /backup/mysql/xtrabackup/<timestamp>/* /tmp/backup/ innobackupex –apply-log –use-memory=2G /tmp/backup
A questo punto spegnare tutte le istanze mysql nel cluster con il comando:
/etc/init.d/mysql stop
ripulire l'area data di mysql:
rm -rf /var/lib/mysql/*
e caricare il backup con l'opzione di copy-back (la dir. dove ripristinare viene letta dal file di conf. /etc/my.cnf):
innobackupex --copy-back /tmp/backup
Una volta caricato tutti i database, cambiare i permessi dell'area mysql:
chown -R mysql:mysql /var/lib/mysql
A questo punto e' possibile riavviare il server mysql nel nodo mysql-cluster-01 con il seguente comando:
/etc/init.d/mysql start --wsrep-cluster-address="gcomm://"
Non utilizzare il comando "/etc/init.d/mysql start" per avviare la prima istanza del database perche' non troverebbe le altre istanze attive e non riuscirebbe ad avviarsi.
Una volta avviata la prima istanza procedere con le altre due. Nel caso non si sia gia' proceduto alla pulizia dell'area dati di mysql eseguire il comando:
rm -rf /var/lib/mysql/*
Ora e' possibile avviare mysql:
/etc/init.d/mysql start
Partial Backups/Restore
Il backup viene eseguito ogni mattina alle 08:00 tramite un cron job. I backups dei singoli database sono eseguiti tramite il comando mysqldump. Per eseguire il backup e' stato utilizzato lo script presente al link http://bash.cyberciti.biz/backup/backup-mysql-database-server-2/ con alcune personalizzazioni. Lo script in mysql-clsuter-01 si chiama /usr/local/bin/mysql_dump_separate_db.
I vecchi backup verranno cancellati dall'area backup dopo 30 giorni tramite il comando (non ancora attivo):
find /backup/mysql -type f -mtime +30 -exec rm {} \;
Per eseguire la cancellazione il comando find verra' eseguito in catena con gli script di backup.
Per eseguire il restore di un database bisogna innanzitutto eseguire il drop dello stesso dal server MySQL con account root.
mysql -u root mysql> drop <db_name>;
Ora e' possibile caricare il database dal file presente in /backup/mysql con la seguente sequenza di comandi:
cp /backup/mysql/<db_name>.mysql-cluster-01.cloud.pd.infn.it.<timestamp>.gz /tmp/<db_name>.gz gunzip /tmp/<db_name>.gz mysql -u root < /tmp/<db_name> rm -f /tmp/<db_name>
Bacula Backup
Per eseguire il backup dei servers viene utilizzato bacula. La seguente tabella mostra le macchine e le directories di cui viene eseguito il backup.
<html> <head> <style> div.bacula table {
margin: 0 0 1em; font-size: 100%;
} div.bacula table.inline {
background-color: #FFFFFF; border-collapse: collapse; border-spacing: 0;
} div.bacula table.inline th {
background-color: #EEEEEE; border: 1px solid #CCCCCC; padding: 3px;
} div.bacula table.inline td {
border: 1px solid #CCCCCC; padding: 3px;
}
.leftalign {
text-align: left;
} </style> </head> <body> <div class="bacula"> <table class="inline"> <tbody> <tr class="row0"> <th class="col0 leftalign"> Host </th> <th class="col1 leftalign"> Time </th> <th class="col2 leftalign"> Type </th> <th class="col3 leftalign"> Directories </th> </tr> <tr class="row1"> <td rowspan="3" class="col0 leftalign"> cld-nagios </td> <td class="col1 leftalign"> 3rd sat at 23:30 </td> <td class="col2 leftalign"> Full </td> <td rowspan="3" class="col3 leftalign"> /etc/nagios <br> /usr/lib64/nagios/plugins </td> </tr> <tr class="row2"> <td class="col1 leftalign"> 1st,2nd,4th,5th sat at 23:30 </td> <td class="col2 leftalign"> Incremental </td> </tr> <tr class="row3"> <td class="col1 leftalign"> mon-fri,sun at 23:30 </td> <td class="col2 leftalign"> Incremental </td> </tr> <tr class="row1"> <td rowspan="3" class="col0 leftalign"> cld-nat </td> <td class="col1 leftalign"> 3rd sat at 23:30 </td> <td class="col2 leftalign"> Full </td> <td rowspan="3" class="col3 leftalign"> /etc <br> /root <br> /var/named </td> </tr> <tr class="row2"> <td class="col1 leftalign"> 1st,2nd,4th,5th sat at 23:30 </td> <td class="col2 leftalign"> Incremental </td> </tr> <tr class="row3"> <td class="col1 leftalign"> mon-fri,sun at 23:30 </td> <td class="col2 leftalign"> Incremental </td> </tr> <tr class="row1"> <td rowspan="3" class="col0 leftalign"> mysql-cluster-01.cloud </td> <td class="col1 leftalign"> 3rd sat at 23:30 </td> <td class="col2 leftalign"> Full </td> <td rowspan="3" class="col3 leftalign"> /backup <br> /backup/mysql <br> /etc <br> /home <br> /root </td> </tr> <tr class="row2"> <td class="col1 leftalign"> 1st,2nd,4th,5th sat at 23:30 </td> <td class="col2 leftalign"> Incremental </td> </tr> <tr class="row3"> <td class="col1 leftalign"> mon-fri,sun at 23:30 </td> <td class="col2 leftalign"> Incremental </td> </tr> </tbody> </table> </div> </body> </html>