Chuyển tới nội dung chính

🔄 Restore Database PostgreSQL

📋 Chuẩn Bị

1. Mount Ổ Backup từ NAS

# Tạo thư mục mount point
sudo mkdir -p /data/backup

# Mount ổ backup từ NAS sử dụng CIFS
sudo mount -t cifs -o username=YOUR_USERNAME,password=YOUR_PASSWORD,vers=2.0 //NAS_IP/Backup_Path /data/backup
mẹo

Thay thế YOUR_USERNAME, YOUR_PASSWORD, NAS_IPBackup_Path với thông tin thực tế của bạn

2. Giải Nén File Backup (nếu cần)

# Giải nén file .gz
gzip -d your_backup_file.sql.gz

🔄 Thực Hiện Restore

1. Đổi Mật Khẩu PostgreSQL (nếu cần)

# Đăng nhập với user postgres
sudo -i -u postgres
psql

# Đổi mật khẩu
ALTER USER postgres WITH PASSWORD 'your_new_password';

2. Restore Database

a. Đối với file backup định dạng nhị phân (.dump)

# Restore toàn bộ database
pg_restore -U your_username -d database_name backup_file.dump

# Restore một bảng cụ thể
pg_restore -h your_host -U your_username -d database_name -t table_name backup_file.dump

b. Đối với file backup định dạng SQL

psql -U your_username -d database_name -f backup_file.sql

🔔 Tích Hợp Thông Báo Telegram

1. Script Restore với Thông Báo

#!/bin/bash

# Cấu hình Telegram
BOT_TOKEN="your_bot_token"
CHAT_ID="your_chat_id"

# Hàm gửi thông báo Telegram
send_telegram() {
curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" \
-d chat_id="$CHAT_ID" \
-d text="$1" \
-d parse_mode="HTML"
}

# Thông số restore
DB_NAME="your_database"
DB_USER="your_username"
BACKUP_FILE="/path/to/backup_file"

# Ghi log thời gian bắt đầu
START_TIME=$(date +%s)

# Gửi thông báo bắt đầu
send_telegram "🔄 <b>Bắt đầu restore database</b>
📊 Database: $DB_NAME
📂 File backup: $(basename $BACKUP_FILE)
⏱ Thời gian bắt đầu: $(date '+%Y-%m-%d %H:%M:%S')"

# Thực hiện restore và lưu log
LOG_FILE="/var/log/postgresql/restore_$(date +%Y%m%d_%H%M%S).log"

if [[ $BACKUP_FILE == *.dump ]]; then
if pg_restore -U $DB_USER -d $DB_NAME $BACKUP_FILE 2>&1 | tee $LOG_FILE; then
STATUS="✅ Thành công"
else
STATUS="❌ Thất bại"
fi
else
if psql -U $DB_USER -d $DB_NAME -f $BACKUP_FILE 2>&1 | tee $LOG_FILE; then
STATUS="✅ Thành công"
else
STATUS="❌ Thất bại"
fi
fi

# Tính thời gian thực hiện
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
HOURS=$((DURATION / 3600))
MINUTES=$(( (DURATION % 3600) / 60 ))
SECONDS=$((DURATION % 60))

# Gửi thông báo kết quả
send_telegram "🏁 <b>Kết thúc restore database</b>
📊 Database: $DB_NAME
🔄 Trạng thái: $STATUS
⏱ Thời gian thực hiện: ${HOURS}h ${MINUTES}m ${SECONDS}s
📝 Log file: $LOG_FILE"
mẹo

Tham khảo hướng dẫn tạo Telegram Bot tại Phát Triển Bot Telegram

⚠️ Lưu Ý Quan Trọng

  1. Backup Dữ Liệu:

    • Luôn backup database hiện tại trước khi restore
    • Kiểm tra tính toàn vẹn của file backup
  2. Kiểm Tra Quyền:

    • Đảm bảo user có đủ quyền truy cập và thực thi
    • Kiểm tra quyền trên thư mục và file backup
  3. Dung Lượng:

    • Kiểm tra không gian đĩa trước khi restore
    • Dự phòng thêm 20-30% dung lượng cho quá trình restore
  4. Phiên Bản PostgreSQL:

    • Đảm bảo phiên bản PostgreSQL tương thích
    • Kiểm tra các extension cần thiết đã được cài đặt

🔍 Xử Lý Sự Cố

1. Lỗi Kết Nối

  • Kiểm tra thông tin xác thực PostgreSQL
  • Xác nhận PostgreSQL đang chạy
  • Kiểm tra cấu hình pg_hba.conf
# Kiểm tra trạng thái service
systemctl status postgresql

# Kiểm tra log
tail -f /var/log/postgresql/postgresql-*.log

2. Lỗi Restore

  • Kiểm tra log PostgreSQL
  • Xác nhận định dạng file backup
  • Kiểm tra quyền của user
# Kiểm tra quyền user
\du

# Kiểm tra dung lượng
df -h

3. Lỗi Mount NAS

  • Kiểm tra kết nối mạng
  • Xác nhận thông tin xác thực
  • Kiểm tra phiên bản SMB/CIFS
# Kiểm tra kết nối
ping NAS_IP

# Kiểm tra mount point
df -h
mount | grep cifs

📚 Tài Liệu Tham Khảo