Ik loop al een tijdje achter met het automatisch correct afhandelen van de backup. Ik heb wel een backup script draaiende maar die functioneerd nog niet naar wens. Eigenlijk wil ik namelijk een dagelijkse, wekelijkse en maandelijkse backup hebben van elke database apart. Het liefst ook nog met de mogelijkheid om de backup extern op te slaan.
Aangezien ik nog maar net begin met het schrijven van bash-scripts ben ik dus een zoektocht begonnen. En daarmee is meteen de kans een stuk groter dat je een script vindt dat heel dicht bij je wensen in de buurt komt. En dat is Automatic MySQL Backup geworden.
Als eerste nog even een aparte database user aanmaken die enkel select rechten heeft:
CREATE USER 'mysqlbackupuser'@'localhost' IDENTIFIED BY '************'; GRANT SELECT ON * . * TO 'mysqlbackupuser'@'localhost' IDENTIFIED BY '************'
De rest van de instellingen spreken voor zich, ik heb er even over zitten te denken om me elke keer de backupfiles toe te laten zenden per mail. De meest logische mailbox is dan gmail in verband met het extern opslaan. Bij nader inzien doe ik dat maar niet, je weet nooit wat google ermee zou willen en kunnen doen.
Voor het wegzetten van de backup moet ik dus nog iets anders gaan doen, hiervoor kan ik een apart script gaan gebruiken die ik in dit script aanroep:
# Command to run before backups (uncomment to use) #PREBACKUP="/etc/mysql-backup-pre" # Command run after backups (uncomment to use) #POSTBACKUP="/etc/mysql-backup-post"
Ik zit er dus aan te denken om het backuppen van de gegevens op schijf (/var/www, /etc, /home) in het pre script uit te voeren en om het wegzetten van de data naar een externe locatie in het post script te verwerken.
Na een testrun zie ik dat ik de database-user nog iets meer rechten moet geven. Lock-tables is ook wel handig zodat je geen conflicterende backup krijgt:
REVOKE ALL PRIVILEGES ON * . * FROM 'mysqlbackupuser'@'localhost'; REVOKE GRANT OPTION ON * . * FROM 'mysqlbackupuser'@'localhost'; GRANT SELECT , LOCK TABLES ON * . * TO 'mysqlbackupuser'@'localhost';
Hierna krijg ik na een tweede test netjes een berichtje in mijn mailbox wat me de resultaten verteld:
====================================================================== AutoMySQLBackup VER 2.5 http://sourceforge.net/projects/automysqlbackup/ Backup of Database Server - Arkon ====================================================================== Backup Start Time Fri Jun 6 13:59:17 CEST 2008 ====================================================================== Daily Backup of Database ( information_schema ) Rotating last weeks Backup... Backup Information for /backup/mysql/daily/information_schema/information_schema_2008-06-06_13h59m.Friday.sql compressed uncompressed ratio uncompressed_name 479 1241 66.7% /backup/mysql/daily/information_schema/information_schema_2008-06-06_13h59m.Friday.sql ---------------------------------------------------------------------- Daily Backup of Database ( database1 ) Rotating last weeks Backup... Backup Information for /backup/mysql/daily/database1/database1_2008-06-06_13h59m.Friday.sql compressed uncompressed ratio uncompressed_name 130792 669262 80.5% /backup/mysql/daily/database1/database1_2008-06-06_13h59m.Friday.sql ---------------------------------------------------------------------- Daily Backup of Database ( database2 ) Rotating last weeks Backup... Backup Information for /backup/mysql/daily/database2/database2_2008-06-06_13h59m.Friday.sql compressed uncompressed ratio uncompressed_name 43350 167174 74.1% /backup/mysql/daily/database2/database2_2008-06-06_13h59m.Friday.sql ---------------------------------------------------------------------- Daily Backup of Database ( database3 ) Rotating last weeks Backup... Backup Information for /backup/mysql/daily/database3/database3_2008-06-06_13h59m.Friday.sql compressed uncompressed ratio uncompressed_name 1685 8489 80.8% /backup/mysql/daily/database3/database3_2008-06-06_13h59m.Friday.sql ---------------------------------------------------------------------- Daily Backup of Database ( mysql ) Rotating last weeks Backup... Backup Information for /backup/mysql/daily/mysql/mysql_2008-06-06_13h59m.Friday.sql compressed uncompressed ratio uncompressed_name 95645 315867 69.7% /backup/mysql/daily/mysql/mysql_2008-06-06_13h59m.Friday.sql ---------------------------------------------------------------------- Daily Backup of Database ( database4 ) Rotating last weeks Backup... Backup Information for /backup/mysql/daily/database4/database4_2008-06-06_13h59m.Friday.sql compressed uncompressed ratio uncompressed_name 1014 2595 63.1% /backup/mysql/daily/database4/database4_2008-06-06_13h59m.Friday.sql ---------------------------------------------------------------------- Daily Backup of Database ( database5 ) Rotating last weeks Backup... Backup Information for /backup/mysql/daily/database5/database5_2008-06-06_13h59m.Friday.sql compressed uncompressed ratio uncompressed_name 141987 652025 78.2% /backup/mysql/daily/database5/database5_2008-06-06_13h59m.Friday.sql ---------------------------------------------------------------------- Backup End Fri Jun 6 13:59:22 CEST 2008 ====================================================================== Total disk space used for backup storage.. Size - Location 944K /backup/mysql
Ik heb in dit overzicht overigens wat bestands- en databasenamen verandert.
Nu nog even dit script in de crontab zetten en dan is ook dat weer geregeld.