Automatitzar les còpies de seguretat

De Wikijoan
Dreceres ràpides: navegació, cerca

mysqldump és l'eina que es fa servir per fer còpies de seguretat en mysql

$ mysqldump --help
mysqldump [OPTIONS] --all-databases [OPTIONS]

La següent sentència fa una còpia de totes les bases de dades del mysql al fitxer copia241008.dmp. També es pot fer que cada base de dades vagi a fitxers diferents.

$mysqldump --add-drop-table -i -C -u root -p******* -r copia241008.dmp -v --all-databases
-h: connect to a host: no cal si ho faig des de la màquina local

Contingut

mysqldmp_automatic.sh

Un cop ja sé fer les còpies, anem a automatitzar les còpies amb el fitxer mysqldmp_automatic.sh, que està basat en un fitxer similar que feia amb el Postgres

#!/bin/bash
##############################  #Script by Joan Q, a partir de pg_dmp.sh  ##############################    
MYSQLUSER=root
MYSQLPASSWORD=*******

export MYSQLUSER MYSQLPASSWORD

tdate=`date +%d%m%y`
#echo $tdate
     
if ! [ -d /home/joan/mysql_backup ] 
then
#if folder mysql_backup does not exist in the current users home directory then create a new folder
mkdir /home/joan/mysql_backup
fi

#modifiquem la bd de la wiki per tal que només els usuaris registrats puguin editar
mysql -u $MYSQLUSER -p$MYSQLPASSWORD wikidb < /home/joan/update.sql

mysqldump --add-drop-table -i -C -u $MYSQLUSER -p$MYSQLPASSWORD -r /home/joan/mysql_backup/copia$tdate.dmp --all-databases

#reset MYSQLUSER and MYSQLPASSWORD  
MYSQLUSER=""
MYSQLPASSWORD=""
export MYSQLUSER MYSQLPASSWORD

#necessari el codi d'èxit per tal que no es torni a executar el script si el poso en el crontab
exit 0

#End 

Hem afegit la línia que executa una sentència que protegeix les nostres pàgines de què siguin escrites per usuaris anònims.

mysql -u $MYSQLUSER -p$MYSQLPASSWORD wikidb < /home/joan/update.sql

mysqldmp_automatic.sh v071108

07-11-08:En el mysql ara hi ha el moodle i tres wikis (profes, joan, alumnes). Vull fer còpies de seguretat independents de cadascuna d'elles

#!/bin/bash
##############################  #Script by Joan Q, a partir de pg_dmp.sh  ##############################    
MYSQLUSER=root
MYSQLPASSWORD=*******

export MYSQLUSER MYSQLPASSWORD

tdate=`date +%d%m%y`
#echo $tdate
     
if ! [ -d /home/joan/copia_seguretat/copia_mysql ] 
then
#if folder pg_backup_'databsename' does not exist in the current users home dierectory then create a new folder
mkdir /home/joan/copia_seguretat/copia_mysql
fi

#modifiquem la bd de la wiki per tal que només els usuaris registrats puguin editar
#no ho faig per a wikialumnes (edició lliure)
mysql -u $MYSQLUSER -p$MYSQLPASSWORD wikidb < /home/joan/update.sql
mysql -u $MYSQLUSER -p$MYSQLPASSWORD wikijoan < /home/joan/update.sql

#còpia de totes les bases de dades que conté el mysql
#mysqldump --add-drop-table -i -C -u $MYSQLUSER -p$MYSQLPASSWORD -r /home/joan/mysql_backup/copia$tdate.dmp -v --all-databases

#fem còpies individuals de les bases de dades
mysqldump --add-drop-table -i -C -u $MYSQLUSER -p$MYSQLPASSWORD -r /home/joan/mysql_backup/copia_moodle$tdate.dmp -v moodle
mysqldump --add-drop-table -i -C -u $MYSQLUSER -p$MYSQLPASSWORD -r /home/joan/mysql_backup/copia_wikidb$tdate.dmp -v wikidb
mysqldump --add-drop-table -i -C -u $MYSQLUSER -p$MYSQLPASSWORD -r /home/joan/mysql_backup/copia_wikijoan$tdate.dmp -v wikijoan
mysqldump --add-drop-table -i -C -u $MYSQLUSER -p$MYSQLPASSWORD -r /home/joan/mysql_backup/copia_wikialumnes$tdate.dmp -v wikialumnes

