feat : script de reconstruction de bdd

This commit is contained in:
AkiNoKure
2026-03-12 09:49:35 +01:00
parent fabc9be4d4
commit e221e82108
3 changed files with 411 additions and 409 deletions

View File

@@ -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