Sau khi update n8n, mà lỡ có cái code nào đó không phù hợp với bản mới. Một là nâng cấp code, Hai là quay về quá khứ.
Hôm nay sẽ chia sẻ script quay về quá khứ, restore bản backup n8n (tạo từ script auto update n8n của mình nhé).
🎯 Đây là full script restore-n8n.sh
#!/bin/bash
# ========================
# Config
# ========================
BACKUP_FILE="$1" # File backup cần restore (.tar.gz)
VOLUME_NAME="n8n_data" # Tên volume cần restore vào
TEMP_CONTAINER="n8n-restore-temp" # Tên container tạm
TMP_DIR="/tmp/n8n_restore" # Thư mục tạm để giải nén
# ========================
# Bắt đầu
# ========================
if [ -z "$BACKUP_FILE" ]; then
echo "❗ Bạn phải truyền vào file backup (.tar.gz) để restore!"
echo "💬 Ví dụ: ./restore-n8n.sh /home/n8n/backups/n8n_backup_20240502-0945.tar.gz"
exit 1
fi
if [ ! -f "$BACKUP_FILE" ]; then
echo "❗ File backup không tồn tại: $BACKUP_FILE"
exit 1
fi
echo "🔄 Đang restore dữ liệu từ: $BACKUP_FILE"
echo "⏳ Step 1: Tạo container tạm để ghi dữ liệu vào volume..."
# Xóa container tạm nếu đã tồn tại
docker rm -f ${TEMP_CONTAINER} > /dev/null 2>&1 || true
# Tạo container tạm gắn với volume
docker run -d --name ${TEMP_CONTAINER} -v ${VOLUME_NAME}:/data busybox sleep 3600
# Tạo thư mục tạm
mkdir -p ${TMP_DIR}
cd ${TMP_DIR}
# Giải nén file backup
tar xzvf ${BACKUP_FILE}
echo "⏳ Step 2: Ghi đè dữ liệu vào volume..."
# Copy dữ liệu vào volume
docker cp data/. ${TEMP_CONTAINER}:/data/
# Dọn dẹp
docker rm -f ${TEMP_CONTAINER}
rm -rf ${TMP_DIR}
echo "🎉 Restore hoàn tất!"
📋 Hướng dẫn sử dụng:
# Tạo file:
nano /home/n8n/restore-n8n.sh
# Dán toàn bộ script trên vào.
# Cho phép chạy:
chmod +x /home/n8n/restore-n8n.sh
# Khi cần restore:
cd /home/n8n
./restore-n8n.sh /home/n8n/backups/n8n_backup_20240502-0945.tar.gz
(thay đúng đường dẫn file backup bạn muốn restore)
🧠 Sau khi restore xong:
Restart lại n8n để load dữ liệu mới:
docker compose up -d n8n
✅ n8n sẽ hoạt động như lúc backup.
🛡️ Ưu điểm:
- Không cần xóa volume, không cần rebuild.
- Backup và Restore chỉ chạy đúng trên volume
n8n_data
. - An toàn 100%, không đụng vào file hệ thống docker.
Chúc các bạn thực hiện thành công nhé