From f465929ca6930752cf63c3635146687351cd3b01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Melan=C3=A7on?= Date: Sun, 6 Mar 2022 21:50:25 -0500 Subject: [PATCH] Bring in database copy script by Keegan & Chris for Portside Naively changing names for agaric live and test on Elizabeth, but not yet using variables that could be grabbed from .env file --- scripts/copy_live_db.sh | 108 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100755 scripts/copy_live_db.sh diff --git a/scripts/copy_live_db.sh b/scripts/copy_live_db.sh new file mode 100755 index 0000000..4f8a30b --- /dev/null +++ b/scripts/copy_live_db.sh @@ -0,0 +1,108 @@ +#!/bin/bash +set -euo pipefail +# Confirmed with echo `pwd` that as long as we use via composer it's always in +# /var/www/html (aka the project root). +proj_dir="$(cd $(dirname ${0})/../ && pwd)" # Parent of this script folder. +[ "$proj_dir" != "/var/www/html" ] && { echo "Script running from unexpected path - are you running within ddev, as you should?"; exit 1; } +local_backup="$(date +%Y%m%dT%H%M%S)_pre_pull.sql" +[ ! -d /var/www/html/backups ] && mkdir /var/www/html/backups || true + +verbose="" +backup="false" +sync="false" +target="local" + +while [ $# -gt 0 ] +do + case $1 + in + -t|--target) + target=$2 + shift 2 + ;; + + -b|--backup) + backup="true" + shift 1 + ;; + + -v|--verbose) + verbose="-v" + shift 1 + ;; + + -s|--sync) + sync="true" + shift 1 + ;; + + *) + echo "The arguments to use are" + echo "-t|--target {local|test}: The target to load the database to" + echo "-b|--backup: Indicate that a new backup should be made of the live database" + echo "-v|--verbose: Wordier output" + echo "-s|--sync: syncs files from live site" + exit 1 + ;; + esac +done + +if [ "$backup" = "true" ]; then + echo "Backing up live database..." + live_backup="prod_$(date +%Y%m%dT%H%M%S).sql" + remote_drush="/home/agaric_live/site/vendor/drush/drush/drush -r /home/agaric_Live/site/web $verbose" + ssh_cmd="$remote_drush sql-dump --gzip --structure-tables-key=common --result-file=~/backups/$live_backup" + ssh agaric_live@elizabeth.mayfirst.org $ssh_cmd + live_backup="${live_backup}.gz" +else + echo "Identifying the most recent live database backup..." + live_backup=`ssh agaric_live@elizabeth.org "ls -1t ~/backups/prod*.sql.gz | head -n1 | xargs -n1 basename"` +fi + +if [ "$target" = "local" ]; then + echo "Copying the database file from live to local..." + scp agaric_live@elizabeth.mayfirst.org:~/backups/${live_backup} /var/www/html/backups + + echo "Backing up local database to backups/${local_backup}..." + drush sql-dump > /var/www/html/backups/${local_backup} + + echo "Dropping local database..." + drush -y sql-drop + + echo "Unzipping live database..." + gzip -d -f /var/www/html/backups/${live_backup} + + echo "Importing the database copied from live..." + drush sqlc < /var/www/html/backups/${live_backup%.*} + + if [ "$sync" = "true" ]; then + echo "Pulling files from live into local..." + drush -y rsync @live:%files @self:%files + fi + +elif [ "$target" = "test" ]; then + remote_drush="/home/agaric_test/vendor/drush/drush/drush -r /home/agaric_test/site/web $verbose" + ssh agaric_test@elizabeth.mayfirst.org "${remote_drush} status > /dev/null" || (echo "SSH connection to ${target} or drush status failed - have you set up the key, and does site exist?"; exit 1) + ssh_cmd="scp ~/backups/${live_backup} agaric_test@localhost:~/backups" + ssh agaric_live@elizabeth.mayfirst.org ${ssh_cmd} + + echo "Backing up test database..." + ssh agaric_test@elizabeth.mayfirst.org "${remote_drush} sql-dump > ~/backups/${local_backup}" + + echo "Dropping test database..." + drush @test -y sql-drop + + echo "Unzipping live database..." + ssh_cmd="gzip -d -f ~/backups/${live_backup}" + ssh agaric_test@elizabeth.mayfirst.org "${ssh_cmd}" + + echo "Loading live database into test..." + ssh agaric_test@elizabeth.mayfirst.org "${remote_drush} sqlc < ~/backups/${live_backup%.*}" + + if [ "$sync" = "true" ]; then + echo "Pulling files from live into test..." + drush -y rsync @live:%files @test:%files + fi +fi + +echo "Done"