#reset MYSQLUSER and MYSQLPASSWORD  
MYSQLUSER=""
MYSQLPASSWORD=""
export MYSQLUSER MYSQLPASSWORD

#necessari el codi d'èxit per tal que no es torni a executar el script si el poso en el crontab
exit 0

#End

cron

i aquest script s'haurà de posar en el cron per tal que cada setmana es faci una còpia:

Cron es un demonio (servicio), lo que significa que solo requiere ser iniciado una vez, generalmente con el mismo arranque del sistema. El servicio de cron se llama crond. En la mayoría de las distribuciones el servicio se instala automáticamente y queda iniciado desde el arranque del sistema, se puede comprobar de varias maneras:

modifiquem el fitxer /etc/crontab de la següent manera:

prova, s'executa cada minut:

*/1 * * * * root /home/joan/how_to_linkat/mysqldmp_automatic.sh

Reiniciem el servei de cron per tal que els canvis tinguin efecte

./cron restart

la modificació definitiva és que s'executi cada setmana (divendres):

* * * * 5 root /home/joan/how_to_linkat/mysqldmp_automatic.sh

Per tal que es reinicïi el servei de cron en l'inici del sistema: Administració > Nivells d'execució > cron (3 i 5), en ppi ja està

info sobre cron:

minute(s) hour(s) day(s) month(s) weekday(s) command(s)
 The fields are separated by spaces or tabs. The first five are integer patterns and the sixth is the command to be executed. The following table briefly describes each of the fields.
Field 	Value 	Description
minute 	0-59 	The exact minute that the command sequence executes
hour 	0-23 	The hour of the day that the command sequence executes
day 	1-31 	The day of the month that the command sequence executes
month 	1-12 	The month of the year that the command sequence executes
weekday 	0-6 	The day of the week that the command sequence executes. Sunday=0, Monday = 1, Tuesday = 2, and so forth.
command 	Special 	The complete sequence of commands to be executed. The command string must conform to Bourne shell syntax. Commands, executables (such as scripts), or combinations are acceptable.

Each of the patterns from the first five fields may be either an asterisk (meaning all legal values) or a list of elements separated by commas. An element is either a number or an inclusive range, indicated by two numbers separated by a minus sign (10-12). You can specify days with two fields: day of the month and day of the week. If you specify both of them as a list of elements, cron will observe both of them. For example:

 0 0 1,15 * 1 /mydir/myprogram

The cron daemon would run the program myprogram in the mydir directory on the first and fifteenth of each month, as well as on every Monday. To specify days by only one field, the other field should be set to *. For example:

 0 0 * * 1 /mydir/myprogram

The program would then only run on Mondays.

Recuperació d'una base de dades (backup i restore en la mateixa màquina)

http://www.google.es/search?hl=ca&q=mysqldump+restore&btnG=Cerca+amb+Google&meta=

per a la recuperació, no s'utilitza mysqldump sinó directament mysql

mysql -u root -pneptu08 assistencia < /home/joan/mysql_backup/copia221008.dmp

anem a fer la prova de foc:

$ mysql -u root -p******* -> si vull esborrar la bd 'assistencia' em connecto sense entrar a cap bd
mysql> drop database assistencia
mysql> use assistencia -> dóna error
mysql> create database assistencia -> amb el mètode que utilitzaré, necessito que existeixi la bd assistencia
mysql> \q

fem el restore:

$ mysql -u root -p******* assistencia < /home/joan/mysql_backup/copia221008.dmp

és un restore intel.ligent, doncs el fitxer copia221008.dmp conté informació de diferents bd (assistencia, wikibd, del sistema,...), però només importa a la bd assistencia aquelles taules que li corresponen.

mysql> show tables;
-----------------------+
| Tables_in_assistencia |
+-----------------------+
| credito               |
| credito_humano        |
| extentos              |
| faltas                |
| festividad            |
| grupo                 |
| horario               |
| humano                |
| lista_pasada          |
| primera_ultima_hora   |
+-----------------------+

