diff --git a/scripts/da-integration/alt_mysql_restore_payload.sh b/scripts/da-integration/alt_mysql_restore_payload.sh index 759a591..3f97c42 100644 --- a/scripts/da-integration/alt_mysql_restore_payload.sh +++ b/scripts/da-integration/alt_mysql_restore_payload.sh @@ -9,8 +9,6 @@ LOG_FILE="${DA_ALT_MYSQL_RESTORE_LOG:-$PLUGIN_DIR/data/logs/da-restore.log}" DA_USER="" PAYLOAD_DIR="" OVERWRITE_POLICY="" -RESTORE_ROLLBACK_FILE="" -RESTORE_ROLLBACK_CREATED=0 mkdir -p "$(dirname "$LOG_FILE")" @@ -132,57 +130,6 @@ import_gzip_sql() { mysql_exec "$database" < "$file" } -cleanup_restore_rollback() { - if [ -n "${RESTORE_ROLLBACK_FILE:-}" ] && [ -f "$RESTORE_ROLLBACK_FILE" ]; then - rm -f "$RESTORE_ROLLBACK_FILE" - fi - RESTORE_ROLLBACK_FILE="" - RESTORE_ROLLBACK_CREATED=0 -} - -backup_alt_database_for_rollback() { - local db="$1" - cleanup_restore_rollback - RESTORE_ROLLBACK_FILE="$(mktemp)" - - if [ -z "$(mysql_exec mysql -Nse "SELECT 1 FROM information_schema.SCHEMATA WHERE SCHEMA_NAME='$(mysql_escape_literal "$db")' LIMIT 1" 2>>"$LOG_FILE" || true)" ]; then - cleanup_restore_rollback - return 0 - fi - - log "creating rollback dump: $db" - if mysqldump_exec \ - --single-transaction \ - --quick \ - --skip-lock-tables \ - --routines \ - --triggers \ - --events \ - --default-character-set=utf8mb4 \ - "$db" > "$RESTORE_ROLLBACK_FILE" 2>>"$LOG_FILE"; then - RESTORE_ROLLBACK_CREATED=1 - return 0 - fi - - cleanup_restore_rollback - return 1 -} - -restore_alt_database_from_rollback() { - local db="$1" - if [ "$RESTORE_ROLLBACK_CREATED" -ne 1 ] || [ -z "${RESTORE_ROLLBACK_FILE:-}" ] || [ ! -r "$RESTORE_ROLLBACK_FILE" ]; then - return 0 - fi - - log "restoring rollback dump: $db" - mysql_exec mysql -e "DROP DATABASE IF EXISTS $(mysql_quote_identifier "$db");" >> "$LOG_FILE" 2>&1 || true - mysql_exec mysql -e "CREATE DATABASE $(mysql_quote_identifier "$db") CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" >> "$LOG_FILE" 2>&1 || true - mysql_exec "$db" < "$RESTORE_ROLLBACK_FILE" >> "$LOG_FILE" 2>&1 || { - log "ERROR: rollback restore failed for $db" - return 1 - } -} - trap cleanup_restore_rollback INT TERM EXIT metadata_cleanup_for_user() { diff --git a/scripts/da-integration/da_restore_native_staging_to_alt_mysql.sh b/scripts/da-integration/da_restore_native_staging_to_alt_mysql.sh index cf09251..3dc54a7 100644 --- a/scripts/da-integration/da_restore_native_staging_to_alt_mysql.sh +++ b/scripts/da-integration/da_restore_native_staging_to_alt_mysql.sh @@ -10,8 +10,6 @@ DA_USER="" NATIVE_MY_CNF="${NATIVE_MY_CNF:-/usr/local/directadmin/conf/my.cnf}" OVERWRITE_POLICY="" CLEANUP_POLICY="" -RESTORE_ROLLBACK_FILE="" -RESTORE_ROLLBACK_CREATED=0 mkdir -p "$(dirname "$LOG_FILE")" @@ -155,57 +153,6 @@ apply_grants_to_alt() { done < <(native_show_grants "$user" "$host") } -cleanup_restore_rollback() { - if [ -n "${RESTORE_ROLLBACK_FILE:-}" ] && [ -f "$RESTORE_ROLLBACK_FILE" ]; then - rm -f "$RESTORE_ROLLBACK_FILE" - fi - RESTORE_ROLLBACK_FILE="" - RESTORE_ROLLBACK_CREATED=0 -} - -backup_alt_database_for_rollback() { - local db="$1" - cleanup_restore_rollback - RESTORE_ROLLBACK_FILE="$(mktemp)" - - if [ -z "$(mysql_exec mysql -Nse "SELECT 1 FROM information_schema.SCHEMATA WHERE SCHEMA_NAME='$(mysql_escape_literal "$db")' LIMIT 1" 2>>"$LOG_FILE" || true)" ]; then - cleanup_restore_rollback - return 0 - fi - - log "creating rollback dump: $db" - if mysqldump_exec \ - --single-transaction \ - --quick \ - --skip-lock-tables \ - --routines \ - --triggers \ - --events \ - --default-character-set=utf8mb4 \ - "$db" > "$RESTORE_ROLLBACK_FILE" 2>>"$LOG_FILE"; then - RESTORE_ROLLBACK_CREATED=1 - return 0 - fi - - cleanup_restore_rollback - return 1 -} - -restore_alt_database_from_rollback() { - local db="$1" - if [ "$RESTORE_ROLLBACK_CREATED" -ne 1 ] || [ -z "${RESTORE_ROLLBACK_FILE:-}" ] || [ ! -r "$RESTORE_ROLLBACK_FILE" ]; then - return 0 - fi - - log "restoring rollback dump: $db" - mysql_exec mysql -e "DROP DATABASE IF EXISTS $(mysql_quote_identifier "$db");" >> "$LOG_FILE" 2>&1 || true - mysql_exec mysql -e "CREATE DATABASE $(mysql_quote_identifier "$db") CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" >> "$LOG_FILE" 2>&1 || true - mysql_exec "$db" < "$RESTORE_ROLLBACK_FILE" >> "$LOG_FILE" 2>&1 || { - log "ERROR: rollback restore failed for $db" - return 1 - } -} - trap cleanup_restore_rollback INT TERM EXIT db_privilege_profile() { diff --git a/scripts/setup/mysql_common.sh b/scripts/setup/mysql_common.sh index fad8e4a..6d5e717 100755 --- a/scripts/setup/mysql_common.sh +++ b/scripts/setup/mysql_common.sh @@ -487,3 +487,54 @@ mysql_restore_stream() { fi mysql_exec "$database" < "$file" } + +RESTORE_ROLLBACK_FILE="" +RESTORE_ROLLBACK_CREATED=0 + +cleanup_restore_rollback() { + if [ -n "${RESTORE_ROLLBACK_FILE:-}" ] && [ -f "$RESTORE_ROLLBACK_FILE" ]; then + rm -f "$RESTORE_ROLLBACK_FILE" + fi + RESTORE_ROLLBACK_FILE="" + RESTORE_ROLLBACK_CREATED=0 +} + +backup_alt_database_for_rollback() { + local db="$1" + cleanup_restore_rollback + RESTORE_ROLLBACK_FILE="$(mktemp)" + + if [ -z "$(mysql_exec mysql -Nse "SELECT 1 FROM information_schema.SCHEMATA WHERE SCHEMA_NAME='$(mysql_escape_literal "$db")' LIMIT 1" 2>>"${LOG_FILE:-/dev/null}" || true)" ]; then + cleanup_restore_rollback + return 0 + fi + + if mysqldump_exec \ + --single-transaction \ + --quick \ + --skip-lock-tables \ + --routines \ + --triggers \ + --events \ + --default-character-set=utf8mb4 \ + "$db" > "$RESTORE_ROLLBACK_FILE" 2>>"${LOG_FILE:-/dev/null}"; then + RESTORE_ROLLBACK_CREATED=1 + return 0 + fi + + cleanup_restore_rollback + return 1 +} + +restore_alt_database_from_rollback() { + local db="$1" + if [ "$RESTORE_ROLLBACK_CREATED" -ne 1 ] || [ -z "${RESTORE_ROLLBACK_FILE:-}" ] || [ ! -r "$RESTORE_ROLLBACK_FILE" ]; then + return 0 + fi + + mysql_exec mysql -e "DROP DATABASE IF EXISTS $(mysql_quote_identifier "$db");" >> "${LOG_FILE:-/dev/null}" 2>&1 || true + mysql_exec mysql -e "CREATE DATABASE $(mysql_quote_identifier "$db") CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" >> "${LOG_FILE:-/dev/null}" 2>&1 || true + mysql_exec "$db" < "$RESTORE_ROLLBACK_FILE" >> "${LOG_FILE:-/dev/null}" 2>&1 || { + return 1 + } +}