1
0
mirror of https://github.com/krislamo/puppet-rsnapshot synced 2024-09-19 17:10:34 +00:00

parameterize backup scripts

This commit is contained in:
Norbert Varzariu 2016-01-22 13:17:03 +01:00
parent 942e9a7697
commit 8ba0042a94
5 changed files with 78 additions and 24 deletions

View File

@ -365,8 +365,18 @@ Default is:
#### `$backup_scripts`
Additional scripts to create, possible values are: mysql, psql, misc
NOTE: this requires you to install the client packages you wish to use.
You can do this by passing an array to [$rsnapshot::package_name](#package_name)
NOTE: the psql and mysql scripts will SSH into your host and try and use pg_dump/mysqldump respectively.
Make sure you have those tools installed on your DB hosts.
You can do this by passing an array to [$rsnapshot::package_name](#package_name)
Example:
```yaml
rsnapshot::package_name:
- rsnapshot
- pbzip2
```
Default is:
@ -414,6 +424,7 @@ This creates
- a mysql backup script for `bazqux.de` using the credentials `myuser:mypassword`
The scripts look like this:
mysql:
```bash
@ -422,10 +433,31 @@ host=bazqux.de
user=myuser
pass=mypassword
dbs=( $(mysql -h "$host" -u "$user" -p"$pass" -e 'show databases' | sed '1d;/information_schema/d;/performance_schema/d') )
dbs=(
$(ssh -l root "$host" "mysql -u ${user} -p${pass} -e 'show databases' | sed '1d;/information_schema/d;/performance_schema/d'")
)
for db in "${dbs[@]}"; do
mysqldump --host="$host" --user="$user" --password="$pass" --single-transaction --quick --routines --ignore-table=mysql.event "$db" > "$db".sql
ssh -l root "$host" "mysqldump --user=${user} --password=${pass} --single-transaction --quick --routines --ignore-table=mysql.event ${db}" > "${db}.sql"
wait
pbzip2 -p3 "$db".sql
done
```
mysql with root user:
```bash
#!/bin/bash
host=bazqux.de
user=root
dbs=(
$(ssh -l root "$host" "mysql -e 'show databases' | sed '1d;/information_schema/d;/performance_schema/d'")
)
for db in "${dbs[@]}"; do
ssh -l root "$host" "mysqldump --single-transaction --quick --routines --ignore-table=mysql.event ${db}" > "${db}.sql"
wait
pbzip2 -p3 "$db".sql
done
@ -441,7 +473,9 @@ user=backupuser
pass=password
PGPASSWORD="$pass"
dbs=( $(psql -h "$host" -U "$user" -Atc "SELECT datname FROM pg_database WHERE NOT datistemplate AND datname <> 'postgres'") )
dbs=(
$(ssh -l root "$host" "psql -U ${user} -Atc \"SELECT datname FROM pg_database WHERE NOT datistemplate AND datname <> 'postgres'\"" )
)
for db in "${dbs[@]}"; do
ssh -l root "$host" "pg_dump -U ${user} -Fc ${db}" > "$db".sql

View File

@ -135,21 +135,23 @@ class rsnapshot::config (
content => template('rsnapshot/rsnapshot.erb'),
}
if has_key($hash, backup_scripts) {
$hash[backup_scripts].each |$script, $scriptconf| {
$real_script = deep_merge($rsnapshot::params::backup_scripts[$script], $rsnapshot::backup_scripts[$script], $hash[backup_scripts][$script])
notify { "$hash[backup_scripts][$script] for $host and $script": }
# notify { "$real_script for $host and $script": }
$dbbackup_user = $real_script[dbbackup_user]
$dbbackup_password = $real_script[dbbackup_password]
$dumper = $real_script[dumper]
$dump_flags = $real_script[dump_flags]
$ignore_dbs = $real_script[ignore_dbs]
$hash[backup_scripts].each |$script, $credentials| {
if is_hash($credentials) {
$dbbackup_user = $credentials['dbbackup_user']
$dbbackup_password = $credentials['dbbackup_password']
} else {
$dbbackup_user = $rsnapshot::default_backup_scripts[$script]['dbbackup_user']
$dbbackup_password = $rsnapshot::default_backup_scripts[$script]['dbbackup_password']
}
concat::fragment { "${host}_${script}_backup":
target => $config,
content => "backup_script ${conf_d}/${host}.${script}.sh ./${script}\n",
target => $config,
content => "backup_script ${conf_d}/${host}.${script}.sh ./${script}\n",
}
file { "${conf_d}/${host}.${script}.sh":

View File

@ -93,13 +93,19 @@ class rsnapshot::params {
},
}
$backup_scripts = {
mysql => {
mysql => {
dbbackup_user => 'root',
dbbackup_password => 'myFancyPassWord',
dbbackup_password => '',
dumper => 'mysqldump',
dump_flags => '--single-transaction --quick --routines --ignore-table=mysql.event',
ignore_dbs => [ 'information_schema', 'performance_schema' ],
},
psql => {
dbbackup_user => 'postgres',
dbbackup_password => '',
dumper => 'pg_dump',
dump_flags => '-Fc',
ignore_dbs => [],
},
misc => {},
}

View File

@ -6,10 +6,21 @@ host=<%=@host%>
user=<%=@dbbackup_user%>
pass=<%=@dbbackup_password%>
dbs=( $(mysql -h "$host" -u "$user" -p"$pass" -e 'show databases' | sed '1d;/information_schema/d;/performance_schema/d') )
<% if (@dbbackup_user == 'root' && @dbbackup_password == '') -%>
dbs=(
$(ssh -l root "$host" "mysql -e 'show databases' | sed '1d;<%@ignore_dbs.to_a.each do |db|-%>/<%=db-%>/d;<%end-%>'" )
)
<%else-%>
dbs=(
$(ssh -l root "$host" "mysql -u <%=@dbbackup_user-%> -p'<%=@dbbackup_password-%>' -e 'show databases' | sed '1d;<%@ignore_dbs.each do |db|-%>/<%=db-%>/d;<%end-%>'" )
)
<%end-%>
for db in "${dbs[@]}"; do
mysqldump --host="$host" --user="$user" --password="$pass" --single-transaction --quick --routines --ignore-table=mysql.event "$db" > "$db".sql
<% if @dbbackup_user == 'root' -%>
ssh -l root "$host" "<%=@dumper-%> <%=@dump_flags-%> ${db}" > "$db".sql
<%else-%>
ssh -l root "$host" "<%=@dumper-%> --user=<%=@dbbackup_user-%> --password='<%=@dbbackup_password-%>' <%=@dump_flags-%> ${db}" > "$db".sql
<%end-%>
wait
pbzip2 "$db".sql
done

View File

@ -7,10 +7,11 @@ user=<%=@dbbackup_user%>
pass=<%=@dbbackup_password%>
PGPASSWORD="$pass"
dbs=( $(psql -h "$host" -U "$user" -Atc "SELECT datname FROM pg_database WHERE NOT datistemplate AND datname <> 'postgres'") )
dbs=(
$(ssh "$host" "psql -U ${user} -Atc \"SELECT datname FROM pg_database WHERE NOT datistemplate AND NOT datname ~ '<%@ignore_dbs.each do |db|-%><%if db == @ignore_dbs.last-%><%=db-%><%else-%><%=db-%>|<%end-%><%end-%>'\"")
)
for db in "${dbs[@]}"; do
ssh -l root "$host" "pg_dump -U ${user} -Fc ${db}" > "$db".sql
ssh -l root "$host" "<%=@dumper-%> -U ${user} <%=@dump_flags-%> ${db}" > "$db".sql
wait
pbzip2 "$db".sql
done