Phỏng vấn GO Backend: Nếu MySQL gặp sự cố trong khi thực hiện transaction, điều gì sẽ xảy ra khi nó được khôi phục (restored)?

Nội dung bài viết

Video học lập trình mỗi ngày

Thời gian để kể lại chúng ta sẽ ngồi lại sau, giờ là note ý chính về chuyện này.

Khi MySQL gặp sự cố (ví dụ như tắt đột ngột) trong khi đang thực hiện một transaction đương nhiên là chỉ một MYSQL đơn lẻ mà thôi, lúc này hệ thống sẽ thực hiện quá trình phục hồi khi khởi động lại.



Phỏng vấn GO Backend - Phần MYSQL

Thì các bước mà MYSQL sẽ xử lý như thế nào để đảm bảo rằng dữ liệu vẫn chính xác. Tôi viết lại theo văn viết nên nó trơn tru hơn rất nhiều, nhưng về bản chất ANH ẤY cũng đã nói gần như vậy.

Những ai mà xem về phần Phân tích các nguyên tắc của cơ chế MySQL-MVCC thì sẽ không còn xa lạ gì với Undo Log.

Trước tiên hãy nghe qua, tất nhiên tôi sẽ trình bày ở ví dụ cụ thể như những lần trước cho các bạn dễ hình dung.

  1. Kiểm tra Redo Log lưu trữ các thay đổi vật lý trên các trang dữ liệu mà giao dịch đã thực hiện, ngay cả khi giao dịch chưa hoàn tất và chưa được cam kết (committed). Khi MySQL khởi động lại, nó sẽ đọc lại Redo Log và áp dụng những thay đổi chưa được lưu trữ vào dữ liệu thực tế. Điều này giúp đảm bảo rằng các thay đổi của giao dịch sẽ không bị mất.

  2. Kiểm tra Undo Log ghi lại các thông tin dùng để hoàn tác (rollback) các thay đổi của giao dịch. Đối với các giao dịch chưa cam kết, MySQL sẽ sử dụng Undo Log để hoàn tác các thay đổi mà giao dịch đã thực hiện. Điều này giúp duy trì tính nguyên tử của giao dịch (ACID - Atomicity), đảm bảo rằng các giao dịch chưa cam kết sẽ không làm thay đổi trạng thái của cơ sở dữ liệu.

  3. Phục hồi sau sự cố (Crash Recovery) Khi MySQL khởi động lại, động cơ InnoDB sẽ tự động thực hiện quá trình phục hồi sau sự cố. Hệ thống sẽ kiểm tra và áp dụng lại các thay đổi từ Redo Log, đồng thời sử dụng Undo Log để hoàn tác các giao dịch chưa cam kết. Sau khi phục hồi, MySQL sẽ khôi phục trạng thái nhất quán của cơ sở dữ liệu.

MySQL đảm bảo tính toàn vẹn

Nói chung là rất chính xác, tôi sẽ nhớ cách trả lời này và sẽ chém những ứng viên sau kakakaka.

CHỐT:

MySQL đảm bảo tính toàn vẹn và sự nhất quán của dữ liệu bằng cách sử dụng Redo Log và Undo Log. Khi gặp sự cố, quá trình phục hồi sẽ giúp MySQL quay lại trạng thái nhất quán trước khi sự cố xảy ra, đảm bảo rằng các giao dịch được thực thi đúng cách theo các nguyên lý ACID.

Có thể bạn đã bị missing