dev/provisioning/modules/mysql/manifests/backup/mysqlbackup.pp
changeset 28 b0b56e0f8c7f
child 146 dc4d1cdc47e0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dev/provisioning/modules/mysql/manifests/backup/mysqlbackup.pp	Fri Jan 15 15:35:00 2016 +0100
@@ -0,0 +1,105 @@
+# See README.me for usage.
+class mysql::backup::mysqlbackup (
+  $backupuser         = '',
+  $backuppassword     = '',
+  $backupdir          = '',
+  $backupdirmode      = '0700',
+  $backupdirowner     = 'root',
+  $backupdirgroup     = $mysql::params::root_group,
+  $backupcompress     = true,
+  $backuprotate       = 30,
+  $ignore_events      = true,
+  $delete_before_dump = false,
+  $backupdatabases    = [],
+  $file_per_database  = false,
+  $include_triggers   = true,
+  $include_routines   = false,
+  $ensure             = 'present',
+  $time               = ['23', '5'],
+  $prescript          = false,
+  $postscript         = false,
+  $execpath           = '/usr/bin:/usr/sbin:/bin:/sbin',
+) {
+
+  mysql_user { "${backupuser}@localhost":
+    ensure        => $ensure,
+    password_hash => mysql_password($backuppassword),
+    require       => Class['mysql::server::root_password'],
+  }
+
+  package { 'meb':
+    ensure    => $ensure,
+  }
+
+  # http://dev.mysql.com/doc/mysql-enterprise-backup/3.11/en/mysqlbackup.privileges.html
+  mysql_grant { "${backupuser}@localhost/*.*":
+    ensure     => $ensure,
+    user       => "${backupuser}@localhost",
+    table      => '*.*',
+    privileges => [ 'RELOAD', 'SUPER', 'REPLICATION CLIENT' ],
+    require    => Mysql_user["${backupuser}@localhost"],
+  }
+
+  mysql_grant { "${backupuser}@localhost/mysql.backup_progress":
+    ensure     => $ensure,
+    user       => "${backupuser}@localhost",
+    table      => 'mysql.backup_progress',
+    privileges => [ 'CREATE', 'INSERT', 'DROP', 'UPDATE' ],
+    require    => Mysql_user["${backupuser}@localhost"],
+  }
+
+  mysql_grant { "${backupuser}@localhost/mysql.backup_history":
+    ensure     => $ensure,
+    user       => "${backupuser}@localhost",
+    table      => 'mysql.backup_history',
+    privileges => [ 'CREATE', 'INSERT', 'SELECT', 'DROP', 'UPDATE' ],
+    require    => Mysql_user["${backupuser}@localhost"],
+  }
+
+  cron { 'mysqlbackup-weekly':
+    ensure  => $ensure,
+    command => 'mysqlbackup backup',
+    user    => 'root',
+    hour    => $time[0],
+    minute  => $time[1],
+    weekday => 0,
+    require => Package['meb'],
+  }
+
+  cron { 'mysqlbackup-daily':
+    ensure  => $ensure,
+    command => 'mysqlbackup --incremental backup',
+    user    => 'root',
+    hour    => $time[0],
+    minute  => $time[1],
+    weekday => 1-6,
+    require => Package['meb'],
+  }
+
+  $default_options = {
+    'mysqlbackup' => {
+      'backup-dir'             => $backupdir,
+      'with-timestamp'         => true,
+      'incremental_base'       => 'history:last_backup',
+      'incremental_backup_dir' => $backupdir,
+      'user'                   => $backupuser,
+      'password'               => $backuppassword,
+    }
+  }
+  $options = mysql_deepmerge($default_options, $mysql::server::override_options)
+
+  file { 'mysqlbackup-config-file':
+    path    => '/etc/mysql/conf.d/meb.cnf',
+    content => template('mysql/meb.cnf.erb'),
+    mode    => '0600',
+  }
+
+  file { 'mysqlbackupdir':
+    ensure => 'directory',
+    path   => $backupdir,
+    mode   => $backupdirmode,
+    owner  => $backupdirowner,
+    group  => $backupdirgroup,
+  }
+
+}