MySQL Backup

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.