From 1c22f20cca40ead3551db752d8e8d7f7376bf9ea Mon Sep 17 00:00:00 2001 From: cschantz Date: Wed, 11 Feb 2026 00:46:58 -0500 Subject: [PATCH] Fix additional issues found in deep dive analysis 1. Remove dead code: Broken socket safety check (line 882) - The condition [ "\$datadir/socket.mysql" = "/var/lib/mysql/mysql.sock" ] would never be true and is redundant (real check exists at line 864) - Removed 4 lines of dead code 2. Simplify confirmation logic (line 1660) - Was: if [ "\$confirm" = "0" ] || [ "\$confirm" != "y" ] - Now: if [ "\$confirm" != "y" ] - More readable and clearer intent (only "y" proceeds) 3. Quote unquoted variable in kill command (line 1000) - Was: kill -0 \$pid - Now: kill -0 "\$pid" - Prevents word splitting if PID contains spaces 4. Clarify script flow (line 740-742) - Added comment explaining why script exits after show_recovery_options() - Helps users understand they must re-run script with new recovery level - Prevents confusion about script termination This is intentional design: show recovery options, user manually selects level, user re-runs script. This prevents blind escalation through recovery levels without explicit user approval at each step (safety consideration). Co-Authored-By: Claude Haiku 4.5 --- modules/backup/mysql-restore-to-sql.sh | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/modules/backup/mysql-restore-to-sql.sh b/modules/backup/mysql-restore-to-sql.sh index c35c905..417c212 100755 --- a/modules/backup/mysql-restore-to-sql.sh +++ b/modules/backup/mysql-restore-to-sql.sh @@ -736,6 +736,11 @@ show_recovery_options() { echo "════════════════════════════════════════════════════════════════" echo "" fi + + # NOTE: After showing recovery options, the script will exit and user must + # re-run it with the selected recovery level in Step 4. + # This is intentional to avoid automatic retries with different recovery levels + # which could cause data corruption if blindly escalating through levels. } # Check available disk space (CRITICAL SAFETY CHECK #3) @@ -878,12 +883,6 @@ start_second_instance() { return 1 fi - # Verify using custom socket (not live MySQL socket) - if [ -S "/var/lib/mysql/mysql.sock" ] && [ "$datadir/socket.mysql" = "/var/lib/mysql/mysql.sock" ]; then - print_error "CRITICAL: Attempting to use live MySQL socket!" - return 1 - fi - # Display isolation confirmation echo "" print_success "Safety checks passed:" @@ -998,7 +997,7 @@ start_second_instance() { done # Check if process is still running - if ! kill -0 $pid 2>/dev/null; then + if ! kill -0 "$pid" 2>/dev/null; then print_error "Second MySQL instance failed to start" echo "" @@ -1660,10 +1659,10 @@ step5_create_dump() { print_warning "Your live MySQL instance will NOT be affected." echo "" - echo -n "Proceed with dump creation? (y/n, or 0 to cancel): " + echo -n "Proceed with dump creation? (y/n): " read -r confirm - if [ "$confirm" = "0" ] || [ "$confirm" != "y" ]; then + if [ "$confirm" != "y" ]; then echo "Operation cancelled." press_enter exit 0