Skip to content

Instantly share code, notes, and snippets.

@yvoronoy
Last active September 10, 2019 14:33
Show Gist options
  • Save yvoronoy/e55973a12cd573c86261452ebfb4040f to your computer and use it in GitHub Desktop.
Save yvoronoy/e55973a12cd573c86261452ebfb4040f to your computer and use it in GitHub Desktop.
Magento 2 Code and DB dumps
#!/usr/bin/env bash
function runCommand
{
echo "${CMD}"
eval ${CMD};
}
function getDb
{
echo $(grep [\']db[\'] -A 20 app/etc/env.php | grep $1 | head -n1 | sed "s/.*[=][>][ ]*[']//" | sed "s/['][,]//");
return 0;
}
function encryptFile
{
echo "Encrypting $1 file"
openssl enc -aes-256-cbc -in /tmp/$1 -out pub/media/$1.enc
}
function printCommandsToDownloadDump
{
echo "curl -k -L -O ${URL}media/${1}.enc && openssl enc -d -aes-256-cbc -in ${1}.enc -out ${1};"
}
export DB_NAME=$(getDb dbname)
export DB_HOST=$(getDb host)
export DB_USER=$(getDb username)
export DB_USER_PASSWORD=$(getDb password)
codeDumpFilename=`date +%Y-%m-%d`_$(whoami).tar.gz
dbDumpFilename=`date +%Y-%m-%d`_$(whoami).sql.gz
CMD="tar cfh - ./
--exclude=pub/media/catalog/*
--exclude=pub/media/*
--exclude=pub/media/backup/*
--exclude=pub/media/import/*
--exclude=pub/media/tmp/*
--exclude=pub/static/*
--exclude=var/*
--exclude=private
--exclude=tests | gzip > /tmp/${codeDumpFilename}"
runCommand
CMD="(mysqldump --no_data --routines --force --skip-opt --single-transaction --create-options --disable-keys --extended-insert --set-charset --quick --add-drop-table -h $DB_HOST -u $DB_USER --password=$DB_USER_PASSWORD $DB_NAME | sed -e 's/DEFINER[ ]*=[ ]*[Backup dumps without backup.sh script^*]*\*/\*/' && mysqldump --force --skip-opt --skip-add-drop-table --no-create-info --skip-triggers --single-transaction --quick \
--ignore-table=$DB_NAME.cache_tag \
--ignore-table=$DB_NAME.sales_bestsellers_aggregated_daily \
--ignore-table=$DB_NAME.core_cache \
--ignore-table=$DB_NAME.magento_logging_event \
--ignore-table=$DB_NAME.magento_logging_event_changes \
--ignore-table=$DB_NAME.customer_log \
--ignore-table=$DB_NAME.report_event \
--ignore-table=$DB_NAME.report_viewed_product_index \
--ignore-table=$DB_NAME.search_query \
--ignore-table=$DB_NAME.catalog_product_index_price_final_idx \
--ignore-table=$DB_NAME.catalog_product_index_price_bundle_opt_idx \
--ignore-table=$DB_NAME.catalog_product_index_price_bundle_idx \
--ignore-table=$DB_NAME.catalog_product_index_price_downlod_idx \
--ignore-table=$DB_NAME.catalog_product_index_price_cfg_opt_idx \
--ignore-table=$DB_NAME.catalog_product_index_price_opt_idx \
--ignore-table=$DB_NAME.catalog_product_index_price_cfg_opt_agr_idx \
--ignore-table=$DB_NAME.catalog_product_index_price_opt_agr_idx \
--ignore-table=$DB_NAME.catalog_product_index_price_bundle_sel_idx \
--ignore-table=$DB_NAME.catalog_product_index_eav_decimal_idx \
--ignore-table=$DB_NAME.cataloginventory_stock_status_idx \
--ignore-table=$DB_NAME.catalog_product_index_eav_idx \
--ignore-table=$DB_NAME.catalog_product_index_price_idx \
--ignore-table=$DB_NAME.catalog_product_index_price_downlod_tmp \
--ignore-table=$DB_NAME.catalog_product_index_price_cfg_opt_tmp \
--ignore-table=$DB_NAME.catalog_product_index_eav_tmp \
--ignore-table=$DB_NAME.catalog_product_index_price_tmp \
--ignore-table=$DB_NAME.catalog_product_index_price_opt_tmp \
--ignore-table=$DB_NAME.catalog_product_index_price_cfg_opt_agr_tmp \
--ignore-table=$DB_NAME.catalog_product_index_eav_decimal_tmp \
--ignore-table=$DB_NAME.catalog_product_index_price_opt_agr_tmp \
--ignore-table=$DB_NAME.catalog_product_index_price_bundle_tmp \
--ignore-table=$DB_NAME.catalog_product_index_price_bundle_sel_tmp \
--ignore-table=$DB_NAME.cataloginventory_stock_status_tmp \
--ignore-table=$DB_NAME.catalog_product_index_price_final_tmp \
--ignore-table=$DB_NAME.catalog_product_index_price_bundle_opt_tmp \
--ignore-table=$DB_NAME.magento_catalogpermissions_index_tmp \
--ignore-table=$DB_NAME.magento_catalogpermissions_index_product_tmp \
--ignore-table=$DB_NAME.catalog_category_product_index_tmp \
-h $DB_HOST -u $DB_USER --password=$DB_USER_PASSWORD $DB_NAME &) | gzip > /tmp/${dbDumpFilename}"
runCommand
URL=$(mysql -h $DB_HOST -u $DB_USER --password=$DB_USER_PASSWORD $DB_NAME -e "SELECT core_config_data.value FROM core_config_data WHERE path = 'web/unsecure/base_url'" | grep http | head -1)
encryptFile ${codeDumpFilename}
encryptFile ${dbDumpFilename}
echo "Run these commands on your host to download and decrypt dumps"
echo "#############################################################"
printCommandsToDownloadDump ${codeDumpFilename}
printCommandsToDownloadDump ${dbDumpFilename}
echo "rm ${codeDumpFilename}.enc ${dbDumpFilename}.enc"
echo "#############################################################"
read -p "Press [Enter] key to continue and remove dumps from public directory"
CMD="rm pub/media/${codeDumpFilename}.enc /tmp/${codeDumpFilename}"
runCommand
CMD="rm pub/media/${dbDumpFilename}.enc /tmp/${dbDumpFilename}"
runCommand
echo "Dumps has been removed"
echo "Exit"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment