Khôi phục Mysql sau khi cam kết
Show Một giao dịch là một đơn vị logic của công việc chứa một hoặc nhiều câu lệnh SQL. Giao dịch là đơn vị nguyên tử của công việc có thể được cam kết hoặc khôi phục. Khi một giao dịch thực hiện nhiều thay đổi đối với cơ sở dữ liệu, tất cả các thay đổi đều thành công khi giao dịch được thực hiện hoặc tất cả các thay đổi sẽ được hoàn tác khi giao dịch được khôi phục Một giao dịch bắt đầu với câu lệnh SQL thực thi đầu tiên. Một giao dịch kết thúc khi nó được cam kết hoặc khôi phục, rõ ràng bằng câu lệnh CAM KẾT hoặc ROLLBACK hoặc hoàn toàn khi sử dụng DDL (Ngôn ngữ định nghĩa dữ liệu (DDL) để quản lý cấu trúc bảng và chỉ mục cũng như các câu lệnh CREATE, ALTER, RENAME, DROP và TRUNCATE nội dung Tìm hiểu khái niệm giao dịch Để hiểu khái niệm về giao dịch, hãy xem xét cơ sở dữ liệu ngân hàng. Giả sử một khách hàng của ngân hàng chuyển tiền từ tài khoản tiết kiệm (SB a/c) sang tài khoản hiện tại (CA a/c), sao kê sẽ được chia thành bốn khối
Câu lệnh SQL để ghi nợ SB a/c như sau CẬP NHẬT sb_accounts Câu lệnh SQL để ghi có OD a/c như sau CẬP NHẬT ca_accounts Câu lệnh SQL để ghi vào nhật ký giao dịch như sau CHÈN VÀO GIÁ TRỊ tạp chí Câu lệnh SQL cho Giao dịch kết thúc như sau CAM KẾT CÔNG VIỆC; MySQL và Mô hình ACID ACID (Nguyên tử, Tính nhất quán, Cách ly, Độ bền) là một tập hợp các thuộc tính đảm bảo rằng các giao dịch cơ sở dữ liệu được xử lý một cách đáng tin cậy. Trong MySQL, công cụ lưu trữ InnoDB hỗ trợ các tính năng tuân thủ ACID. Các phần sau thảo luận về cách các tính năng của MySQL, cụ thể là công cụ lưu trữ InnoDB, tương tác với các danh mục của mô hình ACID nguyên tử. Khía cạnh nguyên tử của mô hình ACID chủ yếu liên quan đến các giao dịch InnoDB. Các tính năng MySQL liên quan bao gồm
Tính nhất quán. Khía cạnh tính nhất quán của mô hình ACID chủ yếu liên quan đến quá trình xử lý InnoDB nội bộ để bảo vệ dữ liệu khỏi sự cố. Các tính năng MySQL liên quan bao gồm
Sự cách ly. Khía cạnh cách ly của mô hình ACID chủ yếu liên quan đến các giao dịch InnoDB, cụ thể là mức độ cách ly áp dụng cho từng giao dịch. Các tính năng MySQL liên quan bao gồm
Độ bền. Khía cạnh độ bền của mô hình ACID liên quan đến các tính năng phần mềm MySQL tương tác với cấu hình phần cứng cụ thể của bạn. Do có nhiều khả năng tùy thuộc vào khả năng của CPU, mạng và thiết bị lưu trữ của bạn, khía cạnh này là phức tạp nhất để cung cấp hướng dẫn cụ thể cho. Các tính năng MySQL liên quan bao gồm
Giao dịch MySQL MySQL (ở đây chúng tôi duy trì phiên bản 5. 6) hỗ trợ các giao dịch cục bộ (trong một phiên khách hàng nhất định) thông qua các câu lệnh như SET tự động cam kết, BẮT ĐẦU GIAO DỊCH, CAM KẾT và ROLLBACK. Đây là cú pháp BẮT ĐẦU GIAO DỊCH, CAM KẾT và ROLLBACK START TRANSACTION transaction_characteristic [, transaction_characteristic] ...] transaction_characteristic: WITH CONSISTENT SNAPSHOT | READ WRITE | READ ONLY BEGIN [WORK] COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE] ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE] SET autocommit = {0 | 1} Những tuyên bố này cung cấp quyền kiểm soát đối với việc sử dụng các giao dịch
Theo mặc định, MySQL chạy với chế độ autocommit được bật. Điều này có nghĩa là ngay khi bạn thực hiện một câu lệnh cập nhật (sửa đổi) một bảng, MySQL sẽ lưu trữ bản cập nhật trên đĩa để biến nó thành vĩnh viễn. Thay đổi không thể được khôi phục Hiện tại (theo mặc định), MySQL chạy với chế độ autocommit được bật mysql> select * from student_mast; +------------+------------------+----------+ | STUDENT_ID | NAME | ST_CLASS | +------------+------------------+----------+ | 2 | Neena Kochhar | 9 | | 3 | Lex De Haan | 9 | | 4 | Alexander Hunold | 11 | +------------+------------------+----------+ 3 rows in set (0.09 sec) Hãy thực hiện một lệnh cập nhật mysql>mysql> UPDATE STUDENT_MAST SET ST_CLASS=8 WHERE STUDENT_ID=2; Query OK, 1 row affected (0.08 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql>mysql> select * from student_mast; +------------+------------------+----------+ | STUDENT_ID | NAME | ST_CLASS | +------------+------------------+----------+ | 2 | Neena Kochhar | 8 | | 3 | Lex De Haan | 9 | | 4 | Alexander Hunold | 11 | +------------+------------------+----------+ 3 rows in set (0.00 sec) Bây giờ hãy thực hiện lệnh ROLLBACK để quay lại giai đoạn trước mysql>mysql> ROLLBACK; Query OK, 0 rows affected (0.03 sec) mysql>mysql> select * from student_mast; +------------+------------------+----------+ | STUDENT_ID | NAME | ST_CLASS | +------------+------------------+----------+ | 2 | Neena Kochhar | 8 | | 3 | Lex De Haan | 9 | | 4 | Alexander Hunold | 11 | +------------+------------------+----------+ 3 rows in set (0.00 sec) Không có khôi phục khi MySQL chạy với chế độ tự động xác nhận được bật Để tắt chế độ tự động cam kết, hãy sử dụng câu lệnh BẮT ĐẦU GIAO DỊCH. Xem ví dụ sau mysql>mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec) mysql> UPDATE STUDENT_MAST SET ST_CLASS=10 WHERE STUDENT_ID=2; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from student_mast; +------------+------------------+----------+ | STUDENT_ID | NAME | ST_CLASS | +------------+------------------+----------+ | 2 | Neena Kochhar | 10 | | 3 | Lex De Haan | 9 | | 4 | Alexander Hunold | 11 | +------------+------------------+----------+ 3 rows in set (0.00 sec) mysql> ROLLBACK; Query OK, 0 rows affected (0.07 sec) mysql> select * from student_mast; +------------+------------------+----------+ | STUDENT_ID | NAME | ST_CLASS | +------------+------------------+----------+ | 2 | Neena Kochhar | 8 | | 3 | Lex De Haan | 9 | | 4 | Alexander Hunold | 11 | +------------+------------------+----------+ 3 rows in set (0.00 sec) Các câu lệnh MySQL không thể Roll Back và các câu lệnh gây ra Cam kết ngầm Trong MySQL, một số câu lệnh không thể được khôi phục. Các câu lệnh DDL chẳng hạn như cơ sở dữ liệu CREATE hoặc DROP, các bảng CREATE, ALTER hoặc DROP hoặc các thủ tục được lưu trữ. Bạn nên thiết kế một giao dịch không có những câu lệnh này Các câu lệnh được liệt kê trong phần này (và bất kỳ từ đồng nghĩa nào với chúng) hoàn toàn kết thúc bất kỳ giao dịch nào đang hoạt động trong phiên hiện tại, như thể bạn đã thực hiện CAM KẾT trước khi thực hiện câu lệnh
SAVEPOINT, QUAY LẠI VỀ SAVEPOINT và PHÁT HÀNH SAVEPOINT InnoDB hỗ trợ các câu lệnh SQL SAVEPOINT, ROLLBACK TO SAVEPOINT, RELEASE SAVEPOINT và từ khóa WORK tùy chọn cho ROLLBACK Câu lệnh SAVEPOINT đặt điểm lưu trữ giao dịch được đặt tên với tên của mã định danh. Nếu giao dịch hiện tại có một điểm lưu trữ có cùng tên, thì điểm lưu trữ cũ sẽ bị xóa và một điểm lưu trữ mới được đặt Câu lệnh ROLLBACK TO SAVEPOINT khôi phục giao dịch về điểm lưu trữ được đặt tên mà không chấm dứt giao dịch. Các sửa đổi mà giao dịch hiện tại được thực hiện đối với các hàng sau khi đặt điểm lưu trữ sẽ được hoàn tác trong quá trình khôi phục, nhưng InnoDB không giải phóng các khóa hàng được lưu trữ trong bộ nhớ sau điểm lưu trữ Đây là cú pháp ________số 8Bảng KHÓA và MỞ KHÓA MySQL cho phép các phiên máy khách có được các khóa bảng một cách rõ ràng nhằm mục đích hợp tác với các phiên khác để truy cập vào các bảng hoặc để ngăn các phiên khác sửa đổi các bảng trong các khoảng thời gian khi một phiên yêu cầu quyền truy cập độc quyền vào chúng. Một phiên chỉ có thể lấy hoặc giải phóng các khóa cho chính nó. Một phiên không thể lấy khóa cho phiên khác hoặc giải phóng khóa do phiên khác nắm giữ LOCK TABLES có được các khóa bảng một cách rõ ràng cho phiên máy khách hiện tại. Khóa bảng có thể được mua cho các bảng cơ sở hoặc dạng xem. Bạn phải có đặc quyền LOCK TABLES và đặc quyền CHỌN cho từng đối tượng được khóa UNLOCK TABLES giải phóng rõ ràng bất kỳ khóa bảng nào do phiên hiện tại nắm giữ. LOCK TABLES hoàn toàn giải phóng bất kỳ khóa bảng nào được giữ bởi phiên hiện tại trước khi có được các khóa mới Chúng tôi có thể khôi phục sau khi cam kết không?COMMIT lưu vĩnh viễn các thay đổi được thực hiện bởi giao dịch hiện tại. ROLLBACK hoàn tác các thay đổi được thực hiện bởi giao dịch hiện tại. 2. Giao dịch không thể hoàn tác các thay đổi sau khi thực hiện CAM KẾT .
Làm cách nào để sử dụng cam kết và khôi phục trong MySQL?CAM KẾT có nghĩa là những thay đổi được thực hiện trong giao dịch hiện tại được thực hiện vĩnh viễn và hiển thị cho các phiên khác. Mặt khác, một câu lệnh ROLLBACK hủy bỏ tất cả các sửa đổi được thực hiện bởi giao dịch hiện tại. Cả COMMIT và ROLLBACK đều giải phóng tất cả các khóa InnoDB đã được đặt trong giao dịch hiện tại
Làm cách nào để khôi phục dữ liệu trong MySQL?Để khôi phục giao dịch hiện tại và hủy các thay đổi của nó, bạn sử dụng câu lệnh ROLLBACK . Để tắt hoặc bật chế độ tự động cam kết cho giao dịch hiện tại, bạn sử dụng câu lệnh SET autocommit.
Chúng tôi có thể khôi phục sau khi cam kết trong SQL Server không?Sau khi SQL Server thực hiện một giao dịch, bạn không thể chạy câu lệnh ROLLBACK . |