CodeGym /Các khóa học /SQL SELF /Khôi phục dữ liệu sau sự cố

Khôi phục dữ liệu sau sự cố

SQL SELF
Mức độ, Bài học
Có sẵn

Sự cố thì đủ kiểu: hỏng phần cứng, mất điện, bug trong code hoặc, khá thường xuyên, admin lơ đãng xóa nhầm database khi muốn dọn "cái gì đó cũ". Trong mấy tình huống này, backup và quy trình khôi phục chuẩn chỉnh chính là "cây đũa thần" của bạn đó.

Giờ tụi mình cùng mổ xẻ quy trình khôi phục từng bước, giống như ráp tủ IKEA: không hoảng loạn, cứ theo hướng dẫn mà làm thôi.

Bước 1. Phân tích nguyên nhân sự cố

Trước khi lao vào khôi phục dữ liệu, quan trọng là phải hiểu chuyện gì vừa xảy ra.

  1. Lỗi ứng dụng hay database?
    Kiểm tra log của app và PostgreSQL (thường nằm ở /var/log/postgresql/ hoặc thư mục tương tự tùy OS của bạn). Tìm các chỉ báo lỗi.

  2. Hỏng phần cứng?
    Nếu server bị hỏng vật lý (ví dụ ổ cứng có vấn đề), trước tiên hãy chắc chắn phần cứng còn ổn. Nếu ổ cứng die rồi, gắn ổ khác vào và khôi phục từ đó.

  3. Vấn đề mạng hoặc truy cập?
    Nếu sự cố do mạng — server của bạn chắc chưa cần khôi phục đâu.

  4. Lỗi do người dùng:
    Thú nhận đi... ai vừa chạy DROP DATABASE? Nếu có, vẫn còn cơ hội khôi phục từ backup nha.

Nhớ là hiểu rõ nguyên nhân sự cố sẽ giúp tránh lặp lại trong tương lai.

Bước 2. Kiểm tra backup có sẵn không

Đến lúc kiểm tra xem mình có backup chuẩn chưa. Tìm bản backup database mới nhất mà bạn tạo bằng pg_dump hoặc pg_basebackup. Kiểm tra tính toàn vẹn của nó. Nếu chưa biết làm sao, đây là nhắc nhanh:

  • Dùng lệnh ls -l để kiểm tra kích thước file. Nếu file nhỏ bất thường, có thể có vấn đề đó.
  • Kiểm tra file bằng lệnh file. Ví dụ:
    file backup_file.sql
    
    Bạn sẽ thấy info về file, báo đây là SQL dump.

Với file tar thì kiểm tra giải nén được không:

tar -tf backup.tar

Không lỗi gì chứ? Tuyệt! Tiếp tục thôi.

Bước 3. Dừng PostgreSQL

Trước khi khôi phục, nhớ dừng server PostgreSQL để đảm bảo an toàn. Làm như này (chạy bằng quyền admin server):

sudo systemctl stop postgresql

Dừng database đảm bảo không có process nào phá đám quá trình khôi phục.

Bước 4. Chuẩn bị database mới để khôi phục

Nếu database của bạn bị xóa hoặc hỏng hoàn toàn, hãy tạo lại nó trước. Ví dụ lệnh:

createdb -U postgres new_database

Thay new_database bằng tên database của bạn nha.

Bước 5. Khôi phục từ backup

Có hai kịch bản khôi phục chính:

  1. Nếu bạn dùng backup SQL (pg_dump): Để khôi phục, dùng lệnh này

    psql -U username -d new_database -f backup_file.sql
    
  • username — user PostgreSQL của bạn.
  • new_database — database sẽ import dữ liệu vào.
  • backup_file.sql — file backup của bạn.
  1. Nếu bạn dùng backup dạng binary (pg_basebackup hoặc pg_dump với custom):
    Để khôi phục, dùng:
    pg_restore -U username -d new_database backup_file.dump
    
    Lưu ý là mấy backup này không phải text mà là dữ liệu "đóng gói".

Bổ sung:

  • Nếu backup chỉ có dữ liệu, thêm --data-only.
  • Nếu chỉ muốn khôi phục cấu trúc, thêm --schema-only.

Bước 6. Khởi động PostgreSQL và kiểm tra

Sau khi chạy lệnh khôi phục, khởi động lại server:

sudo systemctl start postgresql

Giờ cần test thử. Thử kết nối vào database vừa khôi phục bằng psql hoặc pgAdmin. Chạy vài truy vấn để kiểm tra dữ liệu có ổn không:

SELECT * FROM your_table_name LIMIT 10;

Nếu mọi thứ ổn, chúc mừng: dữ liệu đã được khôi phục!

Bước 7. Kiểm tra tính toàn vẹn dữ liệu

Sau khi khôi phục, nhớ kiểm tra dữ liệu có toàn vẹn không. Ví dụ:

  1. So sánh số dòng trong bảng với backup:

    SELECT COUNT(*) FROM your_table_name;
    

    So kết quả với bản backup (nếu có).

  2. Dùng checksum: Nếu trước đó bạn từng tạo checksum cho bảng, giờ là lúc so lại:

    md5sum backup_file.sql
    
  3. Kiểm tra liên kết giữa các bảng: Đảm bảo các liên kết FOREIGN KEY đã khôi phục hoạt động chuẩn.

Bước 8. Test ứng dụng

Giờ hãy kiểm tra app của bạn dùng database này. Chạy qua các chức năng chính. Có lỗi gì không? Dữ liệu hiển thị ổn không?

Ví dụ lỗi thực tế khi khôi phục

Giờ cùng xem vài case thực tế để tránh gặp lỗi nhé:

  1. Không tương thích version PostgreSQL.
    Giả sử backup tạo ở version 12, mà server đã lên version 15. Khi khôi phục sẽ bị lỗi.
    Cách giải quyết: dùng đúng version PostgreSQL như lúc backup, hoặc đọc tài liệu về compatibility: PostgreSQL Documentation.

  2. Backup bị hỏng . Nếu backup bị lỗi, một phần dữ liệu có thể mất.
    Cách giải quyết: dùng backup replication (ví dụ lưu nhiều version backup).

  3. Lỗi khi khôi phục bảng cụ thể.
    Nếu bạn chỉ khôi phục một bảng, mà các phụ thuộc (ví dụ foreign key) không có, quá trình có thể fail.
    Cách giải quyết: luôn khôi phục bảng theo thứ tự đúng, bắt đầu từ bảng cha.

2
Nhiệm vụ
SQL SELF, mức độ, bài học
Đã khóa
Khôi phục cơ sở dữ liệu từ file SQL
Khôi phục cơ sở dữ liệu từ file SQL
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION