From 32d0b88da60cd7bc148831e89b0b22be5c3db549 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20M=E4kinen?= Date: Thu, 25 Mar 2010 08:54:01 +0200 Subject: [PATCH] Added mysql::server::backup class to backup local MySQL databases. --- mysql/manifests/init.pp | 41 +++++++++++++++++++++++++++ mysql/templates/mysql-backup.cron.erb | 22 ++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 mysql/templates/mysql-backup.cron.erb diff --git a/mysql/manifests/init.pp b/mysql/manifests/init.pp index 084d9d0..cea20a5 100644 --- a/mysql/manifests/init.pp +++ b/mysql/manifests/init.pp @@ -79,6 +79,47 @@ class mysql::server { } +# Install MySQL daily backup job +# +# === Global variables +# +# $mysql_backup_datadir: +# Directory where MySQL backups are stored. Defaults to /srv/mysql/backup +# +# $mysql_backup_maxage: +# How long to keep MySQL backups. Defaults to 168 hours (7 days). +# +class mysql::server::backup { + + include mysql::client + + if ! $mysql_backup_datadir { + $mysql_backup_datadir = "/srv/mysql/backup" + } + if ! $mysql_backup_maxage { + $mysql_backup_maxage = "168" + } + + file { $mysql_backup_datadir: + ensure => directory, + mode => 0700, + owner => root, + group => root, + } + + file { "/etc/cron.daily/mysql-backup": + ensure => present, + content => template("mysql/mysql-backup.cron.erb"), + mode => 0755, + owner => root, + group => root, + require => [ File[$mysql_backup_datadir], + Package["mysql"], ], + } + +} + + # Install MySQL status reporting. # class mysql::server::report { diff --git a/mysql/templates/mysql-backup.cron.erb b/mysql/templates/mysql-backup.cron.erb new file mode 100644 index 0000000..e1f4082 --- /dev/null +++ b/mysql/templates/mysql-backup.cron.erb @@ -0,0 +1,22 @@ +#!/bin/sh + +DESTDIR="<%= mysql_backup_datadir %>" +MAXAGE="<%= mysql_backup_maxage %>" + +DATE=`date "+%Y-%m-%d"` + +if [ ! -d ${DESTDIR} ]; then + echo "ERR: MySQL backup directory [${DESTDIR}] does not exist" 1>&2 + exit 1 +fi + +umask 077 + +tmpwatch -m -f ${MAXAGE} ${DESTDIR} + +DESTDIR=${DESTDIR}/${DATE} +mkdir -p ${DESTDIR} + +for db in `mysql -e 'show databases' -s | egrep -v '^Database$'` ; do + mysqldump --add-drop-table ${db} | gzip > ${DESTDIR}/${db}.${DATE}.gz +done