La comanda mysqldump, volcà els continguts de tota una base de dades per la sortida estàndard. Els continguts són volcats en sentències mysql que més tard es poden executar per restaurar la base de dades. Exemple:
$ sudo mysqldump -p base_de_dades
Les dades de la base de dades apareixen per la sortida estàndard. Si volem guardar les dades en un fitxer podem utilitzar les redireccions Unix, per exemple, per fer una còpia de seguretat de la mediawiki executaríem:
$ sudo mysqldump -p base_de_dades > wikidb.sql
Per restaurar la base de dades executaríem:
$ sudo mysql -p < wikidb.sql
Recursos;
Els únics permisos que necessita l'usuari són SELECT i LOCK TABLES.
$ mysql -u root -p mysql > GRANT SELECT, LOCK TABLES ON *.* TO [email protected] IDENTIFIED BY "la_vostra_paraula_de_pas"; mysql > FLUSH PRIVILEGES; mysql> exit
Recursos:
$ sudo mysqldump --add-drop-table -u root -p wikidb > /home/sergi/backup/mysql/wikidb-03-02-2009.sql
Podem utilitzar cron.
$ sudo joe /etc/cron.d/mysql_backup
I afegim la línia:
0 4 * * 0 root mysqldump --user=wikiuser --password=PASSWORD wikidb > /home/sergi/backup/mysql/wikidb_sergi.sql
I tindrem un còpia de seguretat cada nit a les 4.
Ara recarreguem cron:
$ sudo /etc/init.d/cron reload
Des de la versió Jaunty d'Ubuntu, podem instal·lar:
$ sudo apt-get install automysqlbackup
I sens realitzen per defecte còpies diàries, setmanals i mensuals de les nostres bases de dades MySQL. Les còpies es realitzen amb cron i les podeu trobar a la carpeta:
$ ls -la /var/lib/automysqlbackup/ total 20 drwxr-xr-x 5 root root 4096 2009-09-02 06:26 . drwxr-xr-x 37 root root 4096 2009-09-01 21:15 .. drwxr-xr-x 8 root root 4096 2009-09-01 21:25 daily drwxr-xr-x 9 root root 4096 2009-09-01 21:24 monthly drwxr-xr-x 8 root root 4096 2009-09-01 21:25 weekly
Els fitxers instal·lats són:
$ dpkg -L automysqlbackup /. /var /var/lib /var/lib/automysqlbackup /etc /etc/automysqlbackup /etc/default /etc/default/automysqlbackup /etc/cron.daily /etc/cron.daily/automysqlbackup /usr /usr/sbin /usr/sbin/automysqlbackup /usr/share /usr/share/doc /usr/share/doc/automysqlbackup /usr/share/doc/automysqlbackup/README.Debian /usr/share/doc/automysqlbackup/copyright /usr/share/doc/automysqlbackup/changelog.Debian.gz /usr/share/man /usr/share/man/man8 /usr/share/man/man8/automysqlbackup.8.gz
El fitxer de configuració és:
/etc/default/automysqlbackup
Per defecte s'utilitza l'usuari i la paraula de pas de l'usuari debian-sys-maint (creat durant la instal·lació del servidor mysql des de paquets de Debian/Ubuntu).
El que es fa és executar de forma diària l'script:
/usr/sbin/automysqlbackup
Segons el manual:
$ man automysqlbackup
Els paràmetres bàsics són:
USERNAME=dbuser Username to access the MySQL server e.g. dbuser PASSWORD="password" Username to access the MySQL server e.g. password DBHOST=localhost Host name (or IP address) of MySQL server e.g localhost DBNAMES="DB1 DB2 DB3" List of DBNAMES for Daily/Weekly Backup e.g. "DB1 DB2 DB3" BACKUPDIR="/backups" Backup directory location e.g /backups MAILCONTENT="stdout" Mail setup What would you like to be mailed to you? - log : send only log file - files : send log file and sql files as attachments (see docs) - stdout : will simply output the log to the screen if run manually. - quiet : Only send logs if an error occurs to the MAILADDR. MAXATTSIZE="4000" Set the maximum allowed email size in k. (4000 = approx 5MB email [see docs]) MAILADDR="[email protected]" Email Address to send mail to? ([email protected])
Es poden modificar a:
/etc/default/automysqlbackup
Els paràmetres avançats són:
ADVANCED OPTIONS MDBNAMES="mysql $DBNAMES" List of DBBNAMES for Monthly Backups. DBEXCLUDE="" List of DBNAMES to EXCLUDE if DBNAMES are set to all (must be in " quotes) CREATE_DATABASE=yes Include CREATE DATABASE in backup? SEPDIR=yes Separate backup directory and file for each DB? (yes or no) DOWEEKLY=6 Which day do you want weekly backups at? (1 to 7 where 1 is Monday) COMP=gzip Choose Compression type. (gzip or bzip2) COMMCOMP=no Compress communications between backup server and MySQL server? LATEST=no Additionally keep a copy of the most recent backup in a seperate directory. MAX_ALLOWED_PACKET= The maximum size of the buffer for client/server communication. e.g. 16MB (maximum i SOCKET= For connections to localhost. Sometimes the Unix socket file must be specified. #PREBACKUP="/etc/automysqlbackup/mysql-backup-pre" Command to run before backups (uncomment to use) #POSTBACKUP="/etc/automysqlbackup/mysql-backup-post" Command run after backups (uncomment to use)
TODO
El primer que cal fer és seguir les passes de l'apartat anterior per obtenir una còpia de la base de dades. Suposem que la còpia de la base de dades la posem a la carpeta ~/backups/mysql:
$ cd ~/backup/mysql $ sudo mysql -p wikidb
Utilitzarem SSH y rsync per transmetre la informació entre les dues màquines. El primer que hem de fer és seguir les passes de la secció Generació de claus ssh-keygen de l'article Gestió remota. SSH, Rsync... per generar unes claus i poder entrar a la màquina remota sense necessitat de contrasenyes. Suposem que l'usuari que utilitzem ś'anomena sergi:
$ ssh-keygen -t dsa $ cat ~/.ssh/id_dsa.pub | ssh [email protected]_remota " cat - >> ~/.ssh/authorized_keys"
Ara amb la comanda:
$ rsync -e ssh -cavz --progress /home/sergi/backup/mysql/wikidb_sergi.sql maquina_remota:~/backup/mysql
Ja som capaços de copiar el fitxer de backup a la màquina remota. Ara es tracta d'utilitzar cron per automatitzar aquesta tasca.
$ sudo joe /etc/cron.d/replica_wiki
I afegim la següent línia:
0 5 * * * sergi rsync -e ssh -cavz --progress /home/sergi/backup/mysql/wikidb_sergi.sql [email protected]:/home/sergi/backup/mysql > /home/sergi/backup/mysql/wikidb_replica.log
Per fer una còpia cada dia a les 5 del matí. Ara recarreguem cron:
$ sudo /etc/init.d/cron reload
Ara anem a veure com restaurar la còpia a la màquina remota:
Ara a la màquina remota executem una restauració de la còpia a les 6:00h:
$ sudo joe /etc/cron.d/mysql_replica
I afegim la línia:
0 6 * * 0 root mysql --user=wikiuser --password=PASSWORD wikidb_sergi < /home/sergi/backup/mysql/wikidb_sergi.sql
Per seguretat podem canviar els permisos del fitxer:
$ sudo chmod 600 /etc/cron.d/mysql_replica
I tornem a iniciar cron:
$ sudo /etc/init.d/cron reload