MySQL dump til backup
- 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