Giới hạn bảng mysql

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 host3
6 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 master1
6 và
pt-table-sync --execute --replicate test.checksum master1
7 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 slave1
1 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ền
pt-table-sync --execute --replicate test.checksum \
  --sync-to-master slave1
2

ĐẦ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=host2
0

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 slave1
4 để đồ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 slave1
5 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 slave1
4,
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl
1 hoặc
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl
2 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=host2
1

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=tbl
2 và
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl
4 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=tbl
5 hoặc
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl
6 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 master2
0 (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 master2
2 để đả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 master2
0 để 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=host2
2

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=host2
3

Độ 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=host2
4

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=host2
5

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=host2
6

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án

loạ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 qua

Nhắc nhập mật khẩu khi kết nối với MySQL

--hai chiều

Bậ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-log

vỡ nợ. Vâng

Đăng nhập nhật ký nhị phân (

pt-table-sync --execute h=host1,u=msandbox,p=msandbox h=host2
5)

Chỉ định

# Don't do this in a master-master setup!
pt-table-sync --execute h=master1,D=db,t=tbl master2
2 sẽ
pt-table-sync --execute h=host1,u=msandbox,p=msandbox h=host2
7

--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=host2
8 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-client

vỡ 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=host2
00 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=host2
01 thì
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
02 đượ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ình

loạ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

--charset

hì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-tables

vỡ 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=tbl
4. 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=host2
09,
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
10 hoặc
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
11, 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=tbl
4 trở thành
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl
2 rồi đến
pt-table-sync --execute --replicate test.checksum \
  --sync-to-master slave1
4, do đó,
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl
2 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=host2
16 để 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=host2
09,
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
10 hoặc
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
11. 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 master2
0 để 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-column

loại. chuỗi

Chia nhỏ bảng trên cột này

--chunk-index

loại. chuỗi

Chia nhỏ bảng bằng cách sử dụng chỉ mục này

--chunk-size

loạ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ột

hì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

--config

loạ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ột

loạ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ánh

loạ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=host2
7

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ỗi

loạ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=host2
8

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 đột

loạ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-value

loạ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=host2
48 và
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
49

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ệu

hì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-file

hì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ình

Thự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-hosts

In 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ác

loạ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=host2
57 và
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
58. 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=host2
59)

Chỉ định

pt-table-sync --execute h=host1,D=db,t=tbl h=host2
17 sẽ
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
61

--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=host2
62. Các lựa chọn tốt khác bao gồm
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
63 và
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
64. Nếu bạn đã cài đặt hàm
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
65 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-blob

vỡ nợ. Vâng

Các cột

pt-table-sync --execute h=host1,D=db,t=tbl h=host2
66
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
67,
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
68 và
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
69

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-columns

loạ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ệu

loạ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-engines

loạ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ảng

loạ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-regex

loạ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ục

vỡ 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=host2
73 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óa

loạ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=host2
75. Đ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=host2
9

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=host2
79 được chỉ định, thì
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
75 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=host2
82 được chỉ định, thì
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
75 đượ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óa

hì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ụ"

--pid

loạ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ảng

hình thức ngắn. -P; . int

Số cổng sử dụng để kết nối

--in

Truy 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áp

loạ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 host3
0

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 slave1
4 và
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl
1 thành
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl
4

Đ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ép

loạ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=host2
89 sẽ đồng bộ bảng đó, với mệnh đề
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
90 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=host2
93 để 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=host2
93, nó sẽ kiểm tra
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
95 để thay thế. Bạn phải định cấu hình
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
96,
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
97 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=host2
98 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ẩu

loạ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-vars

loạ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=host2
99 đượ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 host3
1

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 host3
00 sẽ ghi đè giá trị mặc định của
pt-table-sync --execute host1 host2 host3
01

Công cụ in cảnh báo và tiếp tục nếu không thể đặt biến

--ổ cắm

hình thức ngắn. -S; . chuỗi

Tập tin ổ cắm để sử dụng cho kết nối

--sync-to-master

Coi 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 host3
02, 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-ok

Tiế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ịch

Sử dụng giao dịch thay vì

pt-table-sync --execute h=host1,D=db,t=tbl h=host2
75

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 host3
12 và
pt-table-sync --execute host1 host2 host3
13, bạn phải chỉ định rõ ràng
pt-table-sync --execute h=host1,D=db,t=tbl h=host2
79

Nếu bạn không chỉ định rõ ràng

pt-table-sync --execute h=host1,D=db,t=tbl h=host2
79 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=host2
82 đượ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 host3
18 và các giao dịch được bắt đầu
pt-table-sync --execute host1 host2 host3
19

--trim

pt-table-sync --execute host1 host2 host3
20
pt-table-sync --execute host1 host2 host3
21 cột ở chế độ
pt-table-sync --execute host1 host2 host3
22 và
pt-table-sync --execute host1 host2 host3
23. 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 host3
21, 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 host3
25)

Chỉ định

pt-table-sync --execute host1 host2 host3
26 sẽ
pt-table-sync --execute host1 host2 host3
27

--người sử dụng

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

--verbose

hì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ản

Hiển thị phiên bản và thoát

--[no]kiểm tra phiên bản

vỡ 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 host3
2

Đ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

--ở đâu

loại. chuỗi

Mệnh đề

pt-table-sync --execute h=host1,D=db,t=tbl h=host2
90 để 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 host3
35. 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 host3
36 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 host3
37 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 host3
3

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 host3
37;

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 host3
4

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 host3
5

Thay thế

pt-table-sync --execute host1 host2 host3
40 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