uprgade-keycloak.sh: backup also concerning postgresql/mysql database.

This commit is contained in:
2026-04-06 23:17:45 +02:00
parent da9ec5d8d2
commit e5a6b3f6f6

View File

@@ -294,13 +294,26 @@ if [[ -n "$DB_TYPE" ]] ; then
DEFAULT_DB_TYPE=mysql
else
fatal "Wrong or empty Database Type (DB_TYPE) - must be 'mysql' or 'pgsql'."
DEFAULT_DB_TYPE=pgsql
#fatal "Wrong or empty Database Type (DB_TYPE) - must be 'mysql' or 'pgsql'."
fi
fi
[[ -n "${DB_NAME}" ]] && DEFAULT_DB_NAME="${DB_NAME}"
[[ -n "${DB_USER}" ]] && DEFAULT_DB_NAME="${DB_USER}"
[[ -n "${DB_PASS}" ]] && DEFAULT_DB_PASS="${DB_PASS}"
[[ -n "${DB_USER}" ]] && DEFAULT_DB_USER="${DB_USER}"
#if [[ -n "${DB_PASS}" ]] ; then
# DEFAULT_DB_PASS="${DB_PASS}"
#else
# fatal "No Password given for ${DB_TYPE} database ${DEFAULT_DB_NAME}"
#fi
if [[ -n "${DB_PASS}" ]] ; then
DEFAULT_DB_PASS="${DB_PASS}"
else
DEFAULT_DB_PASS=""
fi
[[ -n "${KEYCLOAK_USER}" ]] && DEFAULT_KEYCLOAK_USER="${KEYCLOAK_USER}"
if [[ -n "${KEYCLOAK_GROUP}" ]]; then
@@ -402,6 +415,103 @@ fi
HOSTNAME="${FQHN_HOSTNAME%%.*}"
DB_TYPE=
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "Specify the database type for the Keycloak database."
echo ""
echo " Accepted values: pgsql, postgresql, postgres (for PostgreSQL)"
echo " mysql (for MySQL)"
echo ""
while [[ "X${DB_TYPE}" = "X" ]]; do
echononl "Database type [${DEFAULT_DB_TYPE}]: "
read DB_TYPE
if [[ "X${DB_TYPE}" = "X" ]]; then
DB_TYPE="${DEFAULT_DB_TYPE}"
fi
if [[ "${DB_TYPE,,}" = "postgres" ]] || [[ "${DB_TYPE,,}" = "postgresql" ]] || [[ "${DB_TYPE,,}" = "pgsql" ]] || [[ "${DB_TYPE,,}" = "psql" ]] ; then
DB_TYPE=pgsql
elif [[ "${DB_TYPE,,}" = "mysql" ]] ; then
DB_TYPE=mysql
else
echo -e "\n\t\033[33m\033[1mInvalid database type '${DB_TYPE}'! Use 'pgsql' or 'mysql'.\033[m\n"
DB_TYPE=""
fi
done
DB_NAME=
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "Specify the database name for the Keycloak database."
echo ""
while [[ "X${DB_NAME}" = "X" ]]; do
echononl "Database name [${DEFAULT_DB_NAME}]: "
read DB_NAME
if [[ "X${DB_NAME}" = "X" ]]; then
DB_NAME="${DEFAULT_DB_NAME}"
fi
done
DB_NAME=
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "Specify the database name for the Keycloak database."
echo ""
while [[ "X${DB_NAME}" = "X" ]]; do
echononl "Database name [${DEFAULT_DB_NAME}]: "
read DB_NAME
if [[ "X${DB_NAME}" = "X" ]]; then
DB_NAME="${DEFAULT_DB_NAME}"
fi
done
DB_USER=
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "Specify the database user for the Keycloak database."
echo ""
while [[ "X${DB_USER}" = "X" ]]; do
echononl "Database user [${DEFAULT_DB_USER}]: "
read DB_USER
if [[ "X${DB_USER}" = "X" ]]; then
DB_USER="${DEFAULT_DB_USER}"
fi
done
DB_PASS=
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "Specify the database password for the Keycloak database."
echo ""
while [[ "X${DB_PASS}" = "X" ]]; do
echononl "Database password"
if [[ -n "${DEFAULT_DB_PASS}" ]]; then
echo -n " [current value from config]: ****************"
else
echo -n ": "
fi
read -s DB_PASS
echo ""
if [[ "X${DB_PASS}" = "X" ]]; then
if [[ -n "${DEFAULT_DB_PASS}" ]]; then
DB_PASS="${DEFAULT_DB_PASS}"
else
echo -e "\n\t\033[33m\033[1mA database password is required!\033[m\n"
fi
fi
done
#DB_BACKUP_DIR="${working_dir}/backups"
DB_BACKUP_DIR="$(dirname "${KEYCLOAK_INSTALL_DIR}")"
DB_DUMP_FILE="${DB_BACKUP_DIR}/keycloak_db_${backup_date}.sql.gz"
echo ""
echo ""
echo -e "\t\033[32mStart upgrade script for Keycloak Service with the following parameters\033[m"
@@ -420,6 +530,13 @@ echo ""
echo -e "\tKeycloak user...................: ${KEYCLOAK_USER}"
echo -e "\tKeycloak group..................: ${KEYCLOAK_GROUP}"
echo ""
echo -e "\tKeycloak database type..........: ${DB_TYPE}"
echo -e "\tKeycloak database name..........: ${DB_NAME}"
echo -e "\tKeycloak database user..........: ${DB_USER}"
echo -e "\tKeycloak database password......: ${DB_PASS}"
echo ""
echo -e "\tdatabase dump file..............: ${DB_DUMP_FILE}"
echo ""
echo -e "\tKeycloak base install dir.......: ${KEYCLOAK_BASE_INSTALL_PATH}"
echo -e "\tKeycloak install dir............: ${KEYCLOAK_INSTALL_DIR}"
echo ""
@@ -557,6 +674,69 @@ fi
blank_line
echo
echo -e "\033[37m\033[1mBackup PostgreSQL database before upgrade..\033[m"
echo
echononl "Create backup directory '${DB_BACKUP_DIR}' .."
mkdir -p "${DB_BACKUP_DIR}" > "$log_file" 2>&1
if [[ $? -ne 0 ]]; then
echo_failed
error "$(cat "$log_file")"
fatal "Cannot create backup directory '${DB_BACKUP_DIR}'"
else
echo_ok
fi
if [[ "${DB_TYPE}" = "pgsql" ]] ; then
echononl "Dump PostgreSQL database '${DB_NAME}' to '$(basename "${DB_DUMP_FILE}")' .."
PGPASSWORD="${DB_PASS}" pg_dump \
-h localhost \
-p 5432 \
-U "${DB_USER}" \
-d "${DB_NAME}" \
--format=plain \
--no-password \
2> "$log_file" \
| gzip > "${DB_DUMP_FILE}"
if [[ ${PIPESTATUS[0]} -ne 0 ]]; then
echo_failed
error "$(cat "$log_file")"
fatal "PostgreSQL backup failed! Aborting upgrade."
else
echo_ok
info "Database backup: ${DB_DUMP_FILE} ($(du -sh "${DB_DUMP_FILE}" | cut -f1))"
fi
elif [[ "${DB_TYPE}" = "mysql" ]] ; then
echononl "Dump MySQL database '${DB_NAME}' to '$(basename "${DB_DUMP_FILE}")' .."
mysqldump \
--host=localhost \
--user="${DB_USER}" \
--password="${DB_PASS}" \
--single-transaction \
--routines \
--triggers \
"${DB_NAME}" \
2> "$log_file" \
| gzip > "${DB_DUMP_FILE}"
if [[ ${PIPESTATUS[0]} -ne 0 ]]; then
echo_failed
error "$(cat "$log_file")"
fatal "MySQL backup failed! Aborting upgrade."
else
echo_ok
info "Database backup: ${DB_DUMP_FILE} ($(du -sh "${DB_DUMP_FILE}" | cut -f1))"
fi
fi
blank_line
echo
echo -e "\033[37m\033[1mInstalling Keycloak Service..\033[m"
echo