feat : script de reconstruction de bdd
This commit is contained in:
@@ -92,8 +92,23 @@ exec > >(tee -a "$LOG_FILE") 2>&1
|
||||
|
||||
log() { echo "---- $(date +'%Y-%m-%d %H:%M:%S') ---- $*"; }
|
||||
|
||||
require_cmd() {
|
||||
command -v "$1" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
export PGPASSWORD
|
||||
|
||||
#######################################
|
||||
# Vérification dépendances minimales
|
||||
#######################################
|
||||
|
||||
for cmd in ssh scp curl jq pg_dump pg_dumpall; do
|
||||
require_cmd "$cmd" || {
|
||||
echo "ERROR: commande manquante : $cmd" >&2
|
||||
exit 1
|
||||
}
|
||||
done
|
||||
|
||||
#######################################
|
||||
# Configuration Discord
|
||||
#######################################
|
||||
@@ -122,11 +137,14 @@ discord_send() {
|
||||
#######################################
|
||||
|
||||
discord_msg_global_ok() {
|
||||
local msg="**BACKUP BDD ${ENV_NAME} 🟢**\n"
|
||||
msg+="Name: ${BACKUP_DIR_NAME}\n"
|
||||
msg+="Dumps transfer: ✅\n"
|
||||
msg+="Users transfer: ✅"
|
||||
|
||||
local msg
|
||||
msg="$(cat <<EOF
|
||||
**BACKUP BDD ${ENV_NAME} 🟢**
|
||||
Name: ${BACKUP_DIR_NAME}
|
||||
Dumps transfer: ✅
|
||||
Users transfer: ✅
|
||||
EOF
|
||||
)"
|
||||
discord_send "$msg"
|
||||
}
|
||||
|
||||
@@ -135,9 +153,12 @@ discord_msg_global_ok() {
|
||||
#######################################
|
||||
|
||||
discord_msg_users_ok_simple() {
|
||||
local msg="**BACKUP BDD ${ENV_NAME} 🟢**\n"
|
||||
msg+="Users backup validé"
|
||||
|
||||
local msg
|
||||
msg="$(cat <<EOF
|
||||
**BACKUP BDD ${ENV_NAME} 🟢**
|
||||
Users backup validé
|
||||
EOF
|
||||
)"
|
||||
discord_send "$msg"
|
||||
}
|
||||
|
||||
@@ -150,12 +171,25 @@ discord_msg_users_error() {
|
||||
export_disp=$([[ -n "$export_ok" ]] && echo "✅" || echo "❌")
|
||||
transfer_disp=$([[ -n "$transfer_ok" ]] && echo "✅" || echo "❌")
|
||||
|
||||
local msg="**${DISCORD_PING} BACKUP BDD ${ENV_NAME} 🔴**\n"
|
||||
msg+="Name: ${BACKUP_DIR_NAME}\n"
|
||||
msg+="Users export: ${export_disp}\n"
|
||||
msg+="Users transfer: ${transfer_disp}"
|
||||
|
||||
[[ -n "$details" ]] && msg+="\nDetails: ${details}"
|
||||
local msg
|
||||
if [[ -n "$details" ]]; then
|
||||
msg="$(cat <<EOF
|
||||
**${DISCORD_PING} BACKUP BDD ${ENV_NAME} 🔴**
|
||||
Name: ${BACKUP_DIR_NAME}
|
||||
Users export: ${export_disp}
|
||||
Users transfer: ${transfer_disp}
|
||||
Details: ${details}
|
||||
EOF
|
||||
)"
|
||||
else
|
||||
msg="$(cat <<EOF
|
||||
**${DISCORD_PING} BACKUP BDD ${ENV_NAME} 🔴**
|
||||
Name: ${BACKUP_DIR_NAME}
|
||||
Users export: ${export_disp}
|
||||
Users transfer: ${transfer_disp}
|
||||
EOF
|
||||
)"
|
||||
fi
|
||||
|
||||
discord_send "$msg"
|
||||
}
|
||||
@@ -166,9 +200,12 @@ discord_msg_users_error() {
|
||||
|
||||
discord_msg_db_ok_simple() {
|
||||
local db="$1"
|
||||
local msg="**BACKUP BDD ${ENV_NAME} 🟢**\n"
|
||||
msg+="Backup validé : ${db}"
|
||||
|
||||
local msg
|
||||
msg="$(cat <<EOF
|
||||
**BACKUP BDD ${ENV_NAME} 🟢**
|
||||
Backup validé : ${db}
|
||||
EOF
|
||||
)"
|
||||
discord_send "$msg"
|
||||
}
|
||||
|
||||
@@ -182,13 +219,27 @@ discord_msg_db_error() {
|
||||
dump_disp=$([[ -n "$dump_ok" ]] && echo "✅" || echo "❌")
|
||||
transfer_disp=$([[ -n "$transfer_ok" ]] && echo "✅" || echo "❌")
|
||||
|
||||
local msg="**${DISCORD_PING} BACKUP BDD ${ENV_NAME} 🔴**\n"
|
||||
msg+="Name: ${BACKUP_DIR_NAME}\n"
|
||||
msg+="Database: ${db}\n"
|
||||
msg+="Dump: ${dump_disp}\n"
|
||||
msg+="Transfer: ${transfer_disp}"
|
||||
|
||||
[[ -n "$details" ]] && msg+="\nDetails: ${details}"
|
||||
local msg
|
||||
if [[ -n "$details" ]]; then
|
||||
msg="$(cat <<EOF
|
||||
**${DISCORD_PING} BACKUP BDD ${ENV_NAME} 🔴**
|
||||
Name: ${BACKUP_DIR_NAME}
|
||||
Database: ${db}
|
||||
Dump: ${dump_disp}
|
||||
Transfer: ${transfer_disp}
|
||||
Details: ${details}
|
||||
EOF
|
||||
)"
|
||||
else
|
||||
msg="$(cat <<EOF
|
||||
**${DISCORD_PING} BACKUP BDD ${ENV_NAME} 🔴**
|
||||
Name: ${BACKUP_DIR_NAME}
|
||||
Database: ${db}
|
||||
Dump: ${dump_disp}
|
||||
Transfer: ${transfer_disp}
|
||||
EOF
|
||||
)"
|
||||
fi
|
||||
|
||||
discord_send "$msg"
|
||||
}
|
||||
@@ -220,7 +271,7 @@ if ! mkdir "$LOCK_DIR" 2>/dev/null; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
trap 'rm -rf "$LOCK_DIR"' EXIT
|
||||
trap 'rm -rf "$LOCK_DIR" "$TMP_DIR"' EXIT
|
||||
|
||||
#######################################
|
||||
# Préparation du dossier distant
|
||||
@@ -240,13 +291,18 @@ fi
|
||||
# Export des rôles PostgreSQL
|
||||
#######################################
|
||||
|
||||
ROLES_FILE="${TMP_DIR}/user_${TS}.dump"
|
||||
ROLES_FILE="${TMP_DIR}/user_${TS}.sql"
|
||||
|
||||
set +e
|
||||
|
||||
psql -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" -d postgres -Atq <<'SQL' > "$ROLES_FILE"
|
||||
SELECT rolname FROM pg_roles WHERE rolname !~ '^pg_';
|
||||
SQL
|
||||
log "Export des rôles PostgreSQL"
|
||||
|
||||
pg_dumpall \
|
||||
-h "$PGHOST" \
|
||||
-p "$PGPORT" \
|
||||
-U "$PGUSER" \
|
||||
--globals-only \
|
||||
> "$ROLES_FILE"
|
||||
|
||||
RET=$?
|
||||
|
||||
@@ -254,18 +310,24 @@ if [[ $RET -ne 0 ]]; then
|
||||
USERS_OK=
|
||||
USERS_EXPORT_OK=
|
||||
USERS_DETAILS="roles export failed"
|
||||
else
|
||||
log "Export des rôles OK : $ROLES_FILE"
|
||||
fi
|
||||
|
||||
scp "${SSH_OPTS[@]}" "$ROLES_FILE" "$IA_SSH:${REMOTE_DIR}/user/"
|
||||
RET=$?
|
||||
if [[ -n "${USERS_EXPORT_OK:-}" ]]; then
|
||||
scp "${SSH_OPTS[@]}" "$ROLES_FILE" "$IA_SSH:${REMOTE_DIR}/user/"
|
||||
RET=$?
|
||||
|
||||
if [[ $RET -ne 0 ]]; then
|
||||
USERS_OK=
|
||||
USERS_TRANSFER_OK=
|
||||
if [[ -n "$USERS_DETAILS" ]]; then
|
||||
USERS_DETAILS+=" | roles transfer failed"
|
||||
if [[ $RET -ne 0 ]]; then
|
||||
USERS_OK=
|
||||
USERS_TRANSFER_OK=
|
||||
if [[ -n "$USERS_DETAILS" ]]; then
|
||||
USERS_DETAILS+=" | roles transfer failed"
|
||||
else
|
||||
USERS_DETAILS="roles transfer failed"
|
||||
fi
|
||||
else
|
||||
USERS_DETAILS="roles transfer failed"
|
||||
log "Transfert des rôles OK"
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -317,11 +379,13 @@ log "Starting remote rotation: delete backups older than ${RETENTION_DAYS} days"
|
||||
|
||||
set +e
|
||||
|
||||
ssh "${SSH_OPTS[@]}" "$IA_SSH" "find '${REMOTE_DIR}/user' -type f -name 'user_*.dump' -mtime +${RETENTION_DAYS} -delete"
|
||||
ssh "${SSH_OPTS[@]}" "$IA_SSH" "find '${REMOTE_DIR}/user' -type f -name 'user_*.sql' -mtime +${RETENTION_DAYS} -delete"
|
||||
RET=$?
|
||||
|
||||
if [[ $RET -ne 0 ]]; then
|
||||
log "ERROR: remote rotation failed for users"
|
||||
else
|
||||
log "Remote rotation OK for users"
|
||||
fi
|
||||
|
||||
for DB in "${DBS_ARRAY[@]}"; do
|
||||
|
||||
Reference in New Issue
Block a user