MySQL dump til backup

From HoerupWiki
Jump to: navigation, search

- en del af Tommys Backup Projekt

Indledning

Det er i sig selv ikke svært at benytte mysqldump, det er en simpel kommando:

mysqldump -u root -p database > database.sql

Det fungere også fint som backup for de fleste, men da jeg i mit projekt vil lave versions-backup, hvor jeg kun gemmer de filer der har ændret sig, er det upraktisk at have hele databassen i een fil, hvis der er store tabeller der sjældent afviger.

Forberedelse

Før vi begynder skal vi bestemme hvor vi vil smide backuppen, i det her eksempel bruger jeg /root/backup/database_navn. Det er vigtigt at mysql-deamon har skriverettigheder til denne, så hvis denne ikke køres som root (fy!), så smid en chown eller chmod efter behov.

Da det samtidig skal køres fra cron midt om natten, har jeg oprettet en backup bruger fra localhost i MySQL med læse adgang til databasen. Ellers vil scriptet bare stoppe.

MySQL Dump script

Jeg har lavet følgende script:

#!/bin/bash
BACKUP_DIR=/root/backup/database_navn

for TABLE in $(mysql -B -s -u database_navn -e 'use $DATABASE; show tables;')
do
 mysqldump -u backup database_navn $TABLE > $BACKUP_DIR/$TABLE.sql
done

Den trækker en liste over alle tabellerne i database_navn og dumper som seperate tabeller.

Det kan evt. pipes til gzip :

...
mysqldump -u backup database_navn $TABLE | gzip > $BACKUP_DIR/$TABLE.sql.gz
...

Det vil dog unægtelig medføre et meget højere cpu-load, så gør det ikke i prime-time.

Nu mappen klar til Versions backup med rsync#Backup_script