Advertisement
Guest User

Untitled

a guest
Jul 27th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.03 KB | None | 0 0
  1.  
  2. #!/bin/bash
  3.  
  4. ###########################
  5. ####### LOAD CONFIG #######
  6. ###########################
  7.  
  8. while [ $# -gt 0 ]; do
  9.         case $1 in
  10.                 -c)
  11.                         if [ -r "$2" ]; then
  12.                                 source "$2"
  13.                                 shift 2
  14.                         else
  15.                                 ${ECHO} "Unreadable config file \"$2\"" 1>&2
  16.                                 exit 1
  17.                         fi
  18.                         ;;
  19.                 *)
  20.                         ${ECHO} "Unknown Option \"$1\"" 1>&2
  21.                         exit 2
  22.                         ;;
  23.         esac
  24. done
  25.  
  26. if [ $# = 0 ]; then
  27.         SCRIPTPATH=$(cd ${0%/*} && pwd -P)
  28.         source $SCRIPTPATH/pg_backup.config
  29. fi;
  30.  
  31. ###########################
  32. #### PRE-BACKUP CHECKS ####
  33. ###########################
  34.  # Make sure we're running as the required backup user
  35. if [ "$BACKUP_USER" != "" -a "$(id -un)" != "$BACKUP_USER" ]; then
  36.     echo "This script must be run as $BACKUP_USER. Exiting." 1>&2
  37.     exit 1;
  38. fi;
  39.  
  40.  
  41. ###########################
  42. ### INITIALISE DEFAULTS ###
  43. ###########################
  44.  
  45. if [ ! $HOSTNAME ]; then
  46.     HOSTNAME="localhost"
  47. fi;
  48.  
  49. if [ ! $USERNAME ]; then
  50.     USERNAME="postgres"
  51. fi;
  52.  
  53.  
  54. ###########################
  55. #### START THE BACKUPS ####
  56. ###########################
  57.  
  58.  
  59. FINAL_BACKUP_DIR=$BACKUP_DIR"`date +\%Y-\%m-\%d`/"
  60.  
  61. echo "Making backup directory in $FINAL_BACKUP_DIR"
  62.  
  63. if ! mkdir -p $FINAL_BACKUP_DIR; then
  64.     echo "Cannot create backup directory in $FINAL_BACKUP_DIR. Go and fix it!" 1>&2
  65.     exit 1;
  66. fi;
  67.  
  68.  
  69. ###########################
  70. ### SCHEMA-ONLY BACKUPS ###
  71. ###########################
  72.  
  73. for SCHEMA_ONLY_DB in ${SCHEMA_ONLY_LIST//,/ }
  74. do
  75.     SCHEMA_ONLY_CLAUSE="$SCHEMA_ONLY_CLAUSE or datname ~ '$SCHEMA_ONLY_DB'"
  76. done
  77.  
  78. SCHEMA_ONLY_QUERY="select datname from pg_database where false $SCHEMA_ONLY_CLAUSE order by datname;"
  79.  
  80. echo -e "\n\nPerforming schema-only backups"
  81. echo -e "--------------------------------------------\n"
  82.  
  83. SCHEMA_ONLY_DB_LIST=`psql -h "$HOSTNAME" -U "$USERNAME" -At -c "$SCHEMA_ONLY_QUERY" postgres`
  84.  
  85. echo -e "The following databases were matched for schema-only backup:\n${SCHEMA_ONLY_DB_LIST}\n"
  86.  
  87. for DATABASE in $SCHEMA_ONLY_DB_LIST
  88. do
  89.     echo "Schema-only backup of $DATABASE"
  90.  
  91.     if ! pg_dump -Fp -s -h "$HOSTNAME" -U "$USERNAME" "$DATABASE" | gzip > $FINAL_BACKUP_DIR"$DATABASE"_SCHEMA.sql.gz.in_progress; then
  92.         echo "[!!ERROR!!] Failed to backup database schema of $DATABASE" 1>&2
  93.     else
  94.         mv $FINAL_BACKUP_DIR"$DATABASE"_SCHEMA.sql.gz.in_progress $FINAL_BACKUP_DIR"$DATABASE"_SCHEMA.sql.gz
  95.     fi
  96. done
  97.  
  98.  
  99. ###########################
  100. ###### FULL BACKUPS #######
  101. ###########################
  102.  
  103. for SCHEMA_ONLY_DB in ${SCHEMA_ONLY_LIST//,/ }
  104. do
  105.     EXCLUDE_SCHEMA_ONLY_CLAUSE="$EXCLUDE_SCHEMA_ONLY_CLAUSE and datname !~ '$SCHEMA_ONLY_DB'"
  106. done
  107.  
  108. FULL_BACKUP_QUERY="select datname from pg_database where not datistemplate and datallowconn $EXCLUDE_SCHEMA_ONLY_CLAUSE order by datname;"
  109.  
  110. echo -e "\n\nPerforming full backups"
  111. echo -e "--------------------------------------------\n"
  112.  
  113. for DATABASE in `psql -h "$HOSTNAME" -U "$USERNAME" -At -c "$FULL_BACKUP_QUERY" postgres`
  114. do
  115.     if [ $ENABLE_PLAIN_BACKUPS = "yes" ]
  116.     then
  117.         echo "Plain backup of $DATABASE"
  118.  
  119.         if ! pg_dump -Fp -h "$HOSTNAME" -U "$USERNAME" "$DATABASE" | gzip > $FINAL_BACKUP_DIR"$DATABASE".sql.gz.in_progress; then
  120.             echo "[!!ERROR!!] Failed to produce plain backup database $DATABASE" 1>&2
  121.         else
  122.             mv $FINAL_BACKUP_DIR"$DATABASE".sql.gz.in_progress $FINAL_BACKUP_DIR"$DATABASE".sql.gz
  123.         fi
  124.     fi
  125.  
  126.     if [ $ENABLE_CUSTOM_BACKUPS = "yes" ]
  127.     then
  128.         echo "Custom backup of $DATABASE"
  129.  
  130.         if ! pg_dump -Fc -h "$HOSTNAME" -U "$USERNAME" "$DATABASE" -f $FINAL_BACKUP_DIR"$DATABASE".custom.in_progress; then
  131.             echo "[!!ERROR!!] Failed to produce custom backup database $DATABASE" 1>&2
  132.         else
  133.             mv $FINAL_BACKUP_DIR"$DATABASE".custom.in_progress $FINAL_BACKUP_DIR"$DATABASE".custom
  134.         fi
  135.     fi
  136.  
  137. done
  138.  
  139. echo -e "\nAll database backups complete!"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement