Bản sao bị trì hoãn MySQL là gì?
Trong Mysql 8. 0, bản sao bị trì hoãn được kiểm soát bởi hai biến hệ thống trên dấu thời gian – orginal_commit_timestamp và ngay_commit_timestamp , Chúng phụ thuộc vào GTID của từng giao dịch (thay vì từng sự kiện như trong MySQL 5. 7) được ghi vào nhật ký nhị phân. Hai biến hệ thống này chỉ được áp dụng khi toàn bộ cơ sở hạ tầng sao chép của bạn nằm trên MySQL 8. 0. 1 trở lên, Nếu Master hoặc Slave không sử dụng các dấu thời gian này, thì việc sao chép bị trì hoãn từ MySQL 5. 7 được sử dụng. Show
Dấu thời gian gốc của cam kết sẽ luôn giống nhau trên tất cả các bản sao khi giao dịch được áp dụng. Trong một bản sao chính-phụ điển hình, original_commit_timestamp của một giao dịch trong nhật ký nhị phân của master (gốc) luôn giống với instant_commit_timestamp của giao dịch đó. Trong nhật ký chuyển tiếp của nô lệ, original_commit_timestamp và instant_commit_timestamp của giao dịch giống như trong nhật ký nhị phân của chủ; Giám sát bản sao nô lệ bị trì hoãnChúng tôi thực sự khuyên bạn nên theo dõi các bảng Lược đồ hiệu suất để theo dõi độ trễ sao chép (độ trễ)
Hai ma trận sau đây từ đầu ra của SHOW SLAVE STATUS cũng hữu ích để theo dõi Sao chép bị trì hoãn SQL_Delay – Giá trị này được đo bằng giây của độ trễ sao chép được định cấu hình bằng CHANGE MASTER TO MASTER_DELAY=N SQL_Remaining_Delay – Phần này hiển thị tổng số giây còn lại của độ trễ được định cấu hình có chủ ý , tôi. e. Slave_SQL_Running_State đang đợi MASTER_DELAY giây Phần kết luậnChúng tôi không bao giờ có thể tránh khỏi lỗi của con người trong hoạt động cơ sở hạ tầng cơ sở dữ liệu. Nhưng quay trở lại tình trạng tốt được biết đến cuối cùng từ Master / Slave bị trì hoãn là điều tốt nhất được khuyến nghị trong toàn bộ các kịch bản tham nhũng cơ sở hạ tầng cơ sở dữ liệu. Tại MinervaDB, chúng tôi đặc biệt khuyến nghị Master / Slave bị trì hoãn để hầu hết khách hàng nhanh chóng khôi phục khi có trường hợp khẩn cấp. Cảm ơn ý kiến của bạn Amazon RDS cho MySQL hiện hỗ trợ sao chép bị trì hoãn, cho phép bạn đặt khoảng thời gian mà cơ sở dữ liệu bản sao trễ hơn cơ sở dữ liệu nguồn. Trong cấu hình sao chép MySQL tiêu chuẩn, có độ trễ tối thiểu giữa nguồn và bản sao. Bây giờ bạn có tùy chọn để giới thiệu một sự chậm trễ có chủ ý Độ trễ rất hữu ích khi bạn cần khôi phục sau lỗi của con người. Ví dụ: nếu ai đó vô tình đánh rơi một bảng khỏi cơ sở dữ liệu chính của bạn, thì sự cố đó không cần phải được lưu vào bản sao. Giờ đây, bạn có thể dừng sao chép ngay trước thời điểm mà bảng bị hủy và thăng cấp bản sao trở thành một phiên bản độc lập. Trong bài đăng trên blog này, tôi sẽ hướng dẫn bạn cách sử dụng bản sao bị trì hoãn để tự cứu mình khỏi một tình huống như vậy Sơ đồ sau đây minh họa cách bạn có thể sử dụng bản sao có độ trễ được đặt thành 3600 (một giờ) để khôi phục sau lỗi của con người. Đầu tiên, dừng sao chép; điều kiện tiên quyếtTrước khi bắt đầu kiểm tra sao chép bị trì hoãn, bạn cần có một phiên bản cơ sở dữ liệu nguồn Amazon RDS cho MySQL chạy MySQL 5. 6. 40 hoặc 5. 7. 22 hoặc muộn hơn. Bạn cũng cần một máy khách MySQL để kết nối với các phiên bản của mình và các nhóm bảo mật thích hợp cho phép bạn truy cập vào cơ sở dữ liệu của mình Đảm bảo rằng bạn đang giữ lại nhật ký nhị phân của mình trong một khoảng thời gian đủ. Để biết thêm thông tin về nhật ký nhị phân, hãy xem Nhật ký nhị phân của MySQL. Lệnh ví dụ sau hiển thị cài đặt giá trị lưu giữ thành 24 giờ
Thiết lập kịch bảnSử dụng cơ sở dữ liệu Amazon RDS for MySQL hiện có của riêng bạn với bản sao chỉ có quyền đọc hiện có hoặc tạo cơ sở dữ liệu mới. Đối với bài đăng trên blog này, tôi sử dụng cơ sở dữ liệu RDS cho MySQL hiện có và tạo một bản sao chỉ có quyền đọc Tạo cơ sở dữ liệuNếu bạn chưa có phiên bản Amazon RDS cho MySQL, hãy tạo một phiên bản. Đảm bảo định cấu hình cơ sở dữ liệu với nhóm bảo mật cho phép truy cập từ máy khách của bạn. Nếu bạn đã có cơ sở dữ liệu MySQL mà bạn muốn làm việc, bạn có thể bỏ qua bước này Tạo cơ sở dữ liệu RDS cho MySQL bằng Bảng điều khiển quản lý AWS, AWS CLI, AWS SDK hoặc mẫu AWS CloudFormation. Nếu bạn cần trợ giúp tạo phiên bản MySQL, hãy làm theo các bước trong Tạo và kết nối với cơ sở dữ liệu MySQL bằng Amazon RDS. Ảnh chụp màn hình sau đây hiển thị một phiên bản cơ sở dữ liệu đã được thiết lập và sẵn sàng sử dụng Kết nối với cơ sở dữ liệuSau khi phiên bản cơ sở dữ liệu chính của bạn được tạo và khả dụng, hãy kết nối với nó. Nếu đang sử dụng máy Amazon EC2 Linux, bạn có thể muốn thiết lập một số biến môi trường để lưu một số thao tác nhập bổ sung, như thể hiện trong các lệnh sau
Kết nối với MySQL bằng công cụ dòng lệnh MySQL và các biến, như sau
Sau khi bạn kết nối, hãy tạo một số bảng thử nghiệm và một số dữ liệu. Để minh họa, tôi đã thêm một vài bảng vào lược đồ có tên là 2. Tôi đã thêm đoạn mã sau
Tạo bản sao đã đọcThêm một bản sao chỉ có quyền đọc để khôi phục sau thảm họa. Sử dụng AWS CLI hoặc Bảng điều khiển quản lý AWS để thêm bản sao chỉ có quyền đọc của bạn. Bản sao có thể ở cùng Vùng sẵn sàng, Vùng sẵn sàng khác hoặc Khu vực AWS khác. Đây là cách tôi tạo một bản sao chỉ có quyền đọc
Sau khi bản sao của bạn được hiển thị là có sẵn, hãy định cấu hình độ trễ cho bản sao sau phiên bản chính của bạn Định cấu hình độ trễ bản saoBạn định cấu hình độ trễ sao chép trên phiên bản nguồn trước hoặc sau khi tạo bản sao chỉ có quyền đọc. Với sao chép bị trì hoãn, bạn chỉ định lượng thời gian tối thiểu, tính bằng giây, để trì hoãn sao chép từ nguồn sang bản sao có quyền đọc. Để định cấu hình độ trễ sao chép, hãy kết nối với bản sao và gọi thủ tục được lưu trữ 3 với giá trị tham số trong khoảng từ 0 đến 86400. Giá trị tối đa là 1 ngày (86400 giây). Chúng tôi khuyên bạn nên đặt giá trị ít nhất là 3600 (1 giờ) để có đủ thời gian chẩn đoán và khôi phục từ một câu lệnh SQL bị lỗi. Đây là cách tôi thiết lập này
Phục hồi từ một bảng bị rơiTrong ví dụ của tôi, 3 giờ sau khi tạo bản sao, tôi đã bỏ bảng mytesttable11 khi tôi thực sự định bỏ mytesttable01. Vì bản sao bị trễ một giờ nên tôi có thời gian để tìm hiểu điều gì đã xảy ra và ngăn lỗi lan sang bản sao. Tôi nhận ra sai lầm của mình ngay lập tức, vì vậy tôi đã thực hiện các bước khôi phục sau
Linh hoạt với các kịch bản khácNgoài việc đặt độ trễ sao chép trên bản sao chỉ có quyền đọc RDS cho MySQL hiện có, bạn có thể muốn đặt giá trị độ trễ trên phiên bản cơ sở dữ liệu nguồn thậm chí trước khi tạo bản sao chỉ có quyền đọc mới. Bạn có cơ sở dữ liệu nguồn không phải RDS không? . Tương tự như vậy, bạn có thể định cấu hình nguồn RDS để sao chép với bản sao không phải RDS bị trì hoãn Phần kết luậnKhả năng sử dụng bản sao chỉ đọc bị trì hoãn với Amazon RDS for MySQL mở ra các tùy chọn mới để khôi phục sau thảm họa. Như bạn có thể thấy, độ trễ bản sao rất hữu ích nếu bạn gặp tình huống chẳng hạn như ai đó vô tình đánh rơi một bảng cần thiết khỏi cơ sở dữ liệu của bạn. Bạn có thể dừng sao chép, khôi phục cơ sở dữ liệu cho đến thời điểm xảy ra sự cố, nâng cấp bản sao thành một phiên bản độc lập, sau đó tiếp tục ứng dụng của bạn Điều gì gây ra sự chậm trễ sao chép?Nếu bản sao SQL_THREAD là nguyên nhân gây ra sự chậm trễ sao chép, thì những sự chậm trễ đó có thể do nguyên nhân sau. Các truy vấn chạy dài trên phiên bản CSDL chính . Dung lượng hoặc dung lượng lưu trữ của lớp phiên bản DB không đủ. Truy vấn song song chạy trên phiên bản CSDL chính.
Làm cách nào để kiểm tra độ trễ sao chép trong MySQL?Cái “ HIỂN THỊ TRẠNG THÁI NÔ LỆ” . Thần chú của MySQL DBA
. Chỉ cần chạy câu lệnh SQL này trong nút nô lệ của bạn bị nghi ngờ gặp phải độ trễ sao chép.
Làm cách nào để giảm độ trễ sao chép trong MySQL?Trước khi chúng tôi tìm thấy thủ thuật LOGICAL_CLOCK, chúng tôi đã điều chỉnh quá trình xả một chút. Trước 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ới đĩa . Thay vào đó, thỉnh thoảng chúng tôi để hệ điều hành làm việc đó. Lưu ý rằng giá trị mặc định của sync_binlog là 0, nhưng chúng tôi đã sử dụng giá trị cao hơn để tránh sự cố thay vì sự cố.
Sao chép MySQL có ảnh hưởng đến hiệu suất không?Khi số lượng bản sao kết nối với nguồn tăng lên, tải, mặc dù tối thiểu, cũng tăng lên , vì mỗi bản sao sử dụng kết nối máy khách với nguồn. Ngoài ra, vì mỗi bản sao phải nhận được một bản sao đầy đủ nhật ký nhị phân của nguồn, tải mạng trên nguồn cũng có thể tăng lên và tạo ra nút cổ chai. |