diff --git a/REFDB_FORMAT.txt b/REFDB_FORMAT.txt index 281a0ec..8957823 100644 --- a/REFDB_FORMAT.txt +++ b/REFDB_FORMAT.txt @@ -1827,9 +1827,12 @@ use_case: solution: "Start second MySQL instance with restored files, dump to SQL, import to live" features: + - "Multi-control panel support (cPanel, Plesk, InterWorx, standalone)" + - "Detects control panel and uses appropriate home directory" - "Detects MySQL version (MySQL 5.7, MySQL 8.0+, MariaDB)" - "Version-specific validation (ib_logfile0/1 vs #innodb_redo)" - - "Auto-creates timestamped restore directory (/home/temp/restoreYYYYMMDD/mysql)" + - "Auto-creates timestamped restore directory ($SYS_USER_HOME_BASE/temp/restoreYYYYMMDD/mysql)" + - "SQL dumps saved to restore directory (not current working directory)" - "Lists exact files needed from backup (with emoji visual markers)" - "Validates data structure before proceeding" - "Checks and fixes file ownership (mysql:mysql)" @@ -1953,7 +1956,25 @@ output: format: "_restored_.sql" example: "myuser_wordpress_restored_20251210_143022.sql" with_ticket: "myuser_wordpress_ticket01234567_20251210_143022.sql" - location: "Current working directory" + location: "Parent directory of restore location (e.g., /home/temp/restore20251210/)" + +control_panel_paths: + cpanel: + home_base: "/home" + suggested_restore: "/home/temp/restore20251210/mysql" + sql_output: "/home/temp/restore20251210/" + plesk: + home_base: "/var/www/vhosts" + suggested_restore: "/var/www/vhosts/temp/restore20251210/mysql" + sql_output: "/var/www/vhosts/temp/restore20251210/" + interworx: + home_base: "/home" + suggested_restore: "/home/temp/restore20251210/mysql" + sql_output: "/home/temp/restore20251210/" + standalone: + home_base: "/home" + suggested_restore: "/home/temp/restore20251210/mysql" + sql_output: "/home/temp/restore20251210/" next_steps_provided: 1: "Verify dump: grep 'Dump completed on' output.sql" diff --git a/modules/backup/mysql-restore-to-sql.sh b/modules/backup/mysql-restore-to-sql.sh index ca8a46b..4413735 100755 --- a/modules/backup/mysql-restore-to-sql.sh +++ b/modules/backup/mysql-restore-to-sql.sh @@ -18,6 +18,7 @@ # Path resolution (modules/backup/script.sh → ../../) SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" source "$SCRIPT_DIR/lib/common-functions.sh" +source "$SCRIPT_DIR/lib/system-detect.sh" # Root check if [ "$EUID" -ne 0 ]; then @@ -25,6 +26,9 @@ if [ "$EUID" -ne 0 ]; then exit 1 fi +# Detect control panel for proper directory paths +detect_control_panel >/dev/null 2>&1 || true + ################################################################################ # GLOBAL VARIABLES ################################################################################ @@ -1069,8 +1073,11 @@ step2_set_restore_location() { echo "Let's set up the restore directory." echo "" + # Use control panel-specific home base, fallback to /home + local home_base="${SYS_USER_HOME_BASE:-/home}" + # Offer to create a timestamped directory - local suggested_dir="/home/temp/restore$(date +%Y%m%d)/mysql" + local suggested_dir="${home_base}/temp/restore$(date +%Y%m%d)/mysql" echo "Suggested directory: $suggested_dir" echo "" echo " 1) Use suggested directory (will create if needed)" @@ -1117,9 +1124,10 @@ step2_set_restore_location() { chown mysql:mysql "$TEMP_DATADIR" chmod 751 "$TEMP_DATADIR" - # Also ensure parent /home/temp has correct permissions - if [ -d "/home/temp" ]; then - chmod 751 /home/temp 2>/dev/null || true + # Also ensure parent temp directory has correct permissions + local parent_temp="${home_base}/temp" + if [ -d "$parent_temp" ]; then + chmod 751 "$parent_temp" 2>/dev/null || true fi print_success "Directory created with mysql:mysql ownership" @@ -1423,13 +1431,19 @@ step5_create_dump() { echo "" - # Generate output filename + # Generate output filename - save to parent directory of TEMP_DATADIR + # e.g., if TEMP_DATADIR is /home/temp/restore20251210/mysql + # then output goes to /home/temp/restore20251210/ local timestamp=$(date +%Y%m%d_%H%M%S) - local output_file="${DATABASE_NAME}_restored_${timestamp}.sql" + local output_dir="$(dirname "$TEMP_DATADIR")" + local output_file="${output_dir}/${DATABASE_NAME}_restored_${timestamp}.sql" if [ -n "$TICKET_NUMBER" ]; then - output_file="${DATABASE_NAME}_ticket${TICKET_NUMBER}_${timestamp}.sql" + output_file="${output_dir}/${DATABASE_NAME}_ticket${TICKET_NUMBER}_${timestamp}.sql" fi + print_info "SQL dump will be saved to: $output_file" + echo "" + # Create dump if ! dump_database "$TEMP_DATADIR" "$DATABASE_NAME" "$output_file"; then print_error "Failed to create dump" @@ -1448,19 +1462,19 @@ step5_create_dump() { print_success "RESTORE COMPLETE!" echo "════════════════════════════════════════════════════════════════" echo "" - echo "SQL Dump Created: $(pwd)/$output_file" + echo "SQL Dump Created: $output_file" echo "" echo "Next Steps:" echo " 1. Verify dump integrity:" - echo " grep 'Dump completed on' $output_file" + echo " grep 'Dump completed on' '$output_file'" echo "" echo " 2. Import to live database:" - echo " mysql $DATABASE_NAME < $output_file" + echo " mysql $DATABASE_NAME < '$output_file'" echo "" echo " 3. Or create fresh database first:" echo " mysql -e 'DROP DATABASE IF EXISTS $DATABASE_NAME;'" echo " mysql -e 'CREATE DATABASE $DATABASE_NAME;'" - echo " mysql $DATABASE_NAME < $output_file" + echo " mysql $DATABASE_NAME < '$output_file'" echo "" press_enter