com sempre, he d'anar amb compte amb tot el tema dels charsets.

mysql> SHOW CREATE TABLE humano

em diu quin és el charset de la taula. Si tinc taules amb charset latin1, ho hauré de tenir en compte a l'hora de fer un backup i un restore.

Recuperació d'una base de dades (backup i restore entre diferents màquines)

Volia fer una còpia de la wiki de casa a la wikijoan de l'institut, i he tingut molts problemes, que explico:

la còpia de casa era un fitxer .dmp comprimit amb l'opció --all-databases.

He volgut fer una importació al mysql de l'institut, però només volia importar a la wikijoan, i per tant a l'insti he fet una cosa com:

$ mysql -u wikiuser -p******* wikijoan < /home/joan/mysql_backup/copia_wikidb011108.dmp 

Com que era una còpia de seguretat completa (encara que volgués fer una còpia de seguretat parcial), m'ha desconfigurat tot el tema de permisos i no em deixava entrar al mysql (i no funcionaven el Moodle, l'assistència ni les wikis).

Al final ho he pogut arreglar amb penes i treballs (veure problema restore mysql, i les wikis les he tornat a iniciarm deixant les bd en blanc.

La conclusió a la que he arribat és que si vull fer un traspàs d'informació entre bases de dades que tenen diferent nom i diferents màquines, utilitzar una exportació-importació en que el fitxer sigui SQL (drop, create, insert, no comprimit), i que no toqui res de permisos. Ho faig de la següent manera, i aquest és el mètode que seguiré per exportar la wiki-howto (bd wikidb) de casa a la wiki(bd wikijoan) de l'institut:

Al local:

en el script de còpia de seguretat del mysql:
mysqldump -i --complete-insert -u $MYSQLUSER -p$MYSQLPASSWORD -r /home/joan/copia_seguretat/mysql_backup/copia_wiki$tdate.sql -v wikidb

en línia de comandes
ubuntu_local$ mysqldump -i --complete-insert -u root -p**** -r /home/joan/copia_seguretat/mysql_backup/copia_wiki271108.sql -v wikidb

A l'institut:

linkat_institut$ mysql -u root -p******* wikijoan < /home/joan/copia_wiki271108.sql

Obtenir remotament la última versió de la còpia de seguretat:

Estic a l'institut, i vull obtenir la última versió de la còpia de seguretat del mysql per instal.lar-la localment a l'institut. Poser per cas és la copia_wiki050209.sql del 5 de febrer. Utilitzo scp que funciona sobre ssh:

$ scp  joan@wikijoan.dyndns.org:/home/joan/copia_seguretat/mysql_backup/copia_wiki050209.sql ~/copia_wiki050209.sql

Rèplica automàtica de la wiki entre Joan Blanques i l'institut

Tinc classe de AIAIG a l'institut el dijous a la tarda. Com que potser he actualitzat la wiki pels matins, vull tenir disponible a l'institut i en local la última versió de la wiki. Aquest és el procediment.

Primer faig la còpia de la wiki a fitxer:

ubuntu_local$ mysqldump -i --complete-insert -u root -p**** -r /home/joan/copia_seguretat/mysql_backup/wiki_joan_blanques.sql -v wikidb

Hem de fer que el UbuntuServer confïi en el LinuxServer, i això es fa mitjançant una generació de claus ssh-keygen, com s'explicava en l'apartat de SSH

Al LinuxServer

linkat_institut$ ssh-keygen -t dsa
linkat_institut$ cat ~/.ssh/id_dsa.pub | ssh joan@wikijoan.dyndns.org " cat - >> ~/.ssh/authorized_keys"

ara ja podria entrar al SSH sense que em demani el password:

linkat_institut$ ssh wikijoan.dyndns.org

i ara ja puc agafar la última còpia de la base de dades:

linkat_institut$ rsync -e ssh -cavz --progress wikijoan.dyndns.org:~/copia_seguretat/mysql_backup/wiki_joan_blanques.sql /home/joan/copia_seguretat/copia_mysql/wiki_joan_blanques.sql

i funciona sense problemes

Ara ja podem fer la importació de la base de dades a la wiki que tinc a l'institut (wikijoan):

linkat_institut$ mysql -u root -p******* wikijoan < /home/joan/copia_seguretat/copia_mysql/wiki_joan_blanques.sql

Ara només falta assegurar-se de què els rellotges del UbuntuServer i del LinuxServer siguin iguals, i dues hores abans de fer la classe, amb crons, primer fer el cron en el UbuntuServer (que exporta la còpia de seguretat del mysql), i al cap de mitja hora, fer el cron en el LinuxServer (que fa el rsync i importa la còpia de seguretat)

Per tant, en el UbuntuServer:

replica_wiki_joan_blanques_insti.sh (donar permisos d'execució):

wget http://www.empresalibre.org/admin/prova_script.php
mysqldump -i --complete-insert -u root -p**** -r /home/joan/copia_seguretat/mysql_backup/wiki_joan_blanques.sql -v wikidb

cron:
15 14  * * 4 root replica_wiki_joan_blanques_insti.sh

(la classe de AIAIG és el dijous, i potser he estat treballant pel matí, o sigui que la rèplica es fa el migdia)

i en el Linkat de l'institut:

replica_wiki_joan_blanques_insti.sh (donar permisos d'execució):

rsync -e ssh -cavz --progress wikijoan.dyndns.org:~/copia_seguretat/mysql_backup/wiki_joan_blanques.sql /home/joan/copia_seguretat/copia_mysql/wiki_joan_blanques.sql
mysql -u root -p******* wikijoan < /home/joan/copia_seguretat/copia_mysql/wiki_joan_blanques.sql

cron:
15 16 * * 4 root /home/joan/copia_seguretat/scripts/replica_wiki_joan_blanques_insti.sh

Rèplica manual de la wiki entre Joan Blanques i l'institut. Curs 2009-2010

Replicació manual entre la wiki del local i la wiki del ubuntu-bbdd (192.168.0.10). Curs 2009-2010

des de l'institut em connecto al local via SSH:

$ ssh joan@wikijoan.dyndns.org
$ sudo mysqldump -i --complete-insert -u root -p -r /home/joan/copia_seguretat/mysql_backup/copia_wiki170909.sql -v wikidb
$ exit

a l'insti, des de la màquina 192.168.0.10, copiem la còpia de seguretat i la importem a la wiki:

ubuntu-bbdd$ sudo scp joan@wikijoan.dyndns.org:/home/joan/copia_seguretat/mysql_backup/copia_wiki170909.sql /home/joan
ubuntu-bbdd$ mysql -u root -p wikidb < /home/joan/copia_wiki170909.sql

Falta encara una cosa. En el SideBar hi ha referències a wiki.empresalibre.org, per la qual cosa és fàcil que un alumne vagi redirigit a la wiki remota sense voler. Per solucionar-ho:

mysql> update text set old_text=replace(old_text,'wiki.empresalibre.org','192.168.0.10/wiki');

Recordem que les imatges i documents no es copiaran a no ser que es faci una còpia física de tots aquests documents a la nova ubicació

Còpia manual de la bd al disc de Windows

No tinc espai en el disc dur. Vull fer les còpies de seguretat al disc dur on hi ha el Windows (octubre 2010). Amb

$ sudo fdisk -l

veig que és el sda1. Munto el disc:

$ sudo mkdir /mnt/disc_windows
$ sudo chmod 777 /mnt/disc_windows
$ sudo mount /dev/sda1 /mnt/disc_windows

i ara puc fer la còpia de seguretat del mysql en aquest disc dur:

$ sudo mysqldump --add-drop-table -i -C -u root -p1732 -r /mnt/disc_windows/copia_wikidb281010_01.dmp -v wikidb
...
$ cd /mnt/disc_windows/
$ ls -la copia_wikidb281010_01.dmp 
-rwxr-xr-x 1 root root 98094713 2010-10-28 15:42 copia_wikidb281010_01.dmp

Ara aquest fitxer l'envio a l'institut (per tenir una còpia externa, regla d'or de les còpies de seguretat). Des de l'ordinador del Balmes:

ubuntu-bbdd$ scp joan@wikijoan.dyndns.org:/mnt/disc_windows/copia_wikidb281010_01.dmp /home/joan

creat per Joan Quintana Compte, novembre 2008

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
IES Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines