diff --git a/modules/backup/mysql-restore-to-sql.sh b/modules/backup/mysql-restore-to-sql.sh index 417c212..e8a3410 100755 --- a/modules/backup/mysql-restore-to-sql.sh +++ b/modules/backup/mysql-restore-to-sql.sh @@ -1140,7 +1140,7 @@ validate_sql_dump() { print_info " Comparing dump with source database..." # Get table count from source - local source_tables=$(mysql -h localhost -S "$datadir/socket.mysql" -NBe "SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA='$dbname';" 2>/dev/null || echo "0") + local source_tables=$(mysql -h localhost -S "$datadir/socket.mysql" -NBe "SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA=\`$dbname\`;" 2>/dev/null || echo "0") if [ -n "$source_tables" ] && [ "$source_tables" -gt 0 ]; then if [ "$table_count" -eq "$source_tables" ]; then @@ -1151,7 +1151,7 @@ validate_sql_dump() { fi # Get approximate data size from source - local source_size=$(mysql -h localhost -S "$datadir/socket.mysql" -NBe "SELECT ROUND(SUM(data_length + index_length)/1024/1024, 2) FROM information_schema.TABLES WHERE TABLE_SCHEMA='$dbname';" 2>/dev/null || echo "0") + local source_size=$(mysql -h localhost -S "$datadir/socket.mysql" -NBe "SELECT ROUND(SUM(data_length + index_length)/1024/1024, 2) FROM information_schema.TABLES WHERE TABLE_SCHEMA=\`$dbname\`;" 2>/dev/null || echo "0") local dump_size_mb=$(awk "BEGIN {printf \"%.2f\", $file_size/1024/1024}") if [ -n "$source_size" ]; then @@ -1188,14 +1188,14 @@ dump_database() { print_warning "This may take some time for large databases..." # Check if database exists in second instance - local db_check=$(mysql -h localhost -S "$datadir/socket.mysql" -NBe "SHOW DATABASES LIKE '$dbname';" 2>/dev/null) + local db_check=$(mysql -h localhost -S "$datadir/socket.mysql" -NBe "SHOW DATABASES LIKE \`$dbname\`;" 2>/dev/null) if [ -z "$db_check" ]; then print_error "Database '$dbname' not found in second instance" return 1 fi # Get table count before dump - local table_count=$(mysql -h localhost -S "$datadir/socket.mysql" -NBe "SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA='$dbname';" 2>/dev/null || echo "0") + local table_count=$(mysql -h localhost -S "$datadir/socket.mysql" -NBe "SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA=\`$dbname\`;" 2>/dev/null || echo "0") print_info "Database contains $table_count tables" # Perform dump @@ -1619,16 +1619,23 @@ step4_configure_options() { echo -n "Select recovery mode (0-6, or press Enter for 0): " read -r recovery_mode - if [ -n "$recovery_mode" ] && [ "$recovery_mode" != "0" ]; then - FORCE_RECOVERY="$recovery_mode" - print_warning "Will use --innodb-force-recovery=$FORCE_RECOVERY" - echo "" - - # Show force recovery warnings and get confirmation - if ! warn_force_recovery "$FORCE_RECOVERY"; then - echo "" - print_info "Recovery mode cancelled. Returning to default (level 0)." + if [ -n "$recovery_mode" ]; then + # CRITICAL: Validate recovery mode is numeric and in valid range (0-6) + if ! { [ "$recovery_mode" -ge 0 ] && [ "$recovery_mode" -le 6 ]; } 2>/dev/null; then + print_error "Invalid recovery mode: $recovery_mode" + print_warning "Recovery mode must be numeric value between 0 and 6" FORCE_RECOVERY="" + elif [ "$recovery_mode" != "0" ]; then + FORCE_RECOVERY="$recovery_mode" + print_warning "Will use --innodb-force-recovery=$FORCE_RECOVERY" + echo "" + + # Show force recovery warnings and get confirmation + if ! warn_force_recovery "$FORCE_RECOVERY"; then + echo "" + print_info "Recovery mode cancelled. Returning to default (level 0)." + FORCE_RECOVERY="" + fi fi fi