- #!/bin/bash
- #************************************************************************/
- #* Author: Unknown Create Date: 08/03/23 */
- #* Purpose: This Code copied from an online source nnd is designed to */
- #* SYNC datasbases. The original design was Sync MySQL */
- #* Databases for Websites across different stages (live, dev, */
- #* test). */
- #* Source: https://bash.cyberciti.biz/guide/Menu_driven_scripts */
- #* Type: A menu driven shell script sample template. */
- #************************************************************************/
- #* Modified: Nyle E. Davis Modify Date: 08/03/23 */
- #* Changes: Changed allowing local 2 local DB & table 2 table syncs */
- #* Trucated the var names to fit the editor scren. */
- #************************************************************************/
- # ----------------------------------
- # Step #1: Define global variables
- # ----------------------------------
- RED='\033[0;41;30m'
- STD='\033[0;0;39m'
- TODAY=$(date +"%Y-%m-%d")
- # --------------------------------------
- # Define the arrays
- # indexes as follows:
- # 0 = type : wp | magento | local | table
- # 1 = host : my.db-ho.st
- # 2 = user : username
- # 3 = dbn : name of the database
- # 4 = pwrd : password
- # 5 = subdomain / prefix : for Magento's core_config_data change
- # and to compare $SRC with $DEST
- # --------------------------------------
- declare -a live_mag=(mag my-live.db-ho.st user db pwrd www)
- declare -a live_wp=(wp my-live.db-ho.st user db pwrd www)
- declare -a dev_mag=(mag my-dev.db-ho.st user db pwrd dev)
- declare -a dev_wp=(wp my-dev.db-ho.st user db pwrd dev)
- declare -a test_mag=(mag my-test.db-ho.st user db pwrd test)
- declare -a test_wp=(wp my-test.db-ho.st user db pwrd test)
- declare -a dev2_mag=(mag my-dev.db-ho.st user db pwrd dev2)
- declare -a dev2_wp=(wp my-dev.db-ho.st user db pwrd dev2)
- declare -a loc1_ldb1=(loc 1.db-ho.st user db pwrd loc1)
- declare -a loc2_ldb2=(loc 2.db-ho.st user db pwrd loc2)
- declare -a tab1_tab1=(ltb-1.db-ho.st user db pwrd ltb1)
- declare -a tab2_tab2=(ltb-2.db-ho.st user db pwrd ltb2)
- # ----------------------------------
- # Step #2: User defined function
- # ----------------------------------
- init() {
- clear
- echo "##################################"
- echo "## A simple script to keep your ##"
- echo "## MySQL Databases in sync. ##"
- echo "##################################"
- }
- select_source_menu() {
- echo ""
- echo "Select a SOURCE database."
- echo ""
- echo "1. Live"
- echo "2. Dev"
- echo "3. Testing"
- echo "4. Nav"
- echo "5. Local"
- echo "6. Table"
- echo "~~~~~~~~~~~~~~~~~~~~~"
- echo "0. Exit"
- read_options_1
- }
- select_destination_menu() {
- init
- echo ""
- echo "Select a DESTINATION database."
- echo ""
- echo "A. Live"
- echo "B. Dev"
- echo "C. Testing"
- echo "D. Nav"
- echo "E. Local"
- echo "F. Table"
- echo "~~~~~~~~~~~~~~~~~~~~~"
- echo "0. Exit"
- read_options_2
- }
- select_confirmation_menu() {
- get_db_variables
- init
- echo ""
- echo "### ATTENTION!!! ###"
- echo "This will delete all information in the $DEST-database."
- echo ""
- echo "Are you sure?"
- echo ""
- echo "(y)es"
- echo "(n)ot really"
- echo "~~~~~~~~~~~~~~~~~~~~~"
- echo "0. Exit"
- read_options_2
- }
- select_remains_menu() {
- init
- echo ""
- echo "What about the created SQL dumpfiles?"
- echo "What are we gonna do with them?"
- echo ""
- echo "(k)eep them as zipped backup-file."
- echo "(d)elete them."
- read_options_2
- }
- select_restart_menu() {
- init
- echo ""
- echo "All done. What now?"
- echo ""
- echo "r) Restart sync."
- echo "0) Exit."
- read_options_2
- }
- # read input from the keyboard and take a action
- # Exit when user the user select 0 form the menu option.
- read_options_1(){
- local choice
- read -p "Enter choice: " choice
- case $choice in
- 1) SRC=live;select_destination_menu ;;
- 2) SRC=dev;select_destination_menu ;;
- 3) SRC=testing;select_destination_menu ;;
- 4) SRC=nav;select_destination_menu ;;
- 5) SRC=loc;select_destination_menu ;;
- 6) SRC=tab;select_destination_menu ;;
- 0) exit 1 ;;
- *) echo -e "${RED}Error...${STD}" && sleep 2 && start
- esac
- }
- read_options_2(){
- local choice
- read -p "Enter choice: " choice
- case $choice in
- A) DEST=live;select_confirmation_menu ;;
- B) DEST=dev;select_confirmation_menu ;;
- C) DEST=testing;select_confirmation_menu ;;
- D) DEST=nav;select_confirmation_menu ;;
- E) DEST=loc;select_confirmation_menu ;;
- F) DEST=tab;select_confirmation_menu ;;
- y) sync_db ;;
- n) start ;;
- k) backup ;;
- d) delete_files ;;
- r) start ;;
- 82517) sync_db ;;
- 0) exit 1 ;;
- *) echo -e "${RED}Error...${STD}" && sleep 2 && select_destination_menu
- esac
- }
- get_db_variables(){
- case $SRC in
- live) SRC_MAGE=("${live_mag[@]}");SRC_WP=("${live_wp[@]}") ;;
- dev) SRC_MAGE=("${dev_mag[@]}");SRC_WP=("${dev_wp[@]}") ;;
- test) SRC_MAGE=("${test_mag[@]}");SRC_WP=("${test_wp[@]}") ;;
- nav) SRC_MAGE=("${nav_mag[@]}");SRC_WP=("${nav_wp[@]}") ;;
- esac
- case $DEST in
- live) DEST_MAGE=("${live_mag[@]}");DEST_WP=("${live_wp[@]}") ;;
- dev) DEST_MAGE=("${dev_mag[@]}");DEST_WP=("${dev_wp[@]}") ;;
- test) DEST_MAGE=("${test_mag[@]}");DEST_WP=("${test_wp[@]}") ;;
- nav) DEST_MAGE=("${nav_mag[@]}");DEST_WP=("${nav_wp[@]}") ;;
- esac
- if [ ${SRC_MAGE[5]} == ${DEST_MAGE[5]} ]; then
- echo -e "${RED}Error: source and destination must not be the same.${STD}"
- echo -e "${RED}Source is: ${SRC_MAGE[5]}.${STD}"
- echo -e "${RED}Destination is: ${DEST_MAGE[5]}.${STD}" && sleep 5
- start
- fi
- if [ ${DEST_MAGE[5]} == www ]; then
- init
- echo ""
- echo "##################################"
- echo "########## ATTENTION!!!! #########"
- echo "##################################"
- echo ""
- echo "This will delete all information in the $DEST-database and"
- echo "will overwrite it with information from $SRC"
- echo ""
- echo "##################################"
- echo "There is NO WAY of restoring the data from $DEST"
- echo "unless you made a backup once."
- echo ""
- echo "##################################"
- echo ""
- echo "So: Are you REALLY DEFINITELY sure?"
- echo ""
- echo "##################################"
- echo ""
- echo "Enter 82517 for yes."
- echo "(n) to abort."
- echo "~~~~~~~~~~~~~~~~~~~~~"
- echo "0. Exit"
- read_options_2
- fi
- }
- ync_db(){
- ## The real purpose of this bash script
- echo "Now copying MySQL databases from $SRC to $DEST..."
- # indexes as follows:
- # 0 = type : wordpress | mag
- # 1 = host : db13.variomedia.de
- # 2 = user : u36052 | u36065 ..
- # 3 = database name : db36052 | db36065 ..
- # 4 = password
- # 5 = subdomain / prefix : for Magento's core_config_data change and to compare $SRC with $DEST
- mysqldump -h ${SRC_MAGE[1]} -u ${SRC_MAGE[2]} -p${SRC_MAGE[4]} ${SRC_MAGE[3]} > ~/sql-backup/$TODAY-${SRC_MAGE[0]}-${SRC_MAGE[5]}.sql
- echo "mag DB dumped to ~/sql-backup/$TODAY-${SRC_MAGE[0]}-${SRC_MAGE[5]}.sql"
- mysqldump -h ${SRC_WP[1]} -u ${SRC_WP[2]} -p${SRC_WP[4]} ${SRC_WP[3]} > ~/sql-backup/$TODAY-${SRC_WP[0]}-${SRC_WP[5]}.sql
- echo "WordPress DB dumped to ~/sql-backup/$TODAY-${SRC_WP[0]}-${SRC_WP[5]}.sql"
- echo "Now importing into $DEST database..."
- mysql -h ${DEST_MAGE[1]} -u ${DEST_MAGE[2]} -p${DEST_MAGE[4]} ${DEST_MAGE[3]} < ~/sql-backup/$TODAY-${SRC_MAGE[0]}-${SRC_MAGE[5]}.sql
- echo "mag DB imported from ~/sql-backup/$TODAY-${SRC_MAGE[0]}-${SRC_MAGE[5]}.sql"
- mysql -h ${DEST_WP[1]} -u ${DEST_WP[2]} -p${DEST_WP[4]} ${DEST_WP[3]} < ~/sql-backup/$TODAY-${SRC_WP[0]}-${SRC_WP[5]}.sql
- echo "WordPress DB imported from ~/sql-backup/$TODAY-${SRC_WP[0]}-${SRC_WP[5]}.sql"
- echo "Now changing the 'base_url's for the destination Magento-DB."
- mysql -h ${DEST_MAGE[1]} -u ${DEST_MAGE[2]} -p${DEST_MAGE[4]} ${DEST_MAGE[3]} -e 'UPDATE `core_config_data` SET `value` = "http://'${DEST_MAGE[5]}'.my-website.com/" WHERE `core_config_data`.`config_id` = 7; UPDATE `core_config_data` SET `value` = "http://'${DEST_MAGE[5]}'.my-website.com/" WHERE `core_config_data`.`config_id` = 8;'
- echo "Copying databases done. Now clearing ${DEST_MAGE[5]} Magento cache" && sleep 2
- rm -rfv ~/${DEST_MAGE[5]}/var/cache/
- select_remains_menu
- }
- backup(){
- echo "Zipping SQL dumpfiles and saving them as backup..."
- cat ~/sql-backup/$TODAY-${SRC_MAGE[0]}-${SRC_MAGE[5]}.sql ~/sql-backup/$TODAY-${SRC_WP[0]}-${SRC_WP[5]}.sql | gzip -v > ~/sql-backup/$TODAY-sql-backup-${SRC_MAGE[5]}.gz
- delete_files
- }
- delete_files(){
- echo "Deleting sql-files..."
- rm -fv ~/sql-backup/$TODAY-${SRC_MAGE[0]}-${SRC_MAGE[5]}.sql ~/sql-backup/$TODAY-${SRC_WP[0]}-${SRC_WP[5]}.sql
- select_restart_menu
- }
- # ----------------------------------------------
- # Step #3: Trap CTRL+C, CTRL+Z and quit singles
- # ----------------------------------------------
- trap '' SIGINT SIGQUIT SIGTSTP
- # -----------------------------------
- # Step #4: Main logic - infinite loop
- # ------------------------------------
- start() {
- unset -v SRC
- unset -v DEST
- unset -v SRC_MAGE
- unset -v SRC_WP
- unset -v DEST_MAGE
- unset -v DEST_WP
- init
- select_source_menu
- }
- start