« Crontabs: url aanroepen | Nieuwe sites » |
Mysql backup: 1 per database.
Mysqldump is dé tool om backups te maken van je Mysql-database(s). Hoewel je op de command line een hoop parameters en instellingen kunt meegeven, doet de tool zijn werk wel het best, als je hem vergelijkt met zelfgeschreven tooltjes:
Zeg nu zelf: een hobbist die de structuur van zijn database om weet te schrijven naar CREATE-TABLE query's, gevolgd door een stapel INSERT-query's, zal ook best een aardig resultaat verkrijgen, maar hoe groot is de kans dat hij net een kleinigheidje vergeet. Al is het maar een characterset bij een tabeldefinitie, tabel die default op zijn database keurig op innoDB staat, maar op de server waar eea naar toe moet in geval van nood default MyIsam gebruikt...
Maar ook voor een backup via mysqldump kan nog het nodige misgaan: de parameters maken het mogelijk om al dan niet de structuur van de database te dumpen, al dan niet de data mee te geven, al dan niet elke tabel vooraf leeg te maken, etc etc.
Zelf heb ik geconstateerd, dat mijn backups in eerste instantie de triggers en stored procedures niet in de backup zette.
Maar dat ter inleiding.
Eigenlijk wilde ik deze post schrijven over het dumpen van alle databases in 1 backupfile:
Code
mysqldump -uroot -p --all-databases > /backuplocatie/mysqldump.sql |
Op zich ben je met deze regel lekker snel klaar, maar je zult zien: het gaat er in de praktijk niet om om alle databases in 1x te herstellen, maar om 1 database, of misschien wel 1 tabel uit een database die herstelt moet worden. Dan heb je met die file van een paar GB aan sqlcode een probleem om dat snel te doorzoeken.
Één file per database is dan handiger. Met de volgende code wordt per database een dump aangemaakt. Ik laat hier even de opties wel om triggers, etc te dumpen achterwege. Die opties zijn niet anders dan de mysqldump aanroep die je zou doen met --all-databases.
Code
#!/bin/sh | |
| |
datum=`date -I` | |
for naam in /var/lib/mysql/*/; do | |
databasenaam=`basename $naam` | |
echo $dbname | |
/usr/bin/mysqldump -uroot --p $databasenaam > /backuplocatie/$databasenaam-$datum.sql | |
done |