🔄 Restore MySQL Database
📋 Chuẩn Bị
1. Kiểm Tra File Backup
# Kiểm tra tồn tại và dung lượng file
ls -lh /path/to/backup/file.sql.gz
# Kiểm tra tính toàn vẹn file nén
gunzip -t /path/to/backup/file.sql.gz
2. Chuẩn Bị Database
# Đăng nhập MySQL
mysql -u username -p
# Tạo database mới (nếu cần)
CREATE DATABASE database_name;
🚀 Thực Hiện Restore
1. Restore từ File Dump
a. File SQL Thường
# Restore toàn bộ dump
mysql < mysql_dump.sql
# Restore database cụ thể
mysql database_name < database_dump.sql
b. File Nén GZip
# Restore từ file nén
gunzip < database_dump.sql.gz | mysql database_name
tip
Trước khi restore:
- Tạo database mới nếu restore database cụ thể
- Đảm bảo user có quyền restore
- Kiểm tra dung lượng đĩa đủ cho quá trình restore
🤖 Thông Báo Kết Quả qua Telegram
1. Sử Dụng Câu Lệnh Trực Tiếp
# Restore file SQL thường và gửi thông báo
mysql database_name < backup.sql && \
telegram-send "✅ Restore MySQL thành công
📊 Database: database_name
⏱ Thời gian: $(date '+%Y-%m-%d %H:%M:%S')" || \
telegram-send "❌ Restore MySQL thất bại"
# Restore file nén với thông tin chi tiết
BACKUP_FILE="database_backup.sql.gz" && \
START_TIME=$(date +%s) && \
gunzip < $BACKUP_FILE | mysql database_name && \
END_TIME=$(date +%s) && \
DURATION=$((END_TIME - START_TIME)) && \
telegram-send "✅ Restore MySQL thành công
📊 Database: database_name
⏱ Thời gian thực hiện: ${DURATION}s
📂 File: $BACKUP_FILE" || \
telegram-send "❌ Restore MySQL thất bại
⚠️ Kiểm tra log để biết thêm chi tiết"
2. Script Restore Tự Động
#!/bin/bash
# Cấu hình
DB_NAME="your_database"
BACKUP_FILE="$1"
LOG_FILE="/var/log/mysql/restore_$(date +%Y%m%d_%H%M%S).log"
# Kiểm tra file backup
if [ ! -f "$BACKUP_FILE" ]; then
telegram-send "❌ Không tìm thấy file backup: $BACKUP_FILE"
exit 1
fi
# Thông báo bắt đầu
START_TIME=$(date +%s)
telegram-send "🔄 Bắt đầu restore MySQL
📊 Database: $DB_NAME
📂 File: $(basename $BACKUP_FILE)
⏰ Thời gian: $(date '+%Y-%m-%d %H:%M:%S')"
# Thực hiện restore
if [[ $BACKUP_FILE == *.gz ]]; then
gunzip < $BACKUP_FILE | mysql $DB_NAME 2>> $LOG_FILE
else
mysql $DB_NAME < $BACKUP_FILE 2>> $LOG_FILE
fi
# Kiểm tra kết quả
if [ $? -eq 0 ]; then
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
telegram-send "✅ Restore MySQL thành công
📊 Database: $DB_NAME
⏱ Thời gian: ${DURATION}s
📂 File: $(basename $BACKUP_FILE)"
else
telegram-send "❌ Restore MySQL thất bại
📊 Database: $DB_NAME
⚠️ Kiểm tra log tại: $LOG_FILE"
fi
tip
Xem hướng dẫn cài đặt và sử dụng Telegram Bot tại Phát Triển Bot Telegram
⚠️ Lưu Ý Quan Trọng
-
Kiểm Tra Trước Khi Restore:
- Backup database hiện tại
- Kiểm tra dung lượng đĩa
- Xác nhận quyền user
-
Trong Quá Trình Restore:
- Không ngắt kết nối
- Theo dõi log
- Kiểm tra tài nguyên hệ thống
-
Sau Khi Restore:
- Kiểm tra tính toàn vẹn dữ liệu
- Kiểm tra các ràng buộc và index
- Cập nhật quyền nếu cần
🔍 Xử Lý Sự Cố
1. Lỗi Restore
# Kiểm tra log MySQL
tail -f /var/log/mysql/error.log
# Kiểm tra log restore
tail -f $LOG_FILE
2. Lỗi Quyền
-- Kiểm tra quyền user
SHOW GRANTS FOR 'username'@'host';
-- Cấp quyền nếu cần
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host';
FLUSH PRIVILEGES;