mirror of
https://github.com/krislamo/puppet-rsnapshot
synced 2024-11-10 00:00:35 +00:00
parameterize backup scripts
This commit is contained in:
parent
942e9a7697
commit
8ba0042a94
44
README.md
44
README.md
@ -365,8 +365,18 @@ Default is:
|
|||||||
|
|
||||||
#### `$backup_scripts`
|
#### `$backup_scripts`
|
||||||
Additional scripts to create, possible values are: mysql, psql, misc
|
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:
|
Default is:
|
||||||
|
|
||||||
@ -414,6 +424,7 @@ This creates
|
|||||||
- a mysql backup script for `bazqux.de` using the credentials `myuser:mypassword`
|
- a mysql backup script for `bazqux.de` using the credentials `myuser:mypassword`
|
||||||
|
|
||||||
The scripts look like this:
|
The scripts look like this:
|
||||||
|
|
||||||
mysql:
|
mysql:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@ -422,10 +433,31 @@ host=bazqux.de
|
|||||||
user=myuser
|
user=myuser
|
||||||
pass=mypassword
|
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
|
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
|
wait
|
||||||
pbzip2 -p3 "$db".sql
|
pbzip2 -p3 "$db".sql
|
||||||
done
|
done
|
||||||
@ -441,7 +473,9 @@ user=backupuser
|
|||||||
pass=password
|
pass=password
|
||||||
|
|
||||||
PGPASSWORD="$pass"
|
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
|
for db in "${dbs[@]}"; do
|
||||||
ssh -l root "$host" "pg_dump -U ${user} -Fc ${db}" > "$db".sql
|
ssh -l root "$host" "pg_dump -U ${user} -Fc ${db}" > "$db".sql
|
||||||
|
@ -135,21 +135,23 @@ class rsnapshot::config (
|
|||||||
content => template('rsnapshot/rsnapshot.erb'),
|
content => template('rsnapshot/rsnapshot.erb'),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if has_key($hash, backup_scripts) {
|
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":
|
concat::fragment { "${host}_${script}_backup":
|
||||||
target => $config,
|
target => $config,
|
||||||
content => "backup_script ${conf_d}/${host}.${script}.sh ./${script}\n",
|
content => "backup_script ${conf_d}/${host}.${script}.sh ./${script}\n",
|
||||||
}
|
}
|
||||||
|
|
||||||
file { "${conf_d}/${host}.${script}.sh":
|
file { "${conf_d}/${host}.${script}.sh":
|
||||||
|
@ -93,13 +93,19 @@ class rsnapshot::params {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
$backup_scripts = {
|
$backup_scripts = {
|
||||||
mysql => {
|
mysql => {
|
||||||
dbbackup_user => 'root',
|
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 => {
|
psql => {
|
||||||
dbbackup_user => 'postgres',
|
dbbackup_user => 'postgres',
|
||||||
dbbackup_password => '',
|
dbbackup_password => '',
|
||||||
|
dumper => 'pg_dump',
|
||||||
|
dump_flags => '-Fc',
|
||||||
|
ignore_dbs => [],
|
||||||
},
|
},
|
||||||
misc => {},
|
misc => {},
|
||||||
}
|
}
|
||||||
|
@ -6,10 +6,21 @@ host=<%=@host%>
|
|||||||
user=<%=@dbbackup_user%>
|
user=<%=@dbbackup_user%>
|
||||||
pass=<%=@dbbackup_password%>
|
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
|
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
|
wait
|
||||||
pbzip2 "$db".sql
|
pbzip2 "$db".sql
|
||||||
done
|
done
|
||||||
|
@ -7,10 +7,11 @@ user=<%=@dbbackup_user%>
|
|||||||
pass=<%=@dbbackup_password%>
|
pass=<%=@dbbackup_password%>
|
||||||
|
|
||||||
PGPASSWORD="$pass"
|
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
|
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
|
wait
|
||||||
pbzip2 "$db".sql
|
pbzip2 "$db".sql
|
||||||
done
|
done
|
||||||
|
Loading…
Reference in New Issue
Block a user