Veel databasesystemen (en zeker MySQL, PostgreSQL en SQLite) werken met relatief grote bestanden waar de hele tijd kleine wijzigingen in gebeuren. Als tijdens een backup (met bv. rsync of FTP) enkele van die wijzigingen gebeuren, kan het zijn dat de kopie op de backupserver slechts een gedeelte van deze wijzigingen meekrijgt. De database is dan niet meer consistent, en dat kan leiden tot het kwijtraken van data of het crashen van de database-software als de backup data gebruikt wordt.
Ons advies is om ‘s nachts, voordat uw rsync- of FTP-backup draait, een tekst-gebaseerde dump te maken.
MySQL: Een simpele dump van alle databases samen naar 1 bestand krijgt u met een regel als:
30 3 * * * cd /home/mysqldump ; mysqldump –all-databases -u admin –password=xxx > mysqldump.out
Deze regel gaat er van uit dat er een directory /home/mysqldump is, het liefst met permissies 700 zodat uw gebruikers niet bij deze backup kunnen komen. Vervang admin en xxx door een MySQL-account die alle databases mag locken en lezen. Let op: het is veiliger om het wachtwoord in /etc/mysql/my.cnf te zetten (de plek kan varieren tussen distributies) dan in deze cron-regel.
Veiligere variant voor DirectAdmin-installaties:
30 3 * * * . /usr/local/directadmin/conf/mysql.conf; cd /home/mysqldump ; mysqldump –all-databases -u $user –password=$passwd > mysqldump.out
SQLite: Een dump maken is zo simpel als ‘sqlite3 database.db .dump > database.dump’. Voorbeeld voor cron (herhaal dit voor elke database):
30 3 * * * cd /home/sqlitedumps ; sqlite3 /pad/naar/database.db .dump > naam.dump
PostgreSQL levert de pg_dumpall tool mee die simpel voor hetzelfde doel te gebruiken is.
SVN (Subversion) is geen SQL, maar de achterliggende opslag heeft vergelijkbare eigenschappen. Onze manier:
45 3 * * * rm -rf /home/svn-hotcopy; mkdir /home/svn-hotcopy; cd /var/svn/repos; for d in * ; do svnadmin hotcopy $d /home/svn-hotcopy/$d ; done