Enhance DB automation: Added conference export, absolute path restore logic, and automated multi-user credential resetting. Updated README and CHEATSHEET.
This commit is contained in:
@@ -18,6 +18,9 @@ if [ ! -f "$BACKUP_FILE" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Convert to absolute path for Docker volume mounting
|
||||
BACKUP_FILE_ABS=$(readlink -f "$BACKUP_FILE")
|
||||
|
||||
echo "--- Starting Aether Database Restore ---"
|
||||
|
||||
# 1. Stop MariaDB
|
||||
@@ -27,14 +30,17 @@ cd "${PROJECT_ROOT}" && docker compose stop mariadb
|
||||
# 2. Archive current data
|
||||
if [ -d "$MARIADB_DATA" ] && [ "$(ls -A $MARIADB_DATA)" ]; then
|
||||
echo ">>> Archiving current data..."
|
||||
mv "${MARIADB_DATA}" "${PROJECT_ROOT}/srv/mariadb_bak_${TIMESTAMP}"
|
||||
BACKUP_DIR="${PROJECT_ROOT}/srv/mariadb_bak_${TIMESTAMP}"
|
||||
mv "${MARIADB_DATA}" "${BACKUP_DIR}"
|
||||
# Fix ownership of archived data so host user can manage it
|
||||
docker run --rm -v "${BACKUP_DIR}":/bak alpine chown -R 1000:1000 /bak
|
||||
fi
|
||||
mkdir -p "${MARIADB_DATA}" "${RESTORE_TEMP}"
|
||||
|
||||
# 3. Extract and Prepare
|
||||
echo ">>> Running extraction and preparation..."
|
||||
docker run --rm --user 0 \
|
||||
-v "${BACKUP_FILE}":/backups/import.gz \
|
||||
-v "${BACKUP_FILE_ABS}":/backups/import.gz \
|
||||
-v "${RESTORE_TEMP}":/restore \
|
||||
-v "${PROJECT_ROOT}/scripts/restore_internal.sh":/restore.sh \
|
||||
mariadb:10.11 bash -c "export BACKUP_FILE=/backups/import.gz && bash /restore.sh"
|
||||
@@ -52,10 +58,19 @@ echo ">>> Fixing ownership (999:999)..."
|
||||
docker run --rm -v "${MARIADB_DATA}":/var/lib/mysql alpine chown -R 999:999 /var/lib/mysql
|
||||
|
||||
# 6. Start MariaDB in Maintenance Mode to reset password
|
||||
echo ">>> Resetting root password to match local .env..."
|
||||
echo ">>> Resetting passwords to match local .env..."
|
||||
docker run -d --name ae_mariadb_maint -v "${MARIADB_DATA}":/var/lib/mysql mariadb:10.11 --skip-grant-tables
|
||||
sleep 5
|
||||
docker exec ae_mariadb_maint mariadb -e "FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY '${AE_DB_PASSWORD}'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '${AE_DB_PASSWORD}' WITH GRANT OPTION; FLUSH PRIVILEGES;"
|
||||
# Maintenance SQL: Sets root password AND ensures app user exists with correct password/grants
|
||||
MAINT_SQL="FLUSH PRIVILEGES;
|
||||
ALTER USER 'root'@'localhost' IDENTIFIED BY '${AE_DB_ROOT_PASSWORD}';
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '${AE_DB_ROOT_PASSWORD}' WITH GRANT OPTION;
|
||||
CREATE USER IF NOT EXISTS '${AE_DB_USERNAME}'@'%' IDENTIFIED BY '${AE_DB_PASSWORD}';
|
||||
ALTER USER '${AE_DB_USERNAME}'@'%' IDENTIFIED BY '${AE_DB_PASSWORD}';
|
||||
GRANT ALL PRIVILEGES ON \`${AE_DB_NAME}\`.* TO '${AE_DB_USERNAME}'@'%';
|
||||
FLUSH PRIVILEGES;"
|
||||
|
||||
docker exec ae_mariadb_maint mariadb -e "$MAINT_SQL"
|
||||
docker stop ae_mariadb_maint && docker rm ae_mariadb_maint
|
||||
|
||||
# 7. Start MariaDB Normally
|
||||
|
||||
Reference in New Issue
Block a user