IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)
Còpies de seguretat de Mysql
Contingut |
mysqldump
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;
Crear un usuari per a còpies de seguretat amb mysqldump
Els únics permisos que necessita l'usuari són SELECT i LOCK TABLES.
$ mysql -u root -p mysql > GRANT SELECT, LOCK TABLES ON *.* TO backups@localhost IDENTIFIED BY "la_vostra_paraula_de_pas"; mysql > FLUSH PRIVILEGES; mysql> exit
Recursos:
Exemple
$ sudo mysqldump --add-drop-table -u root -p wikidb > /home/sergi/backup/mysql/wikidb-03-02-2009.sql
Automatitzar la copia de seguretat
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
Character set o Character Encoding
automysqlbackup
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
Paràmetres de configuració
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="user@domain.com"
Email Address to send mail to? (user@domain.com)
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)
PHPMyAdmin =
TODO
Automatitzar una replica de base de dades entre dos servidors mysql
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 sergi@maquina_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 sergi@www.iescopernic.com:/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