Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env bash
- PROD_ENV=""
- STAGE_ENV=""
- INT_ENV=""
- TIMEFORMAT=%R
- db_data_reg="cat app/etc/env.php | grep -A 10 \"'db'\""
- try() {
- "$@" || { echo "command failed, with exit code $?"; exit 1; }
- }
- function execute_ssh {
- ssh -A -t -q -o "StrictHostKeyChecking=no" -o "ServerAliveCountMax=60" -o "ServerAliveInterval=10" "$1" "$2"
- }
- function run {
- echo "Preparing db variables"
- s_db_data=$(execute_ssh "${SOURCE_ENV}" "${db_data_reg}")
- s_db_host=$(echo "$s_db_data" | tr "," "\n" | grep host | cut -d "'" -f 4)
- s_db_name=$(echo "$s_db_data" | tr "," "\n" | grep dbname | cut -d "'" -f 4)
- s_db_user=$(echo "$s_db_data" | tr "," "\n" | grep user | cut -d "'" -f 4)
- s_db_pass=$(echo "$s_db_data" | tr "," "\n" | grep pass | cut -d "'" -f 4)
- d_db_data=$(execute_ssh "${DST_ENV}" "${db_data_reg}")
- d_db_host=$(echo "$d_db_data" | tr "," "\n" | grep host | cut -d "'" -f 4)
- d_db_name=$(echo "$d_db_data" | tr "," "\n" | grep dbname | cut -d "'" -f 4)
- d_db_user=$(echo "$d_db_data" | tr "," "\n" | grep user | cut -d "'" -f 4)
- d_db_pass=$(echo "$d_db_data" | tr "," "\n" | grep pass | cut -d "'" -f 4)
- db_dump_core="mysqldump -h "$d_db_host" --databases "$d_db_name" --tables core_config_data > /tmp/"${d_db_name}_core.sql""
- s_do_dump="mysqldump -h "$s_db_host" --user="$s_db_user" --password="$s_db_pass" --single-transaction --triggers "$s_db_name" > /tmp/"$s_db_name".sql"
- s_do_sed="sed -i \"s/DEFINER[ ]*=[ ]*[^*]*\*/\*/g\" /tmp/"$s_db_name".sql"
- echo "Starting database dump"
- try execute_ssh "${SOURCE_ENV}" "${s_do_dump}"
- time try execute_ssh "${SOURCE_ENV}" "${s_do_sed}"
- echo ""; echo "Copying database"
- try execute_ssh "${DST_ENV}" "rm -rf /tmp/$s_db_name.sql"
- try execute_ssh "${SOURCE_ENV}" "rsync -e \"ssh -q -o \"StrictHostKeyChecking=no\"\" --progress /tmp/"$s_db_name".sql "$DST_ENV":/tmp/"
- echo ""; echo "Backup core_config_data, restore db and core on destination env"
- try execute_ssh "$DST_ENV" "${db_dump_core}"
- time try execute_ssh "$DST_ENV" "mysql -h "$d_db_host" $d_db_name < /tmp/${s_db_name}.sql"
- try execute_ssh "$DST_ENV" "mysql -h "$d_db_host" $d_db_name < /tmp/${d_db_name}_core.sql"
- echo ""; echo "Syncing media"
- try execute_ssh "${SOURCE_ENV}" "rsync -e \"ssh -q -o \"StrictHostKeyChecking=no\"\" -ru pub/media/ "$DST_ENV":pub/media/"
- echo ""; echo "Flushing cache"
- try execute_ssh "$DST_ENV" "php bin/magento cache:flush"
- }
- case "$1" in
- integration)
- SOURCE_ENV="$STAGE_ENV"
- DST_ENV="$INT_ENV"
- run
- ;;
- stage)
- SOURCE_ENV="$PROD_ENV"
- DST_ENV="$STAGE_ENV"
- run
- ;;
- *)
- echo ""
- echo "This script will sync integration (from stage) or stage (from prod)"
- echo $"Usage: $0 {integration|stage}"
- echo ""
- exit 1
- esac
Add Comment
Please, Sign In to add comment