Advertisement
Guest User

Untitled

a guest
Sep 9th, 2017
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.33 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # Get current date with format: Y-m-d_HMS
  4. date=$(date +%Y-%m-%d_%H%M%S);
  5.  
  6. # Backup location
  7. BACKUP_LOC='/srv/postgres/';
  8. DB_SUCCESS='success/';
  9. DB_UNTESTED='untested/';
  10. DB_FAILED='failed/';
  11.  
  12. # Log location
  13. LOG_FILE='/srv/postgres/log/';
  14.  
  15. # Email address
  16. EMAIL='';
  17.  
  18. # Postgres environment variables
  19. export PGUSER='';
  20. export PGHOST='';
  21. export PGDATABASE='';
  22. export PGPASSWORD='';
  23. DOCKER_PGPORT='';
  24. DOCKER_PGPASSWORD='';
  25.  
  26. BACKUP_FILENAME=${BACKUP_LOC}${DB_UNTESTED}${PGDATABASE}_${date}.sql;
  27. echo "[*] Creating a postgres docker container..."
  28. # Attempt to resore the database with a docker instance running postgres
  29. docker run -d --name ${PGDATABASE}_${date} -p $DOCKER_PGPORT:5432 -e POSTGRES_PASSWORD=$DOCKER_PGPASSWORD -e POSTGRES_USER=$PGUSER -e POSTGRES_DB=$PGDATABASE postgres
  30.  
  31. # We need to wait for docker to fully initialize before we can start restoring data
  32. sleep 10
  33.  
  34. # Change to postgres user
  35. #su postgres
  36.  
  37. cd /var/lib/pgsql
  38.  
  39. echo "[*] Dumping the database..."
  40.  
  41. # Dump the database
  42. if ! su -c "pg_dump --verbose -wF c ${PGDATABASE} > ${BACKUP_FILENAME} 2> ${LOG_FILE}${PGDATABASE}_${date}.dump.txt" postgres
  43. then
  44. echo "[-] pg_dump error..." >> cat ${LOG_FILE}${PGDATABASE}_${date}.dump.txt
  45. cat ${LOG_FILE}${PGDATABASE}_${date}.dump.txt | mail $EMAIL -s "Postgresql database dump failure!"
  46. mv ${BACKUP_FILENAME} ${BACKUP_LOC}${DB_FAILED}${PGDATABASE}_${date}.sql
  47. docker kill ${PGDATABASE}_${date}
  48. docker rm ${PGDATABASE}_${date}
  49. exit 1;
  50. fi
  51.  
  52. export PGPORT=$DOCKER_PGPORT;
  53. export PGPASSWORD=$DOCKER_PGPASSWORD;
  54.  
  55. echo "[*] Testing the database backup with docker..."
  56.  
  57. if ! su -c "pg_restore --no-owner --exit-on-error -d ${PGDATABASE} -F c ${BACKUP_FILENAME} 2> ${LOG_FILE}${PGDATABASE}_${date}.restore.txt" postgres
  58. then
  59. echo "[-] pg_restore error..." >> ${LOG_FILE}${PGDATABASE}_${date}.restore.txt
  60. cat ${LOG_FILE}${PGDATABASE}_${date}.restore.txt | mail -s "Postgresql database dump failure!" $EMAIL
  61. mv ${BACKUP_FILENAME} ${BACKUP_LOC}${DB_FAILED}${PGDATABASE}_${date}.sql
  62. docker kill ${PGDATABASE}_${date}
  63. docker rm ${PGDATABASE}_${date}
  64. exit;
  65. else
  66. # Great success, no errors!
  67. gzip $BACKUP_FILENAME
  68. mv ${BACKUP_FILENAME}.gz ${BACKUP_LOC}${DB_SUCCESS}${PGDATABASE}_${date}.sql.gz
  69. fi
  70.  
  71. # Remove containers
  72. echo "[*] Cleaning up..."
  73. docker kill ${PGDATABASE}_${date}
  74. docker rm ${PGDATABASE}_${date}
  75. echo "[!] Done"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement