Show 16.1.7.3 & NBSP; Bỏ qua giao dịchNếu sao chép dừng lại do sự cố với một sự kiện trong một giao dịch được sao chép, bạn có thể tiếp tục sao chép bằng cách bỏ qua giao dịch thất bại trên bản sao. Trước khi bỏ qua một giao dịch, hãy đảm bảo rằng luồng I/O sao chép được dừng cũng như luồng SQL sao chép. Đầu tiên bạn cần xác định sự kiện được sao chép gây ra lỗi. Chi tiết về lỗi và giao dịch được áp dụng thành công cuối cùng được ghi lại trong Bảng Lược đồ hiệu suất Trước khi bỏ qua giao dịch và khởi động lại bản sao, hãy kiểm tra các điểm sau:
Để bỏ qua giao dịch, hãy chọn một trong các phương thức sau khi thích hợp:
Để khởi động lại sao chép sau khi bỏ qua giao dịch, phát hành 4, với điều khoản 5 nếu bản sao là bản sao đa nguồn.16.1.7.3.1 & nbsp; bỏ qua các giao dịch với GTIDS Khi GTID được sử dụng ( Nếu giao dịch không thành công tạo ra lỗi trong luồng công nhân, bạn có thể lấy GTID trực tiếp từ trường 8 trong Bảng Lược đồ hiệu suất replication_applier_status_by_worker . Để xem giao dịch là gì, vấn đề SHOW RELAYLOG EVENTS trên bản sao hoặc 1 trên nguồn và tìm kiếm đầu ra cho một giao dịch trước GTID đó.Khi bạn đã đánh giá giao dịch thất bại đối với bất kỳ hành động thích hợp nào khác như được mô tả trước đây (như cân nhắc bảo mật), để bỏ qua, hãy thực hiện một giao dịch trống trên bản sao có cùng GTID như giao dịch thất bại. Ví dụ:
Sự hiện diện của giao dịch trống này trên bản sao có nghĩa là khi bạn đưa ra câu lệnh 2 để khởi động lại sao chép, bản sao sử dụng chức năng tự động trượt để bỏ qua giao dịch không thành công, vì nó thấy giao dịch với GTID đã được áp dụng. Nếu bản sao là bản sao nhiều nguồn, bạn không cần chỉ định tên kênh khi bạn thực hiện giao dịch trống, nhưng bạn cần chỉ định tên kênh khi bạn phát hành 4.Lưu ý rằng nếu ghi nhật ký nhị phân được sử dụng trên bản sao này, giao dịch trống sẽ nhập luồng sao chép nếu bản sao trở thành nguồn hoặc chính trong tương lai. Nếu bạn cần tránh khả năng này, hãy xem xét việc xóa và thanh lọc các bản ghi nhị phân của bản sao, như trong ví dụ này:
GTID của giao dịch trống vẫn tồn tại, nhưng bản thân giao dịch đã bị xóa bằng cách thanh lọc các tệp nhật ký nhị phân. 16.1.7.3.2 & nbsp; bỏ qua các giao dịch mà không có GTIDS Để bỏ qua các giao dịch không thành công khi GTID không được sử dụng hoặc đang được thực hiện trong ( 1, 2 hoặc 3), bạn có thể bỏ qua một số lượng sự kiện được chỉ định bằng cách đưa ra tuyên bố 8. Ngoài ra, bạn có thể bỏ qua một sự kiện hoặc sự kiện bằng cách đưa ra tuyên bố 9 để di chuyển vị trí nhật ký nhị phân của nguồn về phía trước.Khi bạn sử dụng các phương pháp này, điều quan trọng là phải hiểu rằng bạn không nhất thiết phải bỏ qua một giao dịch hoàn chỉnh, như luôn luôn như vậy với phương thức dựa trên GTID được mô tả trước đây. Các phương thức không dựa trên GTID này không nhận thức được các giao dịch như vậy, mà thay vào đó hoạt động trên các sự kiện. Nhật ký nhị phân được tổ chức như một chuỗi các nhóm được gọi là các nhóm sự kiện và mỗi nhóm sự kiện bao gồm một chuỗi các sự kiện.
Một giao dịch duy nhất có thể chứa các thay đổi đối với cả bảng giao dịch và không hoạt động. Khi bạn sử dụng câu lệnh 8 để bỏ qua các sự kiện và vị trí kết quả nằm giữa một nhóm sự kiện, bản sao tiếp tục bỏ qua các sự kiện cho đến khi kết thúc nhóm. Thực thi sau đó bắt đầu với nhóm sự kiện tiếp theo. Tuyên bố 9 không có chức năng này, vì vậy bạn phải cẩn thận để xác định vị trí chính xác để khởi động lại sao chép khi bắt đầu một nhóm sự kiện. Tuy nhiên, sử dụng 9 có nghĩa là bạn không phải đếm các sự kiện cần bỏ qua, như bạn làm với 8 và thay vào đó bạn chỉ có thể chỉ định vị trí để khởi động lại.16.1.7.3.2.1 & nbsp; bỏ qua các giao dịch với 4Khi bạn đã đánh giá giao dịch thất bại cho bất kỳ hành động thích hợp nào khác như được mô tả trước đây (chẳng hạn như cân nhắc bảo mật), hãy tính số lượng sự kiện mà bạn cần bỏ qua. Một sự kiện thường tương ứng với một câu lệnh SQL trong nhật ký nhị phân, nhưng lưu ý rằng các câu lệnh sử dụng 5 hoặc 6 được tính là hai sự kiện trong nhật ký nhị phân.Nếu bạn muốn bỏ qua giao dịch hoàn chỉnh, bạn có thể đếm các sự kiện vào cuối giao dịch hoặc bạn chỉ có thể bỏ qua nhóm sự kiện có liên quan. Hãy nhớ rằng với 7, bản sao tiếp tục bỏ qua đến cuối nhóm sự kiện. Hãy chắc chắn rằng bạn không bỏ qua quá xa về phía trước và đi vào nhóm sự kiện hoặc giao dịch tiếp theo, vì điều này sau đó làm cho nó bị bỏ qua.Phát hành câu lệnh 8 như sau, trong đó 9 là số lượng sự kiện từ nguồn để bỏ qua:
Tuyên bố này không thể được ban hành nếu 0 được đặt hoặc nếu các luồng bản sao đang chạy.Tuyên bố 7 không có hiệu lực ngay lập tức. Khi bạn đưa ra câu lệnh 4 cho lần tiếp theo sau câu lệnh 8 này, giá trị mới cho biến hệ thống 4 được áp dụng và các sự kiện được bỏ qua. Câu lệnh 4 đó cũng tự động đặt giá trị của biến hệ thống trở lại 0. Nếu bản sao là bản sao đa nguồn, khi bạn đưa ra câu lệnh 4 đó, mệnh đề 5 là bắt buộc. Đảm bảo rằng bạn đặt tên đúng kênh, nếu không các sự kiện được bỏ qua trên kênh sai.16.1.7.3.2.2 & nbsp; bỏ qua các giao dịch với 9Khi bạn đã đánh giá giao dịch không thành công cho bất kỳ hành động thích hợp nào khác như được mô tả trước đây (chẳng hạn như xem xét bảo mật), hãy xác định tọa độ (tệp và vị trí) trong nhật ký nhị phân của nguồn đại diện cho vị trí phù hợp để khởi động lại sao chép. Đây có thể là sự khởi đầu của nhóm sự kiện sau sự kiện gây ra vấn đề hoặc bắt đầu giao dịch tiếp theo. Chủ đề I/O sao chép bắt đầu đọc từ nguồn tại các tọa độ này vào lần tiếp theo chủ đề bắt đầu, bỏ qua sự kiện thất bại. Đảm bảo rằng bạn đã xác định chính xác vị trí, vì câu lệnh này không tính đến các nhóm sự kiện. Phát hành câu lệnh 9 như sau, trong đó replication_applier_status_by_worker 0 là tệp nhật ký nhị phân chứa vị trí khởi động lại và replication_applier_status_by_worker 1 là số đại diện cho vị trí khởi động lại như đã nêu trong tệp nhật ký nhị phân:
Nếu bản sao là bản sao nhiều nguồn, bạn phải sử dụng mệnh đề 5 để đặt tên cho kênh thích hợp trên câu lệnh replication_applier_status_by_worker 3. Tuyên bố này không thể được ban hành nếu
Làm cách nào để sửa lỗi độ trễ sao chép mysql?Đầu tiên, chúng tôi đảm bảo rằng MySQL không bao giờ đồng bộ hóa nhật ký nhị phân vào đĩa. Thay vào đó, chúng tôi để hệ điều hành làm điều đó theo thời gian. Lưu ý rằng giá trị mặc định SYNC_BINLOG là 0, nhưng chúng tôi đã sử dụng giá trị cao hơn để tránh các vấn đề thay vì sự cố.make sure that MySQL never synchronizes the binary log to disk. Instead, we let the operating system do it from time to time. Note that sync_binlog default value is 0, but we used a higher value to avoid problems instead of crash.
Điều gì gây ra độ trễ sao chép MySQL?Điều này là do bản sao MySQL là một luồng đơn (SQL_Thread), theo mặc định.Nếu một khối lượng lớn các ghi vào thể hiện DB nguồn xảy ra song song, thì các ghi vào bản sao đọc được nối tiếp bằng một sql_thread duy nhất.Điều này có thể gây ra độ trễ giữa thể hiện DB nguồn và đọc bản sao.If a high volume of writes to the source DB instance occurs in parallel, then the writes to the read replica are serialized using a single SQL_THREAD. This can cause a lag between the source DB instance and read replica.
Làm thế nào để tôi bỏ qua GTID?Chúng ta có thể bỏ qua một lỗi trong sao chép dựa trên GTID bằng các bước sau: Dừng nô lệ;Đặt gtid_next = 'server_uuid: last_transaction_number+1';BẮT ĐẦU;LÀM;Đặt gtid_next = "tự động";Bắt đầu nô lệ;Nhưng nếu một bản sao đang chạy với thông tin kênh, làm thế nào để bỏ qua giao dịch cho một kênh cụ thể?STOP SLAVE; set GTID_NEXT='SERVER_UUID:LAST_TRANSACTION_NUMBER+1' ; BEGIN; COMMIT; SET GTID_NEXT="AUTOMATIC"; START SLAVE; But if a replication is running with channel information, than how to skip the transaction for a particular channel ?
Độ trễ sao chép MySQL là gì?Độ trễ sao chép là chi phí của độ trễ cho (các) giao dịch hoặc (các) hoạt động được tính toán bởi chênh lệch thời gian thực thi giữa chính/chính so với nút chờ/nô lệ.the cost of delay for transaction(s) or operation(s) calculated by its time difference of execution between the primary/master against the standby/slave node. |