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

🔄 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
mẹo

Trước khi restore:

  1. Tạo database mới nếu restore database cụ thể
  2. Đảm bảo user có quyền restore
  3. 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
mẹo

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

  1. 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
  2. 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
  3. 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;

📚 Tài Liệu Tham Khảo