refactor: share restore rollback helpers via mysql_common.sh
This commit is contained in:
@@ -9,8 +9,6 @@ LOG_FILE="${DA_ALT_MYSQL_RESTORE_LOG:-$PLUGIN_DIR/data/logs/da-restore.log}"
|
|||||||
DA_USER=""
|
DA_USER=""
|
||||||
PAYLOAD_DIR=""
|
PAYLOAD_DIR=""
|
||||||
OVERWRITE_POLICY=""
|
OVERWRITE_POLICY=""
|
||||||
RESTORE_ROLLBACK_FILE=""
|
|
||||||
RESTORE_ROLLBACK_CREATED=0
|
|
||||||
|
|
||||||
mkdir -p "$(dirname "$LOG_FILE")"
|
mkdir -p "$(dirname "$LOG_FILE")"
|
||||||
|
|
||||||
@@ -132,57 +130,6 @@ import_gzip_sql() {
|
|||||||
mysql_exec "$database" < "$file"
|
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
|
trap cleanup_restore_rollback INT TERM EXIT
|
||||||
|
|
||||||
metadata_cleanup_for_user() {
|
metadata_cleanup_for_user() {
|
||||||
|
|||||||
@@ -10,8 +10,6 @@ DA_USER=""
|
|||||||
NATIVE_MY_CNF="${NATIVE_MY_CNF:-/usr/local/directadmin/conf/my.cnf}"
|
NATIVE_MY_CNF="${NATIVE_MY_CNF:-/usr/local/directadmin/conf/my.cnf}"
|
||||||
OVERWRITE_POLICY=""
|
OVERWRITE_POLICY=""
|
||||||
CLEANUP_POLICY=""
|
CLEANUP_POLICY=""
|
||||||
RESTORE_ROLLBACK_FILE=""
|
|
||||||
RESTORE_ROLLBACK_CREATED=0
|
|
||||||
|
|
||||||
mkdir -p "$(dirname "$LOG_FILE")"
|
mkdir -p "$(dirname "$LOG_FILE")"
|
||||||
|
|
||||||
@@ -155,57 +153,6 @@ apply_grants_to_alt() {
|
|||||||
done < <(native_show_grants "$user" "$host")
|
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
|
trap cleanup_restore_rollback INT TERM EXIT
|
||||||
|
|
||||||
db_privilege_profile() {
|
db_privilege_profile() {
|
||||||
|
|||||||
@@ -487,3 +487,54 @@ mysql_restore_stream() {
|
|||||||
fi
|
fi
|
||||||
mysql_exec "$database" < "$file"
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user