Công cụ này làm thay đổi dữ liệu nên để đảm bảo an toàn tối đa bạn nên sao lưu dữ liệu trước khi sử dụng. Khi đồng bộ hóa một máy chủ là một máy chủ sao chép với các phương thức hoặc, nó luôn thực hiện các thay đổi trên máy chủ sao chép, không bao giờ trực tiếp trên máy chủ sao chép. Nói chung, đây là cách an toàn duy nhất để đưa một bản sao trở lại đồng bộ với chủ của nó; . Tuy nhiên, những thay đổi mà nó thực hiện trên bản gốc phải là những thay đổi không hoạt động đặt dữ liệu về giá trị hiện tại của chúng và thực sự chỉ ảnh hưởng đến bản sao
đồng bộ hóa db. tbl trên host1 đến host2
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
Đồng bộ hóa tất cả các bảng trên host1 với host2 và host3
pt-table-sync --execute host1 host2 host3
Làm cho nô lệ1 có cùng dữ liệu với bản sao chính của nó
pt-table-sync --execute --sync-to-master slave1
Giải quyết sự khác biệt mà pt-table-checksum tìm thấy trên tất cả các nô lệ của master1
pt-table-sync --execute --replicate test.checksum master1
Tương tự như trên nhưng chỉ giải quyết sự khác biệt trên Slave1
pt-table-sync --execute --replicate test.checksum \ --sync-to-master slave1
Đồng bộ hóa master2 trong cấu hình sao chép chính-chính, trong đó bản sao db của master2. tbl được biết hoặc nghi ngờ là không chính xác
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl
Lưu ý rằng trong cấu hình master-master, phần sau sẽ KHÔNG làm những gì bạn muốn, bởi vì nó sẽ thực hiện các thay đổi trực tiếp trên master2, sau đó sẽ chuyển qua sao chép và thay đổi dữ liệu của master1
# Don't do this in a master-master setup! pt-table-sync --execute h=master1,D=db,t=tbl master2
RỦI RO
CẢNH BÁO. pt-table-sync thay đổi dữ liệu. Trước khi sử dụng công cụ này, vui lòng
Đọc tài liệu của công cụ
Xem lại "LỖI" đã biết của công cụ
Kiểm tra công cụ trên máy chủ phi sản xuất
Sao lưu máy chủ sản xuất của bạn và xác minh các bản sao lưu
pt-table-sync đã trưởng thành, đã được chứng minh trong thế giới thực và đã được thử nghiệm tốt, nhưng nếu sử dụng không đúng cách, nó có thể gây ra hậu quả bất lợi. Luôn kiểm tra đồng bộ hóa trước với và
SỰ MIÊU TẢ
pt-table-sync thực hiện đồng bộ hóa dữ liệu bảng một chiều và hai chiều. Nó không đồng bộ hóa cấu trúc bảng, chỉ mục hoặc bất kỳ đối tượng lược đồ nào khác. Phần sau đây mô tả đồng bộ hóa một chiều. “Đồng bộ hóa hai hướng” được mô tả sau
Công cụ này phức tạp và hoạt động theo nhiều cách khác nhau. Để sử dụng nó một cách an toàn và hiệu quả, bạn nên hiểu ba điều. mục đích, tìm sự khác biệt và chỉ định máy chủ. Ba khái niệm này có liên quan chặt chẽ với nhau và xác định cách công cụ sẽ chạy. Sau đây là logic viết tắt
if DSN has a t part, sync only that table: if 1 DSN: if --sync-to-master: The DSN is a slave. Connect to its master and sync. if more than 1 DSN: The first DSN is the source. Sync each DSN in turn. else if --replicate: if --sync-to-master: The DSN is a slave. Connect to its master, find records of differences, and fix. else: The DSN is the master. Find slaves and connect to each, find records of differences, and fix. else: if only 1 DSN and --sync-to-master: The DSN is a slave. Connect to its master, find tables and filter with --databases etc, and sync each table to the master. else: find tables, filtering with --databases etc, and sync each DSN to the first.
pt-table-sync có thể chạy theo một trong hai cách. có hay không. Mặc định là chạy mà không có khiến pt-table-sync tự động tìm thấy sự khác biệt một cách hiệu quả với một trong số các thuật toán [xem “ALGORITHMS”]. Ngoài ra, giá trị của , nếu được chỉ định, sẽ khiến pt-table-sync sử dụng các khác biệt đã tìm thấy bằng cách chạy pt-table-checksum trước đó với tùy chọn
pt-table-sync --execute host1 host2 host36 của chính nó. Nói một cách chính xác, bạn không cần sử dụng vì pt-table-sync có thể tìm thấy sự khác biệt, nhưng nhiều người sử dụng, ví dụ: nếu họ kiểm tra tổng thường xuyên bằng pt-table-checksum, sau đó sửa các khác biệt nếu cần với pt-table-sync. Nếu bạn không chắc chắn, hãy đọc kỹ tài liệu của từng công cụ và tự quyết định hoặc tham khảo ý kiến của chuyên gia
Bất kể có được sử dụng hay không, bạn cần chỉ định máy chủ nào sẽ đồng bộ hóa. Có hai cách. có hay không. Việc chỉ định làm cho pt-table-sync mong đợi một và duy nhất DSN nô lệ trên dòng lệnh. Công cụ sẽ tự động phát hiện chủ của nô lệ và đồng bộ hóa nó để dữ liệu của nó giống với chủ của nó. Điều này được thực hiện bằng cách thực hiện các thay đổi trên bản chính, sau đó chuyển qua sao chép và cập nhật bản phụ để giải quyết sự khác biệt của nó. Hãy cẩn thận mặc dù. mặc dù tùy chọn này chỉ định và đồng bộ hóa một nô lệ duy nhất, nhưng nếu có các nô lệ khác trên cùng một chủ, chúng sẽ nhận được thông qua sao chép các thay đổi dành cho nô lệ mà bạn đang cố gắng đồng bộ hóa
Ngoài ra, nếu bạn không chỉ định , DSN đầu tiên được cung cấp trên dòng lệnh là máy chủ nguồn. Chỉ có một máy chủ nguồn. Nếu bạn cũng không chỉ định , thì bạn phải chỉ định ít nhất một DSN khác làm máy chủ đích. Có thể có một hoặc nhiều máy chủ đích. Máy chủ nguồn và đích phải độc lập; . pt-table-sync sẽ chết do lỗi nếu nó phát hiện ra rằng máy chủ đích là máy chủ phụ vì các thay đổi được ghi trực tiếp vào máy chủ đích [và không an toàn khi ghi trực tiếp vào máy chủ phụ]. Hoặc, nếu bạn chỉ định [nhưng không phải ] thì pt-table-sync sẽ yêu cầu một và chỉ một DSN chính trên dòng lệnh. Công cụ sẽ tự động khám phá tất cả các nô lệ của chủ và đồng bộ hóa chúng với chủ. Đây là cách duy nhất để đồng bộ một số [tất cả] nô lệ cùng một lúc [vì chỉ chỉ định một nô lệ]
Mỗi máy chủ trên dòng lệnh được chỉ định làm DSN. DSN đầu tiên [hoặc chỉ DSN cho các trường hợp như ] cung cấp các giá trị mặc định cho các DSN khác, cho dù các DSN đó được chỉ định trên dòng lệnh hay được công cụ tự động phát hiện. Vì vậy, trong ví dụ này,
pt-table-sync --execute h=host1,u=msandbox,p=msandbox h=host2
DSN host2 kế thừa các phần DSN
pt-table-sync --execute --replicate test.checksum master16 và
pt-table-sync --execute --replicate test.checksum master17 từ DSN host1. Sử dụng tùy chọn để xem cách pt-table-sync sẽ diễn giải các DSN được cung cấp trên dòng lệnh
HẠN CHẾ
Bản sao sử dụng bản sao dựa trên hàng
pt-table-sync yêu cầu sao chép dựa trên câu lệnh khi được sử dụng với tùy chọn hoặc. Do đó, nó sẽ đặt
pt-table-sync --execute --replicate test.checksum \ --sync-to-master slave11 trên máy chủ cho phiên của nó nếu được yêu cầu. Để làm điều này, người dùng phải có đặc quyềnpt-table-sync --execute --replicate test.checksum \ --sync-to-master slave12
ĐẦU RA
Nếu bạn chỉ định tùy chọn, bạn sẽ thấy thông tin về sự khác biệt giữa các bảng. Có một hàng trên mỗi bảng. Mỗi máy chủ được in riêng. Ví dụ,
pt-table-sync --execute h=host1,D=db,t=tbl h=host20
kiểm tra bảng. test1 trên host1 yêu cầu 3 câu lệnh
pt-table-sync --execute --replicate test.checksum \ --sync-to-master slave14 để đồng bộ hóa và nó đã sử dụng thuật toán Chunk [xem “ALGORITHMS”]. Hoạt động đồng bộ hóa cho bảng này bắt đầu lúc 13. 00. 00 và kết thúc sau 17 giây [thời gian lấy từ
pt-table-sync --execute --replicate test.checksum \ --sync-to-master slave15 trên máy chủ nguồn]. Bởi vì sự khác biệt đã được tìm thấy, "EXIT STATUS" của nó là 2
Nếu bạn chỉ định tùy chọn này, bạn sẽ thấy các câu lệnh SQL thực tế mà tập lệnh sử dụng để đồng bộ hóa bảng nếu cũng được chỉ định
Nếu bạn muốn xem các câu lệnh SQL mà pt-table-sync đang sử dụng để chọn khối, đoạn, hàng, v.v. , sau đó chỉ định một lần và hai lần. Hãy cẩn thận mặc dù. điều này có thể in rất nhiều câu lệnh SQL
Có những trường hợp không có sự kết hợp nào của các câu lệnh
pt-table-sync --execute --replicate test.checksum \ --sync-to-master slave14,
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl1 hoặc
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl2 có thể giải quyết sự khác biệt mà không vi phạm một số khóa duy nhất. Ví dụ: giả sử có một khóa chính trên cột a và một khóa duy nhất trên cột b. Sau đó, không có cách nào để đồng bộ hóa hai bảng này với các câu lệnh CẬP NHẬT đơn giản
pt-table-sync --execute h=host1,D=db,t=tbl h=host21
Công cụ viết lại các truy vấn thành
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl2 và
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl4 trong trường hợp này. Điều này sẽ tự động được xử lý sau lần vi phạm chỉ mục đầu tiên, vì vậy bạn không phải lo lắng về điều đó
Hãy cẩn thận khi sử dụng pt-table-sync trong mọi thiết lập master-master. Sao chép chính chủ vốn đã phức tạp và rất dễ mắc lỗi. Bạn cần chắc chắn rằng bạn đang sử dụng công cụ chính xác để sao chép chính-chính. Xem “SYNOPSIS” để biết tổng quan về cách sử dụng đúng
Ngoài ra, hãy cẩn thận với các bảng có ràng buộc khóa ngoại với các định nghĩa
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl5 hoặc
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl6 vì những điều này có thể gây ra những thay đổi ngoài ý muốn trên các bảng con. Thấy
Nói chung, công cụ này phù hợp nhất khi các bảng của bạn có khóa chính hoặc chỉ mục duy nhất. Mặc dù nó có thể đồng bộ hóa dữ liệu trong các bảng thiếu khóa chính hoặc chỉ mục duy nhất, nhưng tốt nhất nên đồng bộ hóa dữ liệu đó bằng một cách khác
SAO CHÉP AN TOÀN
Nói chung, đồng bộ hóa bản sao chính và phụ một cách an toàn là một vấn đề không hề nhỏ. Có tất cả các loại vấn đề cần suy nghĩ, chẳng hạn như các quy trình khác thay đổi dữ liệu, cố gắng thay đổi dữ liệu trên máy con, liệu đích và nguồn có phải là một cặp chủ-chủ hay không, v.v.
Nói chung, cách an toàn để làm điều đó là thay đổi dữ liệu trên bản gốc và để các thay đổi chuyển qua bản sao sang phụ giống như bất kỳ thay đổi nào khác. Tuy nhiên, điều này chỉ hoạt động nếu có thể THAY THẾ vào bảng trên máy chủ. REPLACE chỉ hoạt động nếu có một chỉ mục duy nhất trên bảng [nếu không, nó chỉ hoạt động như một INSERT thông thường]
Nếu bảng của bạn có các khóa duy nhất, bạn nên sử dụng và/hoặc các tùy chọn để đồng bộ một nô lệ với chủ của nó. Điều này nói chung sẽ làm điều đúng đắn. Khi không có khóa duy nhất trên bảng, không có lựa chọn nào khác ngoài việc thay đổi dữ liệu trên nô lệ và pt-table-sync sẽ phát hiện ra rằng bạn đang cố làm như vậy. Nó sẽ phàn nàn và chết trừ khi bạn chỉ định
# Don't do this in a master-master setup! pt-table-sync --execute h=master1,D=db,t=tbl master20 [xem ]
Nếu bạn đang đồng bộ một bảng không có khóa chính hoặc khóa duy nhất trên cặp chính-chính, thì bạn phải thay đổi dữ liệu trên máy chủ đích. Do đó, bạn cần chỉ định
# Don't do this in a master-master setup! pt-table-sync --execute h=master1,D=db,t=tbl master22 để đảm bảo an toàn [xem phần ]. Nếu không, những thay đổi bạn thực hiện trên máy chủ đích sẽ sao chép trở lại máy chủ nguồn và thay đổi dữ liệu ở đó
Điều an toàn nói chung để thực hiện trên một cặp chủ-chính là sử dụng tùy chọn để bạn không thay đổi dữ liệu trên máy chủ đích. Bạn cũng sẽ cần chỉ định
# Don't do this in a master-master setup! pt-table-sync --execute h=master1,D=db,t=tbl master20 để ngăn pt-table-sync phàn nàn rằng nó đang thay đổi dữ liệu trên một nô lệ
THUẬT TOÁN
pt-table-sync có khung đồng bộ hóa dữ liệu chung sử dụng các thuật toán khác nhau để tìm sự khác biệt. Công cụ tự động chọn thuật toán tốt nhất cho mỗi bảng dựa trên các chỉ mục, loại cột và tùy chọn thuật toán được chỉ định bởi. Các thuật toán sau đây khả dụng, được liệt kê theo thứ tự ưu tiên mặc định của chúng
đoạn
Tìm một chỉ mục có cột đầu tiên là số [bao gồm các loại ngày và giờ] và chia phạm vi giá trị của cột thành các phần của hàng xấp xỉ. Đồng bộ hóa một đoạn tại một thời điểm bằng cách kiểm tra toàn bộ đoạn. Nếu đoạn khác nhau về nguồn và đích, hãy tổng kiểm tra từng hàng của từng đoạn để tìm các hàng khác nhau
Nó hiệu quả khi cột có đủ lực lượng để làm cho các khối có kích thước phù hợp
Tổng kiểm tra mỗi đoạn ban đầu khá nhỏ và dẫn đến lưu lượng mạng và mức tiêu thụ bộ nhớ tối thiểu. Nếu các hàng của đoạn phải được kiểm tra, thì chỉ các cột khóa chính và tổng kiểm tra được gửi qua mạng chứ không phải toàn bộ hàng. Nếu một hàng được tìm thấy là khác, toàn bộ hàng sẽ được tìm nạp, nhưng không phải trước đó
Lưu ý rằng thuật toán này sẽ không hoạt động nếu chunking một cột char trong đó tất cả các giá trị bắt đầu bằng cùng một ký tự. Trong trường hợp đó, công cụ sẽ thoát và đề xuất chọn một thuật toán khác
nhấm nháp
Tìm một chỉ mục và tăng chỉ mục trong các hàng có kích thước cố định, sử dụng thuật toán không quay lui [xem pt-archiver để biết thêm về thuật toán này]. Nó rất giống với "Chunk", nhưng thay vì tính toán trước ranh giới của từng phần của bảng dựa trên lực lượng chỉ mục, nó sử dụng __6_______9 để xác định giới hạn trên của mỗi miếng và giới hạn trên của miếng trước đó để xác định giới hạn dưới
Nó hoạt động theo các bước. một truy vấn tìm thấy hàng sẽ xác định ranh giới trên của ngòi tiếp theo và truy vấn tiếp theo tổng kiểm tra toàn bộ ngòi. Nếu nibble khác nhau giữa nguồn và đích, nó sẽ kiểm tra từng hàng nibble, giống như "Chunk"
NhómBy
Chọn toàn bộ bảng được nhóm theo tất cả các cột, có thêm cột COUNT[*]. So sánh tất cả các cột và nếu chúng giống nhau, hãy so sánh giá trị của cột COUNT[*] để xác định số lượng hàng cần chèn hoặc xóa vào đích. Hoạt động trên các bảng không có khóa chính hoặc chỉ mục duy nhất
Suối
Chọn toàn bộ bảng trong một luồng lớn và so sánh tất cả các cột. Chọn tất cả các cột. Kém hiệu quả hơn nhiều so với các thuật toán khác, nhưng hoạt động khi không có chỉ mục phù hợp để sử dụng
Các kế hoạch trong tương lai
Khả năng cho các thuật toán trong tương lai là TempTable [cái mà ban đầu tôi gọi là từ dưới lên trong các phiên bản trước của công cụ này], DrillDown [cái mà ban đầu tôi gọi là từ trên xuống] và GroupByPrefix [tương tự như cách hoạt động của Tác nhân công việc SqlYOG]. Mỗi thuật toán đều có điểm mạnh và điểm yếu. Nếu bạn muốn triển khai kỹ thuật yêu thích của mình để tìm sự khác biệt giữa hai nguồn dữ liệu trên các máy chủ có thể khác nhau, tôi sẵn sàng trợ giúp. Các thuật toán tuân thủ một giao diện đơn giản giúp bạn dễ dàng viết
ĐỒNG BỘ SONG HƯỚNG
Đồng bộ hóa hai chiều là một tính năng thử nghiệm mới. Để làm cho nó hoạt động đáng tin cậy, có một số hạn chế nghiêm ngặt
pt-table-sync --execute h=host1,D=db,t=tbl h=host22
Ví dụ: giả sử chúng tôi có ba máy chủ. c1, r1, r2. c1 là máy chủ trung tâm, một máy chủ giả cho các máy chủ khác [viz. r1 và r2 không phải là nô lệ của c1]. r1 và r2 là các máy chủ từ xa. Các hàng trong bảng foo được cập nhật và chèn trên cả ba máy chủ và chúng tôi muốn đồng bộ hóa tất cả các thay đổi giữa tất cả các máy chủ. Bảng foo có các cột
pt-table-sync --execute h=host1,D=db,t=tbl h=host23
Độ lệch tăng tự động được sử dụng để các hàng mới từ bất kỳ máy chủ nào không tạo ra các giá trị khóa chính [id] xung đột. Nói chung, các hàng mới hơn, như được xác định bởi cột ts, được ưu tiên khi tìm thấy một hàng giống nhau nhưng khác nhau trong quá trình đồng bộ hóa hai chiều. "Giống nhưng khác" có nghĩa là hai hàng có cùng giá trị khóa chính [id] nhưng khác giá trị đối với một số cột khác, chẳng hạn như cột tên trong ví dụ này. Các xung đột giống nhau nhưng khác nhau được giải quyết bằng một “xung đột”. Xung đột so sánh một số cột của các hàng cạnh tranh để xác định "người chiến thắng". Hàng chiến thắng trở thành nguồn và các giá trị của nó được sử dụng để cập nhật hàng khác
Có sự khác biệt tinh tế giữa ba cột được sử dụng để đạt được đồng bộ hóa hai chiều mà bạn nên làm quen. cột đoạn [], [các] cột so sánh [] và cột xung đột []. Cột chunk chỉ được sử dụng để chunk bảng; . g. “Ở ĐÂU >= 5 VÀ icd < 10”. Các đoạn được kiểm tra tổng và khi tổng kiểm tra các đoạn cho thấy sự khác biệt, công cụ sẽ chọn các hàng trong đoạn đó và tổng kiểm tra cho từng hàng. Nếu tổng kiểm tra cột khác nhau, các hàng có một hoặc nhiều giá trị cột xung đột. Trong đồng bộ một chiều truyền thống, xung đột là vấn đề cần tranh luận vì nó có thể được giải quyết đơn giản bằng cách cập nhật toàn bộ hàng đích bằng các giá trị của hàng nguồn. Tuy nhiên, trong đồng bộ hóa hai chiều, [theo danh sách tùy chọn
if DSN has a t part, sync only that table: if 1 DSN: if --sync-to-master: The DSN is a slave. Connect to its master and sync. if more than 1 DSN: The first DSN is the source. Sync each DSN in turn. else if --replicate: if --sync-to-master: The DSN is a slave. Connect to its master, find records of differences, and fix. else: The DSN is the master. Find slaves and connect to each, find records of differences, and fix. else: if only 1 DSN and --sync-to-master: The DSN is a slave. Connect to its master, find tables and filter with --databases etc, and sync each table to the master. else: find tables, filtering with --databases etc, and sync each DSN to the first.5 khác bên dưới] được so sánh để xác định hàng nào là “chính xác” hoặc “có thẩm quyền”;
Để đồng bộ hóa hoàn toàn cả ba máy chủ, cần có hai lần chạy pt-table-sync. Lần chạy đầu tiên đồng bộ hóa c1 và r1, sau đó đồng bộ hóa c1 và r2 bao gồm mọi thay đổi từ r1. Tại thời điểm này, c1 và r2 hoàn toàn đồng bộ, nhưng r1 thiếu bất kỳ thay đổi nào từ r2 vì c1 không có những thay đổi này khi nó và r1 được đồng bộ hóa. Vì vậy, lần chạy thứ hai là cần thiết để đồng bộ hóa các máy chủ theo cùng một thứ tự, nhưng lần này khi c1 và r1 được đồng bộ hóa, r1 sẽ nhận được các thay đổi của r2
Công cụ này không đồng bộ hóa N-cách, chỉ theo hai chiều giữa DSN đầu tiên được cung cấp trên dòng lệnh và lần lượt từng DSN tiếp theo. Vì vậy, công cụ trong ví dụ này sẽ được chạy hai lần như
pt-table-sync --execute h=host1,D=db,t=tbl h=host24
Tùy chọn kích hoạt tính năng này và thực hiện nhiều kiểm tra tình trạng khác nhau. Bạn phải chỉ định các tùy chọn khác cho pt-table-sync biết cách giải quyết xung đột cho các hàng giống nhau nhưng khác nhau. Các tùy chọn này là
pt-table-sync --execute h=host1,D=db,t=tbl h=host25
Sử dụng để kiểm tra tùy chọn này trước. Các câu lệnh SQL được in sẽ có các nhận xét cho biết câu lệnh sẽ được thực thi trên máy chủ nào nếu bạn sử dụng
Lưu ý bên kỹ thuật. DSN đầu tiên luôn là máy chủ “trái” và các DSN khác luôn là máy chủ “phải”. Vì một trong hai máy chủ có thể trở thành nguồn hoặc đích nên thật khó hiểu khi nghĩ chúng là “src” và “dst”. Do đó, chúng thường được gọi là trái và phải. Thật dễ nhớ điều này vì DSN đầu tiên luôn ở bên trái của các DSN máy chủ khác trên dòng lệnh
TRẠNG THÁI THOÁT
Sau đây là các trạng thái thoát [còn được gọi là giá trị trả về hoặc mã trả về] khi pt-table-sync kết thúc và thoát
pt-table-sync --execute h=host1,D=db,t=tbl h=host26
TÙY CHỌN
Chỉ định ít nhất một trong , , hoặc
và loại trừ lẫn nhau
Công cụ này chấp nhận các đối số dòng lệnh bổ sung. Tham khảo “SYNOPSIS” và thông tin sử dụng để biết chi tiết
--thuật toánloại. chuỗi; . Chunk, Nibble, GroupBy, Stream
Thuật toán sử dụng khi so sánh các bảng, theo thứ tự ưu tiên
Đối với mỗi bảng, pt-table-sync sẽ kiểm tra xem bảng có thể được đồng bộ hóa với các thuật toán đã cho theo thứ tự chúng được cung cấp hay không. Thuật toán đầu tiên có thể đồng bộ hóa bảng được sử dụng. Xem “ THUẬT TOÁN”
--hỏi-vượt quaNhắc nhập mật khẩu khi kết nối với MySQL
--hai chiềuBật đồng bộ hóa hai chiều giữa máy chủ đầu tiên và máy chủ tiếp theo
Xem “ĐỒNG BỘ LƯỚI HƯỚNG” để biết thêm thông tin
--[no]bin-logvỡ nợ. Vâng
Đăng nhập nhật ký nhị phân [
pt-table-sync --execute h=host1,u=msandbox,p=msandbox h=host25]
Chỉ định
# Don't do this in a master-master setup! pt-table-sync --execute h=master1,D=db,t=tbl master22 sẽ
pt-table-sync --execute h=host1,u=msandbox,p=msandbox h=host27--buffer-in-mysql
Hướng dẫn MySQL đệm các truy vấn trong bộ nhớ của nó
Tùy chọn này thêm tùy chọn
pt-table-sync --execute h=host1,u=msandbox,p=msandbox h=host28 vào các truy vấn so sánh. Điều này khiến MySQL thực thi các truy vấn và đặt chúng vào một bảng tạm thời bên trong trước khi gửi kết quả trở lại pt-table-sync. Ưu điểm của chiến lược này là pt-table-sync có thể tìm nạp các hàng như mong muốn mà không cần sử dụng nhiều bộ nhớ bên trong quy trình Perl, đồng thời giải phóng các khóa trên bảng MySQL [để giảm sự tranh chấp với các truy vấn khác]. Nhược điểm là nó sử dụng nhiều bộ nhớ hơn trên máy chủ MySQL
Có thể bạn cũng muốn để chế độ kích hoạt, bởi vì đệm vào một bảng tạm thời và sau đó tìm nạp tất cả vào bộ nhớ của Perl có lẽ là một việc ngớ ngẩn. Tùy chọn này hữu ích nhất cho các thuật toán GroupBy và Stream, có thể lấy nhiều dữ liệu từ máy chủ
--[no]buffer-to-clientvỡ nợ. Vâng
Tìm nạp từng hàng một từ MySQL trong khi so sánh
Tùy chọn này cho phép
pt-table-sync --execute h=host1,D=db,t=tbl h=host200 khiến MySQL giữ các hàng đã chọn trên máy chủ cho đến khi công cụ tìm nạp chúng. Điều này cho phép công cụ sử dụng ít bộ nhớ hơn nhưng có thể khiến các hàng bị khóa trên máy chủ lâu hơn
Nếu tùy chọn này bị vô hiệu hóa bằng cách chỉ định
pt-table-sync --execute h=host1,D=db,t=tbl h=host201 thì
pt-table-sync --execute h=host1,D=db,t=tbl h=host202 được sử dụng khiến MySQL gửi tất cả các hàng đã chọn tới công cụ cùng một lúc. Điều này có thể dẫn đến kết quả "con trỏ" được giữ mở trong thời gian ngắn hơn trên máy chủ, nhưng nếu các bảng lớn, thì có thể mất nhiều thời gian và sử dụng hết bộ nhớ của bạn
Đối với hầu hết các kích thước dữ liệu không tầm thường, bạn muốn bật tùy chọn này
Tùy chọn này bị tắt khi được sử dụng
--kênh truyền hìnhloại. chuỗi
Tên kênh được sử dụng khi kết nối với máy chủ bằng các kênh sao chép. Giả sử bạn có hai chủ, master_a ở cổng 12345, master_b ở cổng 1236 và một nô lệ được kết nối với cả hai chủ bằng các kênh chan_master_a và chan_master_b. Nếu bạn muốn chạy pt-table-sync để đồng bộ hóa nô lệ với master_a, pt-table-sync sẽ không thể xác định đâu là chủ chính xác vì SHOW SLAVE STATUS sẽ trả về 2 hàng. Trong trường hợp này, bạn có thể sử dụng –channel=chan_master_a để chỉ định tên kênh sẽ sử dụng trong lệnh SHOW SLAVE STATUS
--charsethình thức ngắn. -MỘT; . chuỗi
Bộ ký tự mặc định. Nếu giá trị là utf8, đặt chế độ binmode của Perl trên STDOUT thành utf8, chuyển tùy chọn mysql_enable_utf8 cho DBD. mysql và chạy SET NAMES UTF8 sau khi kết nối với MySQL. Bất kỳ giá trị nào khác đặt binmode trên STDOUT mà không có lớp utf8 và chạy SET NAMES sau khi kết nối với MySQL
--[no]check-con-tablesvỡ nợ. Vâng
Kiểm tra xem có ảnh hưởng xấu đến bảng con không. Khi , , hoặc được chỉ định, công cụ có thể đồng bộ hóa bảng bằng cách sử dụng câu lệnh
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl4. Nếu một bảng đang được đồng bộ hóa có các bảng con chứa
pt-table-sync --execute h=host1,D=db,t=tbl h=host209,
pt-table-sync --execute h=host1,D=db,t=tbl h=host210 hoặc
pt-table-sync --execute h=host1,D=db,t=tbl h=host211, thì công cụ sẽ in lỗi và bỏ qua bảng vì
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl4 trở thành
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl2 rồi đến
pt-table-sync --execute --replicate test.checksum \ --sync-to-master slave14, do đó,
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl2 sẽ xếp tầng vào bảng con và xóa các hàng của nó. Trong trường hợp xấu nhất, điều này có thể xóa tất cả các hàng trong bảng con
Chỉ định
pt-table-sync --execute h=host1,D=db,t=tbl h=host216 để tắt kiểm tra này. Để hoàn toàn tránh ảnh hưởng đến các bảng con, cũng chỉ định ____0_______17 để MySQL sẽ không xếp tầng bất kỳ thao tác nào từ bảng mẹ sang bảng con
Kiểm tra này chỉ được định dạng trước nếu và một trong , , hoặc được chỉ định. không kiểm tra bảng con
Thông báo lỗi chỉ in bảng con đầu tiên được tìm thấy với ràng buộc khóa ngoại
pt-table-sync --execute h=host1,D=db,t=tbl h=host209,
pt-table-sync --execute h=host1,D=db,t=tbl h=host210 hoặc
pt-table-sync --execute h=host1,D=db,t=tbl h=host211. Có thể có các bảng con bị ảnh hưởng khác--[no]check-master
vỡ nợ. Vâng
Với , hãy thử xác minh xem chủ được phát hiện có phải là chủ thực sự không
--[no]check-nô lệvỡ nợ. Vâng
Kiểm tra xem máy chủ đích có phải là nô lệ không
Nếu máy chủ đích là máy chủ phụ, thì việc thực hiện các thay đổi trên máy chủ đó thường không an toàn. Tuy nhiên, đôi khi bạn phải; . Theo mặc định, pt-table-sync sẽ khiếu nại nếu bạn cố thay đổi dữ liệu trên một nô lệ. Chỉ định
# Don't do this in a master-master setup! pt-table-sync --execute h=master1,D=db,t=tbl master20 để tắt kiểm tra này. Sử dụng nó có nguy cơ của riêng bạn--[no]check-kích hoạt
vỡ nợ. Vâng
Kiểm tra xem không có trình kích hoạt nào được xác định trên bảng đích
Trình kích hoạt đã được giới thiệu trong MySQL v5. 0. 2, vì vậy đối với các phiên bản cũ hơn, tùy chọn này không có tác dụng vì trình kích hoạt sẽ không được kiểm tra
--chunk-columnloại. chuỗi
Chia nhỏ bảng trên cột này
--chunk-indexloại. chuỗi
Chia nhỏ bảng bằng cách sử dụng chỉ mục này
--chunk-sizeloại. chuỗi; . 1000
Số lượng hàng hoặc kích thước dữ liệu trên mỗi đoạn
Kích thước của mỗi đoạn hàng cho thuật toán “Chunk” và “Nibble”. Kích thước có thể là một số hàng hoặc kích thước dữ liệu. Kích thước dữ liệu được chỉ định với hậu tố k=kibibytes, M=mebibytes, G=gibibytes. Kích thước dữ liệu được chuyển đổi thành một số hàng bằng cách chia cho độ dài trung bình của hàng
--cộthình thức ngắn. -c; . mảng
So sánh danh sách các cột được phân tách bằng dấu phẩy này
--configloại. Mảng
Đọc danh sách các tệp cấu hình được phân tách bằng dấu phẩy này;
--xung đột-cộtloại. chuỗi
So sánh cột này khi các hàng xung đột trong quá trình đồng bộ hóa
Khi tìm thấy một hàng giống nhau nhưng khác nhau, giá trị của cột này từ mỗi hàng được so sánh theo và để xác định hàng nào có dữ liệu chính xác và trở thành nguồn. Cột có thể là bất kỳ loại nào phù hợp [đây là hầu hết tất cả các loại, ngoại trừ, ví dụ: các đốm màu]
Tùy chọn này chỉ hoạt động với. Xem “ĐỒNG BỘ LƯỚI HƯỚNG” để biết thêm thông tin
--xung đột-so sánhloại. chuỗi
Chọn thuộc tính này làm nguồn
Tùy chọn này ảnh hưởng đến cách so sánh các giá trị từ các hàng xung đột. Các so sánh có thể là một trong những MAGIC_comparisons này
pt-table-sync --execute h=host1,D=db,t=tbl h=host27
Tùy chọn này chỉ hoạt động với. Xem “ĐỒNG BỘ LƯỚI HƯỚNG” để biết thêm thông tin
--conflict-lỗiloại. chuỗi; . cảnh báo
Cách báo cáo xung đột không thể giải quyết và lỗi xung đột
Tùy chọn này thay đổi cách người dùng được thông báo khi không thể giải quyết xung đột hoặc gây ra một số loại lỗi. giá trị có thể là
pt-table-sync --execute h=host1,D=db,t=tbl h=host28
Tùy chọn này chỉ hoạt động với. Xem “ĐỒNG BỘ LƯỚI HƯỚNG” để biết thêm thông tin
--ngưỡng xung độtloại. chuỗi
Số tiền mà cái này phải vượt quá cái kia
Điều này ngăn xung đột được giải quyết nếu chênh lệch tuyệt đối giữa hai giá trị nhỏ hơn số tiền này. Ví dụ: nếu hai có giá trị dấu thời gian “2009-12-01 12. 00. 00” và “2009-12-01 12. 05. 00” sự khác biệt là 5 phút. Nếu được đặt thành “5m” xung đột sẽ được giải quyết, nhưng nếu được đặt thành “6m” xung đột sẽ không giải quyết được do chênh lệch không lớn hơn hoặc bằng 6 phút. Trong trường hợp sau này, sẽ báo lỗi
Tùy chọn này chỉ hoạt động với. Xem “ĐỒNG BỘ LƯỚI HƯỚNG” để biết thêm thông tin
--conflict-valueloại. chuỗi
Sử dụng giá trị này cho một số
Tùy chọn này cung cấp giá trị cho
pt-table-sync --execute h=host1,D=db,t=tbl h=host248 và
pt-table-sync --execute h=host1,D=db,t=tbl h=host249
Tùy chọn này chỉ hoạt động với. Xem “ĐỒNG BỘ LƯỚI HƯỚNG” để biết thêm thông tin
--cơ sở dữ liệuhình thức ngắn. -d; . băm
Chỉ đồng bộ hóa danh sách cơ sở dữ liệu được phân tách bằng dấu phẩy này
Một yêu cầu phổ biến là đồng bộ các bảng từ một cơ sở dữ liệu với các bảng từ cơ sở dữ liệu khác trên cùng một máy chủ hoặc máy chủ khác. Điều này vẫn chưa thể. sẽ không làm điều đó và bạn cũng không thể làm điều đó với phần D của DSN vì không có tên bảng, nó cho rằng toàn bộ máy chủ phải được đồng bộ hóa và phần D chỉ kiểm soát cơ sở dữ liệu mặc định của kết nối
--defaults-filehình thức ngắn. -F; . chuỗi
Chỉ đọc các tùy chọn mysql từ tệp đã cho. Bạn phải cung cấp một tên đường dẫn tuyệt đối
--chạy khôPhân tích, quyết định thuật toán đồng bộ sẽ sử dụng, in và thoát
Ngụ ý để bạn có thể xem kết quả. Kết quả có cùng định dạng đầu ra mà bạn sẽ thấy khi thực sự chạy công cụ, nhưng sẽ có số 0 đối với các hàng bị ảnh hưởng. Điều này là do công cụ thực sự thực thi, nhưng dừng lại trước khi nó so sánh bất kỳ dữ liệu nào và chỉ trả về số không. Số không không có nghĩa là không có thay đổi nào được thực hiện
--động cơhình thức ngắn. -e; . băm
Chỉ đồng bộ hóa danh sách các công cụ lưu trữ được phân tách bằng dấu phẩy này
--hành hìnhThực hiện các truy vấn để làm cho các bảng có dữ liệu giống hệt nhau
Tùy chọn này làm cho pt-table-sync thực sự đồng bộ hóa dữ liệu bảng bằng cách thực hiện tất cả các truy vấn mà nó đã tạo để giải quyết sự khác biệt của bảng. Do đó, các bảng sẽ được thay đổi. Và trừ khi bạn cũng chỉ định, các thay đổi sẽ được thực hiện một cách âm thầm. Nếu đây không phải là điều bạn muốn, hãy xem hoặc
--explain-hostsIn thông tin kết nối và thoát
In ra danh sách các máy chủ mà pt-table-sync sẽ kết nối với tất cả các tùy chọn kết nối khác nhau và thoát
--float-chính xácloại. int
Độ chính xác cho chuyển đổi số thành chuỗi
pt-table-sync --execute h=host1,D=db,t=tbl h=host257 và
pt-table-sync --execute h=host1,D=db,t=tbl h=host258. Làm cho các giá trị FLOAT và DOUBLE được làm tròn thành số chữ số được chỉ định sau dấu thập phân, với hàm ROUND[] trong MySQL. Điều này có thể giúp tránh sự không khớp tổng kiểm tra do các biểu diễn dấu phẩy động khác nhau của cùng một giá trị trên các phiên bản và phần cứng MySQL khác nhau. Giá trị mặc định là không làm tròn số; . Ví dụ: nếu bạn chỉ định giá trị là 2, thì giá trị 1. 008 và 1. 009 sẽ được làm tròn thành 1. 01 và sẽ tổng kiểm tra bằng nhau--[no]foreign-key-checks
vỡ nợ. Vâng
Cho phép kiểm tra khóa ngoại [
pt-table-sync --execute h=host1,D=db,t=tbl h=host259]
Chỉ định
pt-table-sync --execute h=host1,D=db,t=tbl h=host217 sẽ
pt-table-sync --execute h=host1,D=db,t=tbl h=host261--hàm số
loại. chuỗi
Hàm băm nào bạn muốn sử dụng cho tổng kiểm tra
Mặc định là
pt-table-sync --execute h=host1,D=db,t=tbl h=host262. Các lựa chọn tốt khác bao gồm
pt-table-sync --execute h=host1,D=db,t=tbl h=host263 và
pt-table-sync --execute h=host1,D=db,t=tbl h=host264. Nếu bạn đã cài đặt hàm
pt-table-sync --execute h=host1,D=db,t=tbl h=host265 do người dùng định nghĩa, pt-table-sync sẽ phát hiện ra nó và thích sử dụng nó hơn, vì nó nhanh hơn nhiều so với hàm tích hợp sẵn. Bạn cũng có thể sử dụng MURMUR_HASH nếu bạn đã cài đặt chức năng do người dùng xác định đó. Cả hai thứ này đều được phân phối với Percona Server. Xem pt-table-checksum để biết thêm thông tin và điểm chuẩn--Cứu giúp
Hiển thị trợ giúp và thoát
--[no]hex-blobvỡ nợ. Vâng
Các cột
pt-table-sync --execute h=host1,D=db,t=tbl h=host266
pt-table-sync --execute h=host1,D=db,t=tbl h=host267,
pt-table-sync --execute h=host1,D=db,t=tbl h=host268 và
pt-table-sync --execute h=host1,D=db,t=tbl h=host269
Khi dữ liệu hàng từ nguồn được tìm nạp để tạo truy vấn để đồng bộ hóa dữ liệu [i. e. các truy vấn được nhìn thấy và được thực hiện bởi ], các cột nhị phân được gói trong HEX[] để dữ liệu nhị phân không tạo ra câu lệnh SQL không hợp lệ. Bạn có thể tắt tùy chọn này nhưng có lẽ bạn không nên
--chủ nhàhình thức ngắn. -h; . chuỗi
Kết nối với máy chủ
--ignore-columnsloại. Băm
Bỏ qua danh sách tên cột được phân tách bằng dấu phẩy này khi so sánh
Tùy chọn này khiến các cột không được so sánh. Tuy nhiên, nếu một hàng được xác định là khác nhau giữa các bảng, thì tất cả các cột trong hàng đó sẽ được đồng bộ hóa, bất kể. [Hiện tại không thể loại trừ các cột khỏi quá trình đồng bộ hóa, chỉ từ so sánh. ]
--ignore-cơ sở dữ liệuloại. Băm
Bỏ qua danh sách cơ sở dữ liệu được phân tách bằng dấu phẩy này
[cơ sở dữ liệu hệ thống như information_schema và performance_schema được bỏ qua theo mặc định]
--ignore-enginesloại. Băm; . LIÊN BANG,MRG_MyISAM
Bỏ qua danh sách các công cụ lưu trữ được phân tách bằng dấu phẩy này
--ignore-bảngloại. Băm
Bỏ qua danh sách các bảng được phân tách bằng dấu phẩy này
Tên bảng có thể đủ điều kiện với tên cơ sở dữ liệu
--ignore-bảng-regexloại. chuỗi; . Lọc
Bỏ qua các bảng có tên khớp với biểu thức chính quy Perl
--[không]gợi ý chỉ mụcvỡ nợ. Vâng
Thêm gợi ý FORCE/USE INDEX vào truy vấn đoạn và hàng
Theo mặc định, pt-table-sync thêm gợi ý FORCE/USE INDEX cho mỗi câu lệnh SQL để buộc MySQL sử dụng chỉ mục được chọn bởi thuật toán đồng bộ hóa hoặc được chỉ định bởi. Đây thường là một điều tốt, nhưng trong một số ít trường hợp, chỉ mục có thể không phải là tốt nhất cho truy vấn, vì vậy bạn có thể loại bỏ gợi ý chỉ mục bằng cách chỉ định
pt-table-sync --execute h=host1,D=db,t=tbl h=host273 và để MySQL chọn chỉ mục
Điều này không ảnh hưởng đến các truy vấn được in bởi ;
--Khóaloại. int
Khóa bảng. 0=không, 1=mỗi chu kỳ đồng bộ hóa, 2=mỗi bảng hoặc 3=toàn cầu
Điều này sử dụng
pt-table-sync --execute h=host1,D=db,t=tbl h=host275. Điều này có thể giúp ngăn các bảng bị thay đổi trong khi bạn đang kiểm tra chúng. Các giá trị có thể như sau
pt-table-sync --execute h=host1,D=db,t=tbl h=host29
Một nô lệ sao chép không bao giờ bị khóa nếu hoặc được chỉ định, vì theo lý thuyết, việc khóa bảng trên bản gốc sẽ ngăn mọi thay đổi diễn ra. [Bạn không thay đổi dữ liệu trên nô lệ của mình, phải không?] Nếu được cung cấp, chủ [nguồn] bị khóa và sau đó công cụ đợi nô lệ bắt kịp chủ trước khi tiếp tục
Nếu
pt-table-sync --execute h=host1,D=db,t=tbl h=host279 được chỉ định, thì
pt-table-sync --execute h=host1,D=db,t=tbl h=host275 không được sử dụng. Thay vào đó, khóa và mở khóa được thực hiện bằng cách bắt đầu và thực hiện các giao dịch. Ngoại lệ là nếu là 3
Nếu
pt-table-sync --execute h=host1,D=db,t=tbl h=host282 được chỉ định, thì
pt-table-sync --execute h=host1,D=db,t=tbl h=host275 được sử dụng cho bất kỳ giá trị nào của. Thấy--lock-and-rename
Khóa bảng nguồn và đích, đồng bộ hóa, sau đó hoán đổi tên. Điều này hữu ích dưới dạng BẢNG THAY ĐỔI ít chặn hơn, khi các bảng được đồng bộ hóa hợp lý với nhau [bạn có thể chọn thực hiện thông qua bất kỳ số phương tiện nào, bao gồm kết xuất và tải lại hoặc thậm chí một cái gì đó như trình lưu trữ pt]. Nó yêu cầu chính xác hai DSN và giả định rằng chúng nằm trên cùng một máy chủ, do đó, nó không phải chờ sao chép hoặc tương tự. Bàn bị khóa với LOCK TABLES
--mật khẩu mở khóahình thức ngắn. -P; . chuỗi
Mật khẩu sử dụng khi kết nối. Nếu mật khẩu chứa dấu phẩy, chúng phải được thoát bằng dấu gạch chéo ngược. "thí dụ"
--pidloại. chuỗi
Tạo tệp PID đã cho. Công cụ sẽ không khởi động nếu tệp PID đã tồn tại và PID chứa trong đó khác với PID hiện tại. Tuy nhiên, nếu tệp PID tồn tại và PID chứa trong đó không còn chạy nữa, công cụ sẽ ghi đè lên tệp PID bằng PID hiện tại. Tệp PID sẽ tự động bị xóa khi công cụ thoát
--Hải cảnghình thức ngắn. -P; . int
Số cổng sử dụng để kết nối
--inTruy vấn in sẽ giải quyết sự khác biệt
Nếu bạn không tin tưởng pt-table-sync, hoặc chỉ muốn xem nó sẽ làm gì, thì đây là một cách tốt để đảm bảo an toàn. Các truy vấn này là SQL hợp lệ và bạn có thể tự chạy chúng nếu muốn đồng bộ các bảng theo cách thủ công
--recursion-phương pháploại. mảng; . danh sách quy trình, máy chủ
Phương pháp đệ quy ưa thích được sử dụng để tìm nô lệ
phương pháp có thể là
pt-table-sync --execute host1 host2 host30
Phương pháp danh sách quy trình được ưu tiên vì SHOW SLAVE HOSTS không đáng tin cậy. Tuy nhiên, phương thức hosts là bắt buộc nếu máy chủ sử dụng cổng không chuẩn [không phải 3306]. Thông thường pt-table-sync thực hiện đúng và tìm thấy các nô lệ, nhưng bạn có thể đưa ra một phương thức ưa thích và nó sẽ được sử dụng trước. Nếu nó không tìm thấy bất kỳ nô lệ nào, các phương pháp khác sẽ được thử
--thay thếViết tất cả các câu lệnh
pt-table-sync --execute --replicate test.checksum \ --sync-to-master slave14 và
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl1 thành
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl4
Điều này được tự động bật khi cần khi có vi phạm chỉ mục duy nhất
--sao chéploại. chuỗi
Đồng bộ hóa các bảng được liệt kê là khác nhau trong bảng này
Chỉ định rằng pt-table-sync sẽ kiểm tra bảng đã chỉ định để tìm dữ liệu khác. Bảng hoàn toàn giống với đối số cùng tên của pt-table-checksum. Nghĩa là, nó chứa các bản ghi về các bảng [và phạm vi giá trị] khác nhau giữa chính và phụ
Đối với mỗi bảng và phạm vi giá trị thể hiện sự khác biệt giữa chính và phụ,
pt-table-sync --execute h=host1,D=db,t=tbl h=host289 sẽ đồng bộ bảng đó, với mệnh đề
pt-table-sync --execute h=host1,D=db,t=tbl h=host290 thích hợp, với chủ của nó
Điều này tự động đặt thành 60 và khiến các thay đổi được thực hiện trên bản chính thay vì phụ
Nếu được chỉ định, công cụ sẽ coi máy chủ bạn đã chỉ định là máy phụ và kết nối với máy chủ như bình thường để đồng bộ hóa
Nếu không, nó sẽ cố gắng sử dụng
pt-table-sync --execute h=host1,D=db,t=tbl h=host293 để tìm nô lệ của máy chủ mà bạn đã chỉ định. Nếu nó không thể tìm thấy bất kỳ nô lệ nào thông qua
pt-table-sync --execute h=host1,D=db,t=tbl h=host293, nó sẽ kiểm tra
pt-table-sync --execute h=host1,D=db,t=tbl h=host295 để thay thế. Bạn phải định cấu hình
pt-table-sync --execute h=host1,D=db,t=tbl h=host296,
pt-table-sync --execute h=host1,D=db,t=tbl h=host297 và các tùy chọn khác của từng nô lệ để điều này hoạt động bình thường. Sau khi tìm thấy các nô lệ, nó sẽ kiểm tra bảng được chỉ định trên mỗi nô lệ để tìm dữ liệu cần được đồng bộ hóa và đồng bộ hóa nó
Công cụ kiểm tra bản sao bảng của chủ trước, giả sử rằng chủ cũng có khả năng là nô lệ. Bất kỳ bảng nào cho thấy sự khác biệt sẽ KHÔNG được đồng bộ hóa trên [các] nô lệ. Ví dụ: giả sử bản sao của bạn được thiết lập là A->B, B->C, B->D. Giả sử bạn sử dụng đối số này và chỉ định máy chủ B. Công cụ sẽ kiểm tra bản sao bảng của máy chủ B. Nếu có vẻ như dữ liệu của máy chủ B trong bảng
pt-table-sync --execute h=host1,D=db,t=tbl h=host298 khác với bản sao của máy chủ A, thì công cụ sẽ không đồng bộ hóa bảng đó trên máy chủ C và D--slave-người dùng
loại. chuỗi
Đặt người dùng được sử dụng để kết nối với các nô lệ. Tham số này cho phép bạn có một người dùng khác với ít đặc quyền hơn trên các nô lệ nhưng người dùng đó phải tồn tại trên tất cả các nô lệ
--slave-mật khẩuloại. chuỗi
Đặt mật khẩu được sử dụng để kết nối với các nô lệ. Nó có thể được sử dụng với –slave-user và mật khẩu cho người dùng phải giống nhau trên tất cả các nô lệ
--set-varsloại. Mảng
Đặt các biến MySQL trong danh sách các cặp
pt-table-sync --execute h=host1,D=db,t=tbl h=host299 được phân tách bằng dấu phẩy này
Theo mặc định, bộ công cụ
pt-table-sync --execute host1 host2 host31
Các biến được chỉ định trên dòng lệnh sẽ ghi đè các giá trị mặc định này. Ví dụ: chỉ định
pt-table-sync --execute host1 host2 host300 sẽ ghi đè giá trị mặc định của
pt-table-sync --execute host1 host2 host301
Công cụ in cảnh báo và tiếp tục nếu không thể đặt biến
--ổ cắmhình thức ngắn. -S; . chuỗi
Tập tin ổ cắm để sử dụng cho kết nối
--sync-to-masterCoi DSN là nô lệ và đồng bộ hóa nó với chủ của nó
Đối xử với máy chủ bạn đã chỉ định là nô lệ. Kiểm tra
pt-table-sync --execute host1 host2 host302, kết nối với chủ của máy chủ và coi chủ là nguồn và nô lệ là đích. Nguyên nhân thay đổi được thực hiện trên master. Đặt thành 60 theo mặc định, đặt thành 1 theo mặc định và tắt theo mặc định. Xem thêm , thay đổi hành vi của tùy chọn này--những cái bàn
hình thức ngắn. -t; . băm
Chỉ đồng bộ hóa danh sách bảng được phân tách bằng dấu phẩy này
Tên bảng có thể đủ điều kiện với tên cơ sở dữ liệu
--timeout-okTiếp tục nếu thất bại
Nếu bạn chỉ định và nô lệ không bắt kịp vị trí của chủ trước khi hết thời gian chờ, hành vi mặc định là hủy bỏ. Tùy chọn này làm cho công cụ tiếp tục hoạt động. Cảnh báo. nếu bạn đang cố gắng so sánh nhất quán giữa hai máy chủ, có thể bạn không muốn tiếp tục sau khi hết thời gian chờ
--[không] giao dịchSử dụng giao dịch thay vì
pt-table-sync --execute h=host1,D=db,t=tbl h=host275
Mức độ chi tiết của các giao dịch bắt đầu và thực hiện được kiểm soát bởi. Tính năng này được bật theo mặc định, nhưng vì bị tắt theo mặc định nên nó không có tác dụng
Hầu hết các tùy chọn kích hoạt khóa cũng vô hiệu hóa giao dịch theo mặc định, vì vậy nếu bạn muốn sử dụng khóa giao dịch [thông qua
pt-table-sync --execute host1 host2 host312 và
pt-table-sync --execute host1 host2 host313, bạn phải chỉ định rõ ràng
pt-table-sync --execute h=host1,D=db,t=tbl h=host279
Nếu bạn không chỉ định rõ ràng
pt-table-sync --execute h=host1,D=db,t=tbl h=host279 pt-table-sync sẽ quyết định trên cơ sở mỗi bảng xem nên sử dụng giao dịch hay khóa bảng. Nó hiện đang sử dụng các giao dịch trên các bảng InnoDB và khóa bảng trên tất cả các bảng khác
Nếu
pt-table-sync --execute h=host1,D=db,t=tbl h=host282 được chỉ định, thì pt-table-sync sẽ hoàn toàn không sử dụng các giao dịch [ngay cả đối với các bảng InnoDB] và việc khóa được kiểm soát bởi
Khi được bật, rõ ràng hoặc ngầm định, mức cô lập giao dịch được đặt
pt-table-sync --execute host1 host2 host318 và các giao dịch được bắt đầu
pt-table-sync --execute host1 host2 host319--trim
pt-table-sync --execute host1 host2 host320
pt-table-sync --execute host1 host2 host321 cột ở chế độ
pt-table-sync --execute host1 host2 host322 và
pt-table-sync --execute host1 host2 host323. Trợ giúp khi so sánh MySQL 4. 1 đến >= 5. 0
Điều này hữu ích khi bạn không quan tâm đến sự khác biệt về dấu cách giữa các phiên bản MySQL khác nhau trong cách xử lý dấu cách của chúng. mysql 5. 0 trở về sau đều giữ lại khoảng trắng ở cuối trong
pt-table-sync --execute host1 host2 host321, trong khi các phiên bản trước sẽ loại bỏ chúng--[no]unique-checks
vỡ nợ. Vâng
Cho phép kiểm tra khóa duy nhất [
pt-table-sync --execute host1 host2 host325]
Chỉ định
pt-table-sync --execute host1 host2 host326 sẽ
pt-table-sync --execute host1 host2 host327
hình thức ngắn. -ư; . chuỗi
Người dùng để đăng nhập nếu không phải là người dùng hiện tại
--verbosehình thức ngắn. -v; . Vâng
In kết quả của hoạt động đồng bộ hóa
Xem “OUTPUT” để biết thêm chi tiết về đầu ra
--phiên bảnHiển thị phiên bản và thoát
--[no]kiểm tra phiên bảnvỡ nợ. Vâng
Kiểm tra phiên bản mới nhất của Bộ công cụ Percona, MySQL và các chương trình khác
Đây là tính năng "tự động kiểm tra các bản cập nhật" tiêu chuẩn, với hai tính năng bổ sung. Đầu tiên, công cụ kiểm tra phiên bản của chính nó và cả các phiên bản của phần mềm sau. hệ điều hành, Giám sát và quản lý Percona [PMM], MySQL, Perl, trình điều khiển MySQL cho Perl [DBD. mysql] và Bộ công cụ Percona. Thứ hai, nó kiểm tra và cảnh báo về các phiên bản có vấn đề đã biết. Ví dụ: MySQL5. 5. 25 có một lỗi nghiêm trọng và được phát hành lại thành 5. 5. 25a
Một kết nối an toàn đến máy chủ cơ sở dữ liệu Kiểm tra phiên bản của Percona được thực hiện để thực hiện các kiểm tra này. Mỗi yêu cầu được máy chủ ghi lại, bao gồm số phiên bản phần mềm và ID duy nhất của hệ thống được kiểm tra. ID được tạo bởi tập lệnh cài đặt Bộ công cụ Percona hoặc khi lệnh gọi cơ sở dữ liệu Kiểm tra phiên bản được thực hiện lần đầu tiên
Mọi cập nhật hoặc sự cố đã biết đều được in ra STDOUT trước khi công cụ xuất bình thường. Tính năng này sẽ không bao giờ can thiệp vào hoạt động bình thường của công cụ
Để biết thêm thông tin, hãy truy cập https. //www. percona. com/doc/percona-toolkit/MỚI NHẤT/kiểm tra phiên bản. html
--Chờ đãhình thức ngắn. -w; . thời gian
Chờ đợi bao lâu để nô lệ đuổi kịp chủ nhân
Làm cho chủ đợi nô lệ bắt kịp sao chép trước khi so sánh các bảng. Giá trị là số giây phải đợi trước khi hết thời gian [xem thêm ]. Đặt thành 1 và 0 theo mặc định. Nếu bạn thấy một lỗi như sau,
pt-table-sync --execute host1 host2 host32
Điều đó có nghĩa là đã hết thời gian chờ và bạn cần tăng thời gian chờ
Giá trị mặc định của tùy chọn này bị ảnh hưởng bởi các tùy chọn khác. Để xem giá trị nào có hiệu lực, hãy chạy với
Để tắt hoàn toàn chế độ chờ [ngoại trừ khóa], hãy chỉ định 0. Điều này hữu ích khi nô lệ bị chậm trên các bảng không được đồng bộ hóa
--ở đâuloại. chuỗi
Mệnh đề
pt-table-sync --execute h=host1,D=db,t=tbl h=host290 để hạn chế đồng bộ hóa với một phần của bảng--[no]zero-chunk
vỡ nợ. Vâng
Thêm một đoạn cho các hàng có giá trị bằng không hoặc bằng không. Chỉ có tác dụng khi được chỉ định. Mục đích của đoạn 0 là để nắm bắt một số lượng lớn các giá trị 0 có thể làm mất cân bằng kích thước của đoạn đầu tiên. Ví dụ: nếu nhiều số âm được chèn vào một cột số nguyên không dấu khiến chúng được lưu dưới dạng số không, thì các giá trị bằng không này được ghi lại bởi đoạn số 0 thay vì đoạn đầu tiên và tất cả các giá trị khác không của nó
TÙY CHỌN DSN
Các tùy chọn DSN này được sử dụng để tạo DSN. Mỗi tùy chọn được đưa ra như
pt-table-sync --execute host1 host2 host335. Các tùy chọn phân biệt chữ hoa chữ thường, vì vậy P và p không phải là cùng một tùy chọn. Không thể có khoảng trắng trước hoặc sau
pt-table-sync --execute host1 host2 host336 và nếu giá trị chứa khoảng trắng thì giá trị đó phải được trích dẫn. Các tùy chọn DSN được phân tách bằng dấu phẩy. Xem trang chủ bộ công cụ percona để biết chi tiết đầy đủ
A
dsn. bộ ký tự; . Vâng
Bộ ký tự mặc định
D
dsn. cơ sở dữ liệu; . Vâng
Cơ sở dữ liệu chứa bảng sẽ được đồng bộ hóa
F
dsn. mysql_read_default_file; . Vâng
Chỉ đọc các tùy chọn mặc định từ tệp đã cho
h
dsn. chủ nhà; . Vâng
Kết nối với máy chủ
p
dsn. mật khẩu mở khóa; . Vâng
Mật khẩu sử dụng khi kết nối. Nếu mật khẩu chứa dấu phẩy, chúng phải được thoát bằng dấu gạch chéo ngược. "thí dụ"
P
dsn. Hải cảng; . Vâng
Số cổng sử dụng để kết nối
S
dsn. mysql_socket; . Vâng
Tập tin ổ cắm để sử dụng cho kết nối
t
sao chép. Vâng
Bảng được đồng bộ hóa
u
dsn. người sử dụng; . Vâng
Người dùng để đăng nhập nếu không phải là người dùng hiện tại
MÔI TRƯỜNG
Biến môi trường
pt-table-sync --execute host1 host2 host337 cho phép đầu ra gỡ lỗi chi tiết thành STDERR. Để bật gỡ lỗi và ghi tất cả đầu ra vào một tệp, hãy chạy công cụ như
pt-table-sync --execute host1 host2 host33
Hãy cẩn thận. đầu ra gỡ lỗi rất lớn và có thể tạo ra vài megabyte đầu ra
CHÚ Ý
Using might expose passwords. When debug is enabled, all command line parameters are shown in the output.
YÊU CẦU HỆ THỐNG
Bạn cần Perl, DBI, DBD. mysql và một số gói cốt lõi phải được cài đặt trong bất kỳ phiên bản Perl mới hợp lý nào
LỖI
Để biết danh sách các lỗi đã biết, hãy xem http. //www. percona. com/bugs/pt-table-sync
Vui lòng báo cáo lỗi tại https. //jira. percona. com/dự án/PT. Bao gồm các thông tin sau trong báo cáo lỗi của bạn
Toàn bộ dòng lệnh được sử dụng để chạy công cụ
Dụng cụ
Phiên bản MySQL của tất cả các máy chủ liên quan
Đầu ra từ công cụ bao gồm STDERR
Tệp đầu vào [tệp log/dump/config, v.v. ]
Nếu có thể, hãy bao gồm đầu ra gỡ lỗi bằng cách chạy công cụ với
pt-table-sync --execute host1 host2 host337;
TẢI XUỐNG
Truy cập http. //www. percona. com/software/percona-toolkit/ để tải xuống bản phát hành mới nhất của Bộ công cụ Percona. Hoặc, tải bản phát hành mới nhất từ dòng lệnh
pt-table-sync --execute host1 host2 host34
Bạn cũng có thể nhận các công cụ riêng lẻ từ bản phát hành mới nhất
pt-table-sync --execute host1 host2 host35
Thay thế
pt-table-sync --execute host1 host2 host340 bằng tên của bất kỳ công cụ nào
TÁC GIẢ
Nam tước Schwartz
SỰ NHÌN NHẬN
Công việc của tôi một phần dựa trên công việc của Giuseppe Maxia trên cơ sở dữ liệu phân tán, http. //www. sysadminmag. com/articles/2004/0408/ và mã bắt nguồn từ bài viết đó. Có thêm lời giải thích và liên kết tới mã tại http. //www. các môn đệ. org/?node_id=381053
Một lập trình viên khác đã mở rộng công việc của Maxia hơn nữa. Fabien Coelho đã thay đổi và tổng quát hóa kỹ thuật của Maxia, giới thiệu tính đối xứng và tránh một số vấn đề có thể gây ra xung đột tổng kiểm tra quá thường xuyên. Công việc này đã phát triển thành pg_comparator, http. //www. coelho. mạng/pg_comparator/. Coelho cũng giải thích thêm về kỹ thuật này trong một bài báo có tiêu đề “So sánh từ xa các bảng cơ sở dữ liệu” [http. //cri. ensmp. fr/classement/doc/A-375. pdf]
Tài liệu hiện có này chủ yếu đề cập đến cách tìm sự khác biệt giữa các bảng, chứ không phải cách giải quyết chúng sau khi tìm thấy. Tôi cần một công cụ không chỉ tìm thấy chúng một cách hiệu quả mà sau đó sẽ giải quyết chúng. Lần đầu tiên tôi bắt đầu nghĩ về cách cải thiện kỹ thuật hơn nữa với bài viết của mình http. //tinyurl. com/mysql-data-diff-algorithm, nơi tôi đã thảo luận về một số vấn đề với thuật toán “từ dưới lên” của Maxia/Coelho. Sau khi viết bài báo đó, tôi bắt đầu viết công cụ này. Tôi muốn thực sự triển khai thuật toán của họ với một số cải tiến để tôi chắc chắn rằng mình đã hiểu nó hoàn toàn. Tôi phát hiện ra rằng nó không như tôi nghĩ, và nó phức tạp hơn nhiều so với những gì tôi thấy lúc đầu. Fabien Coelho đã rất tử tế khi trả lời một số câu hỏi qua email
Các phiên bản đầu tiên của công cụ này đã triển khai một phiên bản của thuật toán Coelho/Maxia mà tôi gọi là “từ dưới lên” và của riêng tôi, mà tôi gọi là “từ trên xuống”. ” Các thuật toán đó phức tạp hơn đáng kể so với các thuật toán hiện tại và tôi đã xóa chúng khỏi công cụ này và có thể bổ sung lại sau. Những cải tiến đối với thuật toán từ dưới lên là công việc ban đầu của tôi, cũng như thuật toán từ trên xuống. Các kỹ thuật để thực sự giải quyết sự khác biệt cũng là công việc của riêng tôi
Một công cụ khác có thể đồng bộ hóa các bảng là SQLyog Job Agent từ webyog. Cảm ơn Rohit Nadhani, tác giả của SJA, về những cuộc trò chuyện về các kỹ thuật chung. Có so sánh pt-table-sync và SJA tại http. //tinyurl. com/maatkit-vs-sqlyog
Cảm ơn những người và tổ chức sau đây đã giúp đỡ bằng nhiều cách
Tập đoàn Rimm-Kaufman http. //www. rimmkaufman. com/, MySQL AB http. //www. mysql. com/, Blue Ridge InternetWorks http. //www. công trình gạch. com/, Percona http. //www. percona. com/, Fabien Coelho, Giuseppe Maxia và những người khác tại MySQL AB, Kristian Koehntopp [MySQL AB], Rohit Nadhani [WebYog], Các nhà sư hữu ích tại Perlmonks, Và những người khác quá nhiều để đề cập đến
GIỚI THIỆU BỘ CÔNG CỤ PERCONA
Công cụ này là một phần của Bộ công cụ Percona, một tập hợp các công cụ dòng lệnh nâng cao dành cho MySQL do Percona phát triển. Bộ công cụ Percona được tách ra từ hai dự án vào tháng 6 năm 2011. Maatkit và Aspersa. Những dự án đó được tạo ra bởi Nam tước Schwartz và được phát triển chủ yếu bởi ông và Daniel Nichter. Truy cập http. //www. percona. com/software/ để tìm hiểu về phần mềm mã nguồn mở, miễn phí khác từ Percona
BẢN QUYỀN, GIẤY PHÉP VÀ BẢO HÀNH
Chương trình này có bản quyền 2011-2021 Percona LLC và/hoặc các chi nhánh của nó, 2007-2011 Baron Schwartz
CHƯƠNG TRÌNH NÀY ĐƯỢC CUNG CẤP “NGUYÊN TRẠNG” VÀ KHÔNG CÓ BẤT KỲ BẢO ĐẢM RÕ RÀNG HAY NGỤ Ý NÀO, BAO GỒM, KHÔNG GIỚI HẠN, CÁC BẢO ĐẢM NGỤ Ý VỀ KHẢ NĂNG BÁN ĐƯỢC VÀ SỰ PHÙ HỢP CHO MỘT MỤC ĐÍCH CỤ THỂ
Chương trình này là phần mềm miễn phí; . Trên UNIX và các hệ thống tương tự, bạn có thể cấp `man perlgpl' hoặc `man perlartistic' để đọc các giấy phép này
Bạn đã nhận được một bản sao Giấy phép Công cộng GNU cùng với chương trình này; . , 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA