🔄 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
tip
Thay thế YOUR_USERNAME
, YOUR_PASSWORD
, NAS_IP
và Backup_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"
tip
Tham khảo hướng dẫn tạo Telegram Bot tại Phát Triển Bot Telegram
⚠️ Lưu Ý Quan Trọng
-
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
-
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
-
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
-
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