Advertisement
Guest User

Untitled

a guest
Jul 17th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.82 KB | None | 0 0
  1. #!/bin/bash -eu
  2. # Uses connection strings defined in /etc/barman.d/*.conf
  3. # to dump each single database and global objects
  4.  
  5. # do not run multiple instances
  6. [ "${FLOCKER:-''}" != "$0" ] && exec env FLOCKER="$0" flock -en "$0" "$0" "$@" || :
  7.  
  8. BASE=/var/lib/barman/dumps
  9. VERBOSE=0
  10. QUERYDB="select datname from pg_database where datallowconn
  11. order by pg_database_size(oid) desc"
  12.  
  13. # Delete old backups
  14. MAXAGE=3
  15.  
  16.  
  17. dbdump() {
  18. SERVER=$1
  19. conninfo=$2
  20.  
  21. eval ${conninfo}
  22.  
  23. outputdir="${BASE}/${host}/$(date +%Y%m%d)"
  24. mkdir -p ${outputdir}
  25.  
  26. for dbname in $(dblist)
  27. do
  28. printf "Creating ${outputdir}/${dbname}.dump "
  29. # Just one pg_dump at a time per cluster
  30. if [ ! -z ${pids[${SERVER}]+x} ]
  31. then
  32. printf "waiting for ${pids[${SERVER}]} "
  33. wait ${pids[${SERVER}]}
  34. fi
  35. pg_dump \
  36. --format=custom \
  37. --host=${host} \
  38. --port=${port:-5432} \
  39. --dbname=${dbname} \
  40. --user=${user} > ${outputdir}/${dbname}.dump &
  41. pids[${SERVER}]=$!
  42. echo "started with pid ${pids[${SERVER}]}"
  43. done
  44.  
  45. }
  46.  
  47. globals() {
  48. conninfo=$1
  49.  
  50. eval ${conninfo}
  51. outputdir="${BASE}/${host}/$(date +%Y%m%d)"
  52. mkdir -p ${outputdir}
  53. echo ${outputdir}/globals.dump
  54.  
  55. pg_dumpall \
  56. --globals-only \
  57. --host=${host} \
  58. --port=${port:-5432} \
  59. --user=${user} > ${outputdir}/globals.dump
  60. }
  61.  
  62. dblist() {
  63. psql \
  64. --host=${host} \
  65. --port=${port:-5432} \
  66. --dbname=${dbname} \
  67. --user=${user} \
  68. -t -A -c "${QUERYDB}"
  69. }
  70.  
  71. removeold() {
  72. conninfo=$1
  73.  
  74. eval ${conninfo}
  75. olddir="${BASE}/${host}/$(date -d 'now -1 day -'$MAXAGE' days' +%Y%m%d)"
  76. if [ -d ${olddir} ]
  77. then
  78. echo rm -f "${olddir}/*.dump"
  79. echo rmdir "${olddir}"
  80. fi
  81. }
  82.  
  83.  
  84. SERVER=0
  85. for server in /etc/barman.d/*.conf
  86. do
  87. conninfo=$(grep "^conninfo" $server | sed 's,conninfo = ,,')
  88. globals "${conninfo}"
  89. dbdump $SERVER "${conninfo}" &
  90. SERVER=$(( SERVER + 1 ))
  91. #removeold "${conninfo}"
  92. done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement