Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL Replication:Các giao dịch sai sót trong bản sao dựa trên GTID

GTID hoặc Số nhận dạng giao dịch toàn cầu đã được giới thiệu trong MySQL 5.6.5. GTID là một id duy nhất trên toàn cầu được cấp cho tất cả các giao dịch được thực hiện trên máy chủ lưu trữ MySQL hỗ trợ GTID. GTID là sự kết hợp của UUID của máy chủ nơi một giao dịch cụ thể đã được cam kết và số thứ tự của giao dịch đó trên máy chủ cụ thể đó. Điều này làm cho GTID của GTID trở thành duy nhất trên toàn cầu.

Bản sao MySQL

Sao chép dựa trên GTID linh hoạt hơn nhiều so với sao chép dựa trên binlog cũ hơn. Trong thiết lập dựa trên GTID, máy chủ không cần tệp binlog chính và vị trí để bắt đầu sao chép. Đọc thêm về sao chép dựa trên GTID. Trong bài đăng trên blog này, chúng ta sẽ thảo luận về một số vấn đề phổ biến về sao chép MySQL gây ra khi triển khai tập hợp bản sao dựa trên GTID.

Giao dịch không hợp lệ là các giao dịch được áp dụng cho một hoặc nhiều nô lệ mà không cần phải sao chép trên các nút khác.

Vấn đề với các giao dịch sai này phát sinh khi nô lệ có chứa giao dịch sai được thăng cấp thành chủ. Trong trường hợp sao chép dựa trên GTID, điều này sẽ gây ra sự cố. Chủ nhân mới hiện nhận ra rằng các nô lệ đã không thực hiện giao dịch sai lầm. Một trong hai điều có thể xảy ra:

(1) Giao dịch sai sót vẫn tồn tại trong binlog chủ và nó sẽ gửi nó đến các nô lệ, điều này có thể làm hỏng dữ liệu hoặc gây ra lỗi.
(2) Giao dịch không có trong binlog và do đó không thể được gửi tới nô lệ, điều này gây ra lỗi sao chép.

Phòng ngừa

Các giao dịch có lỗi có thể chủ động được ngăn chặn bằng các bước sau. Nếu bạn phải áp dụng bản sửa lỗi cho nô lệ, một cách để giảm thiểu các giao dịch sai sót là tạm thời tắt ghi nhật ký nhị phân trên nô lệ. Việc thực thi sql_bin_log =0 trước khi thực hiện truy vấn sai sẽ thực hiện thủ thuật. Sau đó, bạn có thể bật binlog bằng cách chạy sql_bin_log =1.Để ngăn bất kỳ ứng dụng nào ghi vào nô lệ, nên bật Chỉ đọc trên máy chủ khi nó được định cấu hình làm nô lệ.

Phát hiện

Dễ dàng phát hiện một giao dịch sai trong tập hợp bản sao MySQL dựa trên GTID. MySQL lưu trữ tất cả GTID đã thực thi trong bảng Lược đồ hiệu suất / Lược đồ thông tin dựa trên phiên bản MySQL bạn đang sử dụng. Việc lấy GTID đã thực thi của nô lệ hiện tại và trừ chúng khỏi GTID được thực thi trên bản chính hiện tại sẽ cung cấp cho bạn tất cả các giao dịch sai sót trên nô lệ cụ thể đó. Các tiện ích như mysqlfailover hoặc mysqlrpladmin cũng có thể giúp phát hiện các giao dịch sai sót.

Giải pháp

Khi một giao dịch sai đã được phát hiện, có hai cách để bạn có thể sửa các lỗi sao chép gây ra sau khi chuyển đổi dự phòng. Một cách là xóa GTID của giao dịch sai khỏi lịch sử thực thi GTID nô lệ. Bằng cách này, khi nô lệ được thăng cấp thành chủ, giao dịch sai lầm sẽ không được sao chép cho tất cả các nút. Một cách khác để xử lý giao dịch sai là yêu cầu tất cả các nô lệ khác bỏ qua giao dịch sai. Điều đó sẽ bao gồm việc chèn một giao dịch trống có cùng GTID như giao dịch sai vào tất cả các nút khác trong tập hợp bản sao. Điều này sẽ khiến tất cả các nút khác nghĩ rằng họ đã áp dụng giao dịch này và do đó sẽ bỏ qua nó. MySQL có một tiện ích gọi là Mysqlslavetrx dành riêng để thực hiện việc này. Tiện ích này có thể được sử dụng để chèn các giao dịch trống với GTID đã cho. Việc thêm các giao dịch trống cũng có thể có các cách sử dụng khác, như được thảo luận ở đây.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Quyền truy cập root MySQL từ tất cả các máy chủ

  2. Cách làm tròn Dấu thời gian trong MySQL

  3. Đối chiếu phân biệt chữ hoa chữ thường trong MySQL

  4. Ví dụ DAYNAME () - MySQL

  5. JSON_INSERT () - Chèn giá trị vào tài liệu JSON trong MySQL