Sommigen onder ons gebruiken wel eens mysqldump om hun databases te backuppen.
Maar als jullie net als mij zijn, haten jullie het dat dit allemaal in 1 groot bestand wordt gedumpt.
Je dient dus of een apart commando te draaien per database, of je dient dit super bestand nadien te splitsen (onbegonnen werk).
Echter kan dit veel eenvoudiger: er is een commando om elke database naar een apart bestand te backuppen.
Ideaal dus als je backups wil maken van je websites en toch ze eenvoudig kunnen herstellen.
Bovendien stelt dit je in staat om slechts 1 database te herstellen ipv ze allemaal.
mysql -N -e 'show databases' | while read dbname; do mysqldump --complete-insert --routines --triggers --single-transaction "$dbname" > "$dbname".sql; done
Als output krijg je netjes een bestand per database:
ls -alh *.sql
-rw-r--r-- 1 root root 44M Aug 24 22:39 db1.sql
-rw-r--r-- 1 root root 44M Aug 24 22:39 db2.sql
Je kan natuurlijk ook eenvoudig bepalen in welke map deze database backups (dumps) moeten worden geplaatst:
mysql -N -e 'show databases' | while read dbname; do mysqldump --complete-insert --routines --triggers --single-transaction "$dbname" > /home/dump/databases/"$dbname".sql; done
Hiermee plaats je ze bv in de map /home/dump/databases.
Natuurlijk gebruik je hiermee heel wat ruimte.
Daarom pak ik ze persoonlijk graag terug in via gzip:
mysql -N -e 'show databases' | while read dbname; do mysqldump --complete-insert --routines --triggers --single-transaction "$dbname" > "$dbname".sql; [[ $? -eq 0 ]] && gzip "$dbname".sql; done
Herstellen van je databanken
Niet onbelangrijk, maar soms wil je deze databanken terug gaan herstellen.
Bv: als je verhuist naar een andere server.
$ for sql in *.sql; do dbname=${sql/\.sql/}; echo -n "Now importing $dbname ... "; mysql $dbname < $sql; echo " done."; done
De output komt dan per database tabel er netjes onder:
Now importing db1 ... done.
Now importing db2 ... done.
Noot: soms dien je wel not te authenticeren (in te loggen) voordat de database backup begint.
Korte lijntjes shell code dus om je leven veel eenvoudiger te maken.