Amazon Best VPN GoSearch

ไอคอน Fav ของ OnWorks

pt-table-syncp - ออนไลน์ใน Cloud

เรียกใช้ pt-table-syncp ในผู้ให้บริการโฮสต์ฟรีของ OnWorks ผ่าน Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS

นี่คือคำสั่ง pt-table-syncp ที่สามารถเรียกใช้ในผู้ให้บริการโฮสต์ฟรีของ OnWorks โดยใช้หนึ่งในเวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS

โครงการ:

ชื่อ


pt-table-sync - ซิงโครไนซ์ข้อมูลตาราง MySQL อย่างมีประสิทธิภาพ

เรื่องย่อ


การใช้งาน: pt-table-sync [ตัวเลือก] DSN [DSN]

pt-table-sync ซิงโครไนซ์ข้อมูลระหว่างตาราง MySQL อย่างมีประสิทธิภาพ

เครื่องมือนี้เปลี่ยนข้อมูล ดังนั้นเพื่อความปลอดภัยสูงสุด คุณควรสำรองข้อมูลของคุณก่อนใช้
มัน. เมื่อซิงโครไนซ์เซิร์ฟเวอร์ที่เป็นทาสการจำลองด้วย "--replicate" หรือ
เมธอด "--sync-to-master" มัน เสมอ ทำการเปลี่ยนแปลงในต้นแบบการจำลองแบบ ไม่เคย
ทาสการจำลองโดยตรง โดยทั่วไปแล้ว นี่เป็นวิธีเดียวที่ปลอดภัยในการนำแบบจำลองมา
กลับประสานกับเจ้านายของมัน การเปลี่ยนแปลงแบบจำลองมักจะเป็นที่มาของ
ปัญหาในตอนแรก อย่างไรก็ตาม การเปลี่ยนแปลงที่ทำกับต้นแบบควรเป็น no-op
การเปลี่ยนแปลงที่กำหนดข้อมูลให้เป็นค่าปัจจุบัน และมีผลกับแบบจำลองเท่านั้น

ซิงค์ db.tbl บน host1 กับ host2:

pt-table-sync -- ดำเนินการ h=host1,D=db,t=tbl h=host2

ซิงค์ตารางทั้งหมดบน host1 กับ host2 และ host3:

pt-table-sync -- เรียกใช้งาน host1 host2 host3

ทำให้ slave1 มีข้อมูลเหมือนกับต้นแบบการจำลองแบบ:

pt-table-sync --execute --sync-to-master ทาส 1

แก้ไขความแตกต่างที่ pt-table-checksum ที่พบในทาสทั้งหมดของ master1:

pt-table-sync --execute --replicate test.checksum มาสเตอร์1

เหมือนข้างบนแต่แก้ไขเฉพาะความแตกต่างใน slave1:

pt-table-sync --execute -- ทำซ้ำ test.checksum \
--sync-to-master ทาส 1

ซิงค์ master2 ในการกำหนดค่าการจำลองแบบมาสเตอร์โดยที่สำเนาของ db.tbl . ของ master2
ทราบหรือสงสัยว่าไม่ถูกต้อง:

pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl

โปรดทราบว่าในการกำหนดค่ามาสเตอร์-มาสเตอร์ ต่อไปนี้จะไม่ทำในสิ่งที่คุณต้องการ
เพราะมันจะทำการเปลี่ยนแปลงโดยตรงบน master2 ซึ่งจะไหลผ่านการจำลองแบบ
และเปลี่ยนข้อมูลของ master1:

# อย่าทำเช่นนี้ในการตั้งค่าระดับมาสเตอร์!
pt-table-sync -- เรียกใช้งาน h=master1,D=db,t=tbl master2

ความเสี่ยง


คำเตือน: pt-table-sync เปลี่ยนข้อมูล! ก่อนใช้เครื่องมือนี้ โปรด:

· อ่านเอกสารประกอบของเครื่องมือ

·ตรวจสอบเครื่องมือที่เรียกว่า "BUGS"

· ทดสอบเครื่องมือบนเซิร์ฟเวอร์ที่ไม่ได้ใช้งานจริง

·สำรองเซิร์ฟเวอร์ที่ใช้งานจริงของคุณและตรวจสอบการสำรองข้อมูล

pt-table-sync นั้นสมบูรณ์ พิสูจน์แล้วในโลกแห่งความเป็นจริง และผ่านการทดสอบอย่างดี แต่ถ้าใช้
อย่างไม่ถูกต้องอาจมีผลเสีย ทดสอบการซิงค์ก่อนเสมอด้วย
"--dry-run" และ "--print"

DESCRIPTION


pt-table-sync ทำการซิงโครไนซ์ข้อมูลตารางทางเดียวและแบบสองทิศทาง มันไม่ ไม่
ซิงโครไนซ์โครงสร้างตาราง ดัชนี หรืออ็อบเจ็กต์สคีมาอื่นๆ ต่อไปนี้
อธิบายการซิงโครไนซ์ทางเดียว "BIDIRECTIONAL SYNCING" จะอธิบายในภายหลัง

เครื่องมือนี้ซับซ้อนและใช้งานได้หลายวิธี เพื่อการใช้งานอย่างปลอดภัยและ
อย่างมีประสิทธิภาพ คุณควรเข้าใจสามสิ่ง: จุดประสงค์ของ "--ทำซ้ำ" การค้นหา
ความแตกต่างและการระบุโฮสต์ แนวคิดทั้งสามนี้มีความสัมพันธ์อย่างใกล้ชิดและกำหนด
เครื่องมือจะทำงานอย่างไร ต่อไปนี้เป็นตรรกะโดยย่อ:

ถ้า DSN มีบางส่วน ให้ซิงค์เฉพาะตารางนั้น:
ถ้า 1 DSN:
ถ้า --sync-to-master:
DSN เป็นทาส เชื่อมต่อกับต้นแบบและซิงค์
ถ้ามีมากกว่า 1 DSN:
DSN แรกคือต้นทาง ซิงค์แต่ละ DSN ตามลำดับ
อื่น ๆ ถ้า --replicate:
ถ้า --sync-to-master:
DSN เป็นทาส เชื่อมต่อกับต้นแบบ ค้นหาบันทึก
ของความแตกต่างและการแก้ไข
อื่น:
DSN เป็นหลัก ค้นหาทาสและเชื่อมต่อกับแต่ละคน
ค้นหาบันทึกความแตกต่างและแก้ไข
อื่น:
ถ้ามีเพียง 1 DSN และ --sync-to-master:
DSN เป็นทาส เชื่อมต่อกับต้นแบบ ค้นหาตารางและ
กรองด้วย --databases ฯลฯ และซิงค์แต่ละตารางกับต้นแบบ
อื่น:
ค้นหาตาราง กรองด้วย --databases ฯลฯ และซิงค์แต่ละรายการ
DSN ไปที่แรก

pt-table-sync สามารถทำงานด้วยวิธีใดวิธีหนึ่งจากสองวิธี: ด้วย "--replicate" หรือไม่มี ค่าเริ่มต้นคือ
ให้ทำงานโดยไม่มี "--replicate" ซึ่งทำให้ pt-table-sync ค้นหาความแตกต่างโดยอัตโนมัติ
อย่างมีประสิทธิภาพด้วยหนึ่งในหลาย ๆ อัลกอริธึม (ดู "ALGORITHMS") อีกทางหนึ่งคือค่า
ของ "--replicate" หากระบุไว้ จะทำให้ pt-table-sync ใช้ความแตกต่างที่พบแล้ว
โดยก่อนหน้านี้เคยรัน pt-table-checksum ด้วยตัวเลือก "--replicate" อย่างเคร่งครัด
พูดคุณไม่จำเป็นต้องใช้ "--replicate" เพราะ pt-table-sync สามารถค้นหาความแตกต่างได้
แต่หลายคนใช้ " --replicate" ตัวอย่างเช่น ถ้าพวกเขาตรวจสอบผลรวมเป็นประจำโดยใช้ pt-table-
checksum จากนั้นแก้ไขความแตกต่างตามต้องการด้วย pt-table-sync หากไม่แน่ใจ อ่านแต่ละข้อ
เอกสารของเครื่องมืออย่างรอบคอบและตัดสินใจด้วยตัวเอง หรือปรึกษากับผู้เชี่ยวชาญ

ไม่ว่าจะใช้ "--replicate" หรือไม่ คุณต้องระบุโฮสต์ที่จะ
ซิงค์. มีสองวิธี: ใช้ "--sync-to-master" หรือไม่มีก็ได้ ระบุ
"--sync-to-master" ทำให้ pt-table-sync คาดหวัง DSN ทาสเพียงตัวเดียวบนบรรทัดคำสั่ง
เครื่องมือจะค้นหาต้นแบบของทาสโดยอัตโนมัติและซิงค์เพื่อให้ข้อมูลเป็น
เช่นเดียวกับเจ้านายของมัน สิ่งนี้ทำได้โดยการเปลี่ยนแปลงต้นแบบซึ่งแล้ว
ไหลผ่านการจำลองแบบและอัปเดตทาสเพื่อแก้ไขความแตกต่าง Be ระมัดระวัง
แม้: แม้ว่าตัวเลือกนี้จะระบุและซิงค์ทาสเดี่ยว หากมีทาสอื่น
ในมาสเตอร์คนเดียวกัน พวกเขาจะได้รับการเปลี่ยนแปลงที่ตั้งใจไว้สำหรับสเลฟผ่านการทำซ้ำ
ที่คุณพยายามจะซิงค์

หรือถ้าคุณไม่ระบุ "--sync-to-master" DSN แรกที่กำหนดบน
บรรทัดคำสั่งเป็นโฮสต์ต้นทาง มีโฮสต์ต้นทางเพียงแห่งเดียวเท่านั้น หากคุณไม่ทำเช่นกัน
ระบุ "--replicate" จากนั้นคุณต้องระบุ DSN อื่นอย่างน้อยหนึ่งรายการเป็นปลายทาง
เจ้าภาพ. สามารถมีโฮสต์ปลายทางได้ตั้งแต่หนึ่งรายการขึ้นไป โฮสต์ต้นทางและปลายทางจะต้อง
เป็นอิสระ; ไม่สามารถอยู่ในโทโพโลยีการจำลองแบบเดียวกันได้ pt-table-sync จะตายด้วย
ข้อผิดพลาดหากตรวจพบว่าโฮสต์ปลายทางเป็นทาสเนื่องจากการเปลี่ยนแปลงถูกเขียนขึ้น
โดยตรงไปยังโฮสต์ปลายทาง (และไม่ปลอดภัยที่จะเขียนถึงทาสโดยตรง) หรือถ้าคุณ
ระบุ "--replicate" (แต่ไม่ใช่ "--sync-to-master") จากนั้น pt-table-sync คาดว่าจะมีเพียงหนึ่งเดียวเท่านั้น
DSN หลักหนึ่งตัวบนบรรทัดคำสั่ง เครื่องมือจะค้นหามาสเตอร์ทั้งหมดโดยอัตโนมัติ
ทาสและซิงค์กับต้นแบบ นี่เป็นวิธีเดียวที่จะซิงค์ทาส (ทั้งหมด) หลายตัวที่
ครั้งเดียว (เพราะ "--sync-to-master" ระบุเพียงหนึ่งทาส)

แต่ละโฮสต์บนบรรทัดคำสั่งถูกระบุเป็น DSN DSN แรก (หรือ DSN เฉพาะกรณี
เช่น "--sync-to-master") ให้ค่าเริ่มต้นสำหรับ DSN อื่นๆ ไม่ว่าจะเป็น DSN อื่นๆ
ระบุไว้ในบรรทัดคำสั่งหรือเครื่องมือค้นพบโดยอัตโนมัติ ในตัวอย่างนี้

pt-table-sync -- ดำเนินการ h=host1,u=msandbox,p=msandbox h=host2

host2 DSN สืบทอดส่วน "u" และ "p" DSN จาก host1 DSN ใช้
ตัวเลือก "--explain-hosts" เพื่อดูว่า pt-table-sync จะตีความ DSN ที่ให้ไว้ใน
บรรทัดคำสั่ง.

เอาท์พุท


หากคุณระบุตัวเลือก "--verbose" คุณจะเห็นข้อมูลเกี่ยวกับความแตกต่าง
ระหว่างโต๊ะ มีหนึ่งแถวต่อตาราง แต่ละเซิร์ฟเวอร์จะพิมพ์แยกกัน สำหรับ
ตัวอย่าง,

# กำลังซิงค์ h=host1,D=test,t=test1
# ลบ แทนที่ INSERT UPDATE ALGORITHM START END EXIT DATABASE.TABLE
# 0 0 3 0 ก้อน 13:00:00 13:00:17 2 test.test1

ตาราง test.test1 บนโฮสต์ 1 ต้องใช้คำสั่ง "INSERT" 3 คำสั่งเพื่อซิงโครไนซ์และใช้คำสั่ง
อัลกอริทึมแบบกลุ่ม (ดู "อัลกอริทึม") การดำเนินการซิงค์สำหรับตารางนี้เริ่มต้นเวลา 13:00:00 น.
และสิ้นสุดในอีก 17 วินาทีต่อมา (เวลาที่นำมาจาก "NOW()" บนโฮสต์ต้นทาง) เพราะ
พบความแตกต่าง "สถานะออก" คือ 2

หากคุณระบุตัวเลือก "--print" คุณจะเห็นคำสั่ง SQL จริงที่สคริปต์
ใช้เพื่อซิงโครไนซ์ตารางหากระบุ "--execute" ด้วย

หากคุณต้องการดูคำสั่ง SQL ที่ pt-table-sync ใช้ในการเลือกส่วนต่างๆ
แทะ แถว ฯลฯ จากนั้นระบุ "--print" หนึ่งครั้งและ "--verbose" สองครั้ง ระวัง
แม้ว่า: สิ่งนี้สามารถพิมพ์คำสั่ง SQL ได้จำนวนมาก

มีบางกรณีที่คำสั่ง "INSERT", "UPDATE" หรือ "DELETE" รวมกันไม่ได้
แก้ไขความแตกต่างโดยไม่ละเมิดคีย์เฉพาะบางตัว ตัวอย่างเช่น สมมติว่ามี a
คีย์หลักในคอลัมน์ a และคีย์เฉพาะบนคอลัมน์ b ถ้าอย่างนั้นก็ไม่มีทางที่จะซิงค์สิ่งเหล่านี้ได้
สองตารางพร้อมคำสั่ง UPDATE ตรงไปตรงมา:

-
| a | ข | | a | ข |
-
- 1 | 2 | - 1 | 1 |
- 2 | 1 | - 2 | 2 |
-

เครื่องมือเขียนข้อความค้นหาใหม่เป็น "DELETE" และ "REPLACE" ในกรณีนี้ โดยอัตโนมัติ
จัดการหลังจากการละเมิดดัชนีครั้งแรก ดังนั้นคุณไม่ต้องกังวลกับมัน

โปรดใช้ความระมัดระวังเมื่อใช้ pt-table-sync ในการตั้งค่ามาสเตอร์มาสเตอร์ การจำลองแบบมาสเตอร์-มาสเตอร์
เป็นเรื่องยุ่งยากโดยเนื้อแท้ และง่ายต่อการทำผิดพลาด คุณต้องแน่ใจว่าคุณกำลังใช้
เครื่องมืออย่างถูกต้องสำหรับการจำลองแบบมาสเตอร์มาสเตอร์ ดู "เรื่องย่อ" สำหรับภาพรวมของ
การใช้งานที่ถูกต้อง

ระวังตารางที่มีข้อจำกัดของคีย์ต่างประเทศด้วย "ON DELETE" หรือ "ON
UPDATE" คำจำกัดความเนื่องจากสิ่งเหล่านี้อาจทำให้เกิดการเปลี่ยนแปลงโดยไม่ได้ตั้งใจในตารางย่อย See
"--[no]check-child-tables".

โดยทั่วไป เครื่องมือนี้เหมาะที่สุดเมื่อตารางของคุณมีคีย์หลักหรือดัชนีที่ไม่ซ้ำ
แม้ว่าจะสามารถซิงโครไนซ์ข้อมูลในตารางที่ไม่มีคีย์หลักหรือดัชนีที่ไม่ซ้ำ แต่ก็อาจ
ทางที่ดีควรซิงโครไนซ์ข้อมูลนั้นด้วยวิธีอื่น

การจำลองแบบ ความปลอดภัย


โดยทั่วไปการซิงโครไนซ์มาสเตอร์การจำลองและทาสอย่างปลอดภัยนั้นไม่ใช่ปัญหาเล็กน้อย
มีหลายประเด็นที่ต้องคำนึงถึง เช่น กระบวนการอื่นๆ ที่เปลี่ยนแปลงข้อมูล
พยายามเปลี่ยนข้อมูลบนสเลฟ ไม่ว่าปลายทางและต้นทางจะเป็นมาสเตอร์มาสเตอร์หรือไม่
คู่และอื่น ๆ อีกมากมาย

โดยทั่วไป วิธีที่ปลอดภัยที่จะทำคือเปลี่ยนข้อมูลบนต้นแบบ และปล่อยให้การเปลี่ยนแปลง
ไหลผ่านการจำลองแบบไปยังทาสเหมือนกับการเปลี่ยนแปลงอื่นๆ อย่างไรก็ตาม สิ่งนี้ใช้ได้ก็ต่อเมื่อ
เป็นไปได้ที่จะแทนที่ลงในตารางบนต้นแบบ REPLACE ใช้ได้ก็ต่อเมื่อมี a
ดัชนีที่ไม่ซ้ำกันบนโต๊ะ (มิฉะนั้นก็ทำหน้าที่เหมือน INSERT ธรรมดา)

หากตารางของคุณมีคีย์เฉพาะ คุณควรใช้ "--sync-to-master" และ/หรือ "--replicate"
ตัวเลือกในการซิงค์ทาสกับต้นแบบ โดยทั่วไปจะทำในสิ่งที่ถูกต้อง เมื่อไหร่
ไม่มีคีย์เฉพาะบนโต๊ะ ไม่มีทางเลือกอื่นนอกจากต้องเปลี่ยนข้อมูลบน
slave และ pt-table-sync จะตรวจพบว่าคุณกำลังพยายามทำเช่นนั้น มันจะบ่นและ
ตายเว้นแต่คุณจะระบุ "--no-check-slave" (ดู "--[no]check-slave")

หากคุณกำลังซิงค์ตารางโดยไม่มีคีย์หลักหรือคีย์เฉพาะบนคู่มาสเตอร์-มาสเตอร์ คุณจะ
ต้องเปลี่ยนข้อมูลบนเซิร์ฟเวอร์ปลายทาง จึงต้องระบุ
"--no-bin-log" เพื่อความปลอดภัย (ดู "--[no]bin-log") ถ้าคุณไม่ทำ การเปลี่ยนแปลงที่คุณทำใน
เซิร์ฟเวอร์ปลายทางจะทำซ้ำกลับไปที่เซิร์ฟเวอร์ต้นทางและเปลี่ยนข้อมูลที่นั่น!

สิ่งที่ปลอดภัยโดยทั่วไปสำหรับคู่มาสเตอร์-มาสเตอร์คือการใช้ "--sync-to-master"
ตัวเลือกเพื่อไม่ให้คุณเปลี่ยนข้อมูลบนเซิร์ฟเวอร์ปลายทาง คุณจะต้อง
ระบุ "--no-check-slave" เพื่อป้องกันไม่ให้ pt-table-sync บ่นว่ากำลังเปลี่ยนแปลงข้อมูล
บนทาส

อัลกอริทึม


pt-table-sync มีเฟรมเวิร์กการซิงค์ข้อมูลทั่วไปซึ่งใช้อัลกอริธึมที่แตกต่างกันเพื่อค้นหา
ความแตกต่าง เครื่องมือจะเลือกอัลกอริธึมที่ดีที่สุดสำหรับแต่ละตารางโดยอัตโนมัติตาม
ดัชนี ประเภทคอลัมน์ และการตั้งค่าอัลกอริทึมที่ระบุโดย "--อัลกอริทึม" NS
มีอัลกอริธึมต่อไปนี้ซึ่งแสดงอยู่ในลำดับเริ่มต้นของการตั้งค่า:

ก้อน
ค้นหาดัชนีที่มีคอลัมน์แรกเป็นตัวเลข (รวมถึงประเภทวันที่และเวลา) และ
แบ่งช่วงค่าของคอลัมน์ออกเป็นส่วนๆ ของแถว "--chunk-size" โดยประมาณ
ซิงค์กลุ่มทีละครั้งโดยการตรวจสอบการรวมกลุ่มทั้งหมด หากส่วนที่แตกต่างบน
ต้นทางและปลายทาง ตรวจสอบผลรวมของแถวของแต่ละอันเพื่อค้นหาแถวที่
แตกต่าง

จะมีประสิทธิภาพเมื่อคอลัมน์มีคาร์ดินัลลิตี้เพียงพอที่จะทำให้ชิ้นส่วนสิ้นสุด
เกี่ยวกับขนาดที่เหมาะสม

เช็คซัมต่อกลุ่มเริ่มต้นค่อนข้างเล็กและส่งผลให้มีการรับส่งข้อมูลเครือข่ายน้อยที่สุด
และการใช้หน่วยความจำ หากต้องตรวจสอบแถวของส่วนข้อมูลเฉพาะคีย์หลัก
คอลัมน์และผลรวมตรวจสอบจะถูกส่งผ่านเครือข่าย ไม่ใช่ทั้งแถว ถ้าแถวคือ
พบว่าแตกต่างกันทั้งแถวจะถูกดึงออกมาแต่ก่อนหน้านี้ไม่

โปรดทราบว่าอัลกอริธึมนี้จะไม่ทำงานหากแบ่งคอลัมน์ถ่านที่ค่าทั้งหมด
เริ่มต้นด้วยตัวอักษรเดียวกัน ในกรณีนั้น เครื่องมือจะออกและแนะนำให้เลือก a
อัลกอริธึมที่แตกต่างกัน

ตอด
ค้นหาดัชนีและขึ้นดัชนีในขนาดคงที่ของแถว "--chunk-size"
โดยใช้อัลกอริธึมที่ไม่ย้อนรอย (ดู pt-archiver สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอัลกอริธึมนี้) มัน
คล้ายกับ "ก้อน" มาก แต่แทนที่จะคำนวณล่วงหน้า ขอบเขตของแต่ละ
ส่วนของตารางตามคาร์ดินัลลิตี้ดัชนี ใช้ "LIMIT" เพื่อกำหนดแต่ละ nibble's
ขีดจำกัดบน และขีดจำกัดบนของการแทะก่อนหน้าเพื่อกำหนดขีดจำกัดล่าง

มันทำงานเป็นขั้นตอน: หนึ่งแบบสอบถามค้นหาแถวที่จะกำหนดส่วนบนของแทะ
ขอบเขต และแบบสอบถามถัดไปจะตรวจสอบผลรวมของแทะทั้งหมด ถ้าแทะต่างกัน
ระหว่างต้นทางและปลายทาง จะตรวจสอบการแทะทีละแถว เช่นเดียวกับ “ก้อน”
ไม่

จัดกลุ่มตาม
เลือกทั้งตารางที่จัดกลุ่มตามคอลัมน์ทั้งหมด โดยเพิ่มคอลัมน์ COUNT(*)
เปรียบเทียบคอลัมน์ทั้งหมด และหากเหมือนกัน ให้เปรียบเทียบค่าของคอลัมน์ COUNT(*) กับ
กำหนดจำนวนแถวที่จะแทรกหรือลบในปลายทาง ทำงานบนโต๊ะ
โดยไม่มีคีย์หลักหรือดัชนีเฉพาะ

กระแส
เลือกทั้งตารางในสตรีมขนาดใหญ่เพียงรายการเดียวและเปรียบเทียบทุกคอลัมน์ เลือกทั้งหมด
คอลัมน์ มีประสิทธิภาพน้อยกว่าอัลกอริธึมอื่นๆ มาก แต่ทำงานได้เมื่อไม่มี
ดัชนีที่เหมาะสมสำหรับพวกเขาที่จะใช้

โครงการในอนาคต
ความเป็นไปได้สำหรับอัลกอริธึมในอนาคตคือ TempTable (ซึ่งแต่เดิมฉันเรียกว่า bottom-up
ในเครื่องมือเวอร์ชันก่อนหน้า), DrillDown (สิ่งที่ฉันเรียกว่าจากบนลงล่าง) และ
GroupByPrefix (คล้ายกับการทำงานของ SqlYOG Job Agent) แต่ละอัลกอริทึมมีจุดแข็ง
และจุดอ่อน หากคุณต้องการใช้เทคนิคที่คุณชื่นชอบในการค้นหา
ความแตกต่างระหว่างแหล่งข้อมูลสองแหล่งบนเซิร์ฟเวอร์ที่แตกต่างกัน ฉันยินดี
ช่วย. อัลกอริธึมยึดติดกับอินเทอร์เฟซที่เรียบง่ายซึ่งทำให้ง่ายต่อการเขียน
ของคุณเอง

สองทิศทาง ซิงค์


การซิงค์แบบสองทิศทางเป็นคุณลักษณะทดลองใหม่ เพื่อให้ทำงานได้อย่างน่าเชื่อถือมี
ข้อจำกัดที่เข้มงวดหลายประการ:

* ใช้งานได้เฉพาะเมื่อซิงค์เซิร์ฟเวอร์หนึ่งกับเซิร์ฟเวอร์อิสระอื่น
* ไม่ทำงาน แต่อย่างใดกับการจำลองแบบ
* กำหนดให้ตารางสามารถแบ่งกลุ่มได้ด้วยอัลกอริธึมแบบก้อน
* ไม่ใช่ N-way เพียงสองทิศทางระหว่างสองเซิร์ฟเวอร์ในแต่ละครั้ง
* ไม่รองรับการเปลี่ยนแปลง DELETE

ตัวอย่างเช่น สมมติว่าเรามีสามเซิร์ฟเวอร์: c1, r1, r2 c1 เป็นเซิร์ฟเวอร์กลาง a
pseudo-master ไปยังเซิร์ฟเวอร์อื่น (เช่น r1 และ r2 ไม่ใช่ทาสของ c1) r1 และ r2 คือ
เซิร์ฟเวอร์ระยะไกล แถวในตาราง foo ได้รับการอัปเดตและแทรกบนทั้งสามเซิร์ฟเวอร์และเรา
ต้องการซิงโครไนซ์การเปลี่ยนแปลงทั้งหมดระหว่างเซิร์ฟเวอร์ทั้งหมด Table foo มีคอลัมน์:

id int คีย์หลัก
ts ประทับเวลาอัตโนมัติอัปเดต
ชื่อ varchar

ใช้การชดเชยการเพิ่มอัตโนมัติเพื่อไม่ให้แถวใหม่จากเซิร์ฟเวอร์ใด ๆ ที่ขัดแย้งกัน
ค่าคีย์หลัก (id) โดยทั่วไป แถวที่ใหม่กว่า ตามที่กำหนดโดยคอลัมน์ ts ใช้
ลำดับความสำคัญเมื่อพบแถวเดียวกันแต่ต่างกันระหว่างการซิงค์แบบสองทิศทาง "เหมือนกัน
แต่ต่างกัน" หมายความว่าสองแถวมีค่าคีย์หลัก (id) เหมือนกัน แต่ต่างกัน
ค่าสำหรับคอลัมน์อื่น เช่น คอลัมน์ชื่อในตัวอย่างนี้ เหมือนกันแต่ต่างกัน
ความขัดแย้งได้รับการแก้ไขโดย "ความขัดแย้ง" ความขัดแย้งเปรียบเทียบบางคอลัมน์ของการแข่งขัน
แถวเพื่อตัดสิน "ผู้ชนะ" แถวที่ชนะจะกลายเป็นแหล่งที่มาและมีการใช้ค่าของมัน
เพื่ออัพเดทอีกแถว

มีความแตกต่างเล็กน้อยระหว่างสามคอลัมน์ที่ใช้เพื่อให้เกิดการซิงค์แบบสองทิศทาง
ที่คุณน่าจะคุ้นเคย: คอลัมน์กลุ่ม ("--chunk-column") คอลัมน์เปรียบเทียบ
("--คอลัมน์") และคอลัมน์ข้อขัดแย้ง ("--conflict-column") ใช้คอลัมน์ก้อนเท่านั้น
เพื่อแบ่งโต๊ะ เช่น "WHERE id >= 5 AND id < 10" ชิ้นจะถูกตรวจสอบและเมื่อ
เช็คซัมก้อนเผยให้เห็นความแตกต่าง เครื่องมือจะเลือกแถวในกลุ่มนั้นและเช็คซัม
"--คอลัมน์" สำหรับแต่ละแถว หากเช็คซัมคอลัมน์ต่างกัน แถวจะมีหนึ่งรายการขึ้นไป
ค่าคอลัมน์ที่ขัดแย้งกัน ในการซิงค์ทิศทางเดียวแบบดั้งเดิม ความขัดแย้งเป็นสิ่งที่สงสัย
ชี้เพราะสามารถแก้ไขได้ง่ายๆ โดยการอัพเดทแถวปลายทางทั้งหมดด้วย
ค่าของแถวต้นทาง อย่างไรก็ตาม ในการซิงค์แบบสองทิศทาง "--conflict-column" (in
ตามรายการตัวเลือก "--conflict-*" อื่น ๆ ด้านล่าง) เปรียบเทียบเพื่อพิจารณาว่า
แถวคือ "ถูกต้อง" หรือ "เผด็จการ"; แถวนี้จะกลายเป็น "แหล่งที่มา"

ในการซิงค์ทั้งสามเซิร์ฟเวอร์อย่างสมบูรณ์ จำเป็นต้องใช้ pt-table-sync สองครั้ง ครั้งแรก
เรียกใช้การซิงค์ c1 และ r1 จากนั้นจึงซิงค์ c1 และ r2 รวมถึงการเปลี่ยนแปลงใดๆ จาก r1 ณ จุดนี้c1
และ r2 ซิงค์กันโดยสมบูรณ์ แต่ r1 ไม่มีการเปลี่ยนแปลงใดๆ จาก r2 เนื่องจาก c1 ไม่ได้
มีการเปลี่ยนแปลงเหล่านี้เมื่อซิงค์และ r1 ดังนั้นจึงจำเป็นต้องมีการเรียกใช้ครั้งที่สองซึ่งซิงค์
เซิร์ฟเวอร์ในลำดับเดียวกัน แต่คราวนี้เมื่อ c1 และ r1 ถูกซิงค์ r1 ได้รับการเปลี่ยนแปลงของ r2

เครื่องมือไม่ซิงค์ N-ways เพียงสองทิศทางระหว่าง DSN แรกที่ระบุบน
บรรทัดคำสั่งและ DSN แต่ละรายการตามลำดับ ดังนั้นเครื่องมือในตัวอย่างนี้จึงถูกรัน
สองครั้งเช่น:

pt-table-sync -- แบบสองทิศทาง h=c1 h=r1 h=r2

ตัวเลือก "--แบบสองทิศทาง" เปิดใช้งานคุณลักษณะนี้และทำให้การตรวจสุขภาพจิตต่างๆ เป็น
ดำเนินการ คุณต้องระบุตัวเลือกอื่น ๆ ที่บอก pt-table-sync วิธีแก้ไข
ขัดแย้งกันในแถวเดียวกันแต่ต่างกัน ตัวเลือกเหล่านี้คือ:

* --conflict-คอลัมน์
* --การเปรียบเทียบความขัดแย้ง
* -- ค่าความขัดแย้ง
* --ข้อขัดแย้ง-เกณฑ์
* --conflict-error"> (ไม่บังคับ)

ใช้ "--print" เพื่อทดสอบตัวเลือกนี้ก่อน "--execute" คำสั่ง SQL ที่พิมพ์จะ
มีความคิดเห็นว่าโฮสต์ใดที่คำสั่งจะถูกดำเนินการหากคุณใช้
"--ดำเนินการ".

หมายเหตุด้านเทคนิค: DSN แรกจะเป็นเซิร์ฟเวอร์ "ซ้าย" เสมอ และ DSN อื่น ๆ จะเป็น
เซิร์ฟเวอร์ที่ "ถูกต้อง" เสมอ เนื่องจากเซิร์ฟเวอร์ใดเซิร์ฟเวอร์หนึ่งสามารถกลายเป็นต้นทางหรือปลายทางได้
สับสนเมื่อคิดว่าพวกเขาเป็น "src" และ "dst" ดังนั้นจึงเรียกโดยทั่วไปว่า
เป็นซ้ายและขวา จำได้ง่ายเพราะ DSN แรกอยู่ทางซ้ายเสมอ
ของ DSN ของเซิร์ฟเวอร์อื่นบนบรรทัดคำสั่ง

EXIT สถานภาพ


ต่อไปนี้เป็นสถานะการออก (เรียกอีกอย่างว่าค่าที่ส่งคืนหรือรหัสส่งคืน) เมื่อ pt-
ซิงค์ตารางเสร็จสิ้นและออก

สถานะ ความหมาย
====== =========================================== ===========
0 ความสำเร็จ
1 ข้อผิดพลาดภายใน
2 อย่างน้อยหนึ่งตารางที่แตกต่างกันในปลายทาง
3 การรวมกันของ 1 และ 2

OPTIONS


ระบุ "--print", "--execute" หรือ "--dry-run" อย่างน้อยหนึ่งรายการ

"--where" และ "--replicate" ไม่เกิดร่วมกัน

เครื่องมือนี้ยอมรับอาร์กิวเมนต์บรรทัดคำสั่งเพิ่มเติม อ้างถึง "บทสรุป" และการใช้งาน
ข้อมูลสำหรับรายละเอียด

--อัลกอริทึม
ชนิด: สตริง; ค่าเริ่มต้น: Chunk, Nibble, GroupBy, Stream

อัลกอริธึมที่ใช้ในการเปรียบเทียบตาราง ตามลำดับความชอบ

สำหรับแต่ละตาราง pt-table-sync จะตรวจสอบว่าสามารถซิงค์ตารางกับค่าที่กำหนดได้หรือไม่
อัลกอริธึมตามลำดับที่ได้รับ อัลกอริธึมแรกที่สามารถซิงค์
มีการใช้ตาราง ดู "อัลกอริทึม"

--ขอผ่าน
ถามรหัสผ่านเมื่อเชื่อมต่อกับ MySQL

--แบบสองทิศทาง
เปิดใช้งานการซิงค์แบบสองทิศทางระหว่างโฮสต์แรกและโฮสต์ที่ตามมา

ดู "การซิงโครไนซ์แบบสองทิศทาง" สำหรับข้อมูลเพิ่มเติม

--[ไม่]bin-log
ค่าเริ่มต้น: ใช่

เข้าสู่บันทึกไบนารี ("SET SQL_LOG_BIN=1")

การระบุ "--no-bin-log" จะ "SET SQL_LOG_BIN=0"

--buffer-ใน-mysql
สั่งให้ MySQL ทำการบัฟเฟอร์การสืบค้นในหน่วยความจำ

ตัวเลือกนี้จะเพิ่มตัวเลือก "SQL_BUFFER_RESULT" ให้กับข้อความค้นหาเปรียบเทียบ นี้
ทำให้ MySQL ดำเนินการค้นหาและวางไว้ในตารางชั่วคราวภายใน
ก่อนส่งผลลัพธ์กลับไปที่ pt-table-sync ข้อดีของกลยุทธ์นี้คือ
pt-table-sync ที่ pt-table-sync สามารถดึงแถวตามต้องการโดยไม่ต้องใช้หน่วยความจำจำนวนมากภายใน
กระบวนการ Perl ขณะปล่อยล็อกบนตาราง MySQL (เพื่อลดความขัดแย้งด้วย
คำถามอื่นๆ) ข้อเสียคือมันใช้หน่วยความจำมากกว่าบนเซิร์ฟเวอร์ MySQL
แทน.

คุณอาจต้องการเปิดการใช้งาน "--[no]buffer-to-client" ไว้ด้วย เนื่องจากบัฟเฟอร์
ลงในตารางชั่วคราวแล้วดึงข้อมูลทั้งหมดลงในหน่วยความจำของ Perl คงจะเป็นเรื่องงี่เง่า
สิ่งที่ต้องทำ. ตัวเลือกนี้มีประโยชน์มากที่สุดสำหรับอัลกอริธึม GroupBy และ Stream ซึ่ง
อาจดึงข้อมูลจำนวนมากจากเซิร์ฟเวอร์

--[ไม่มี]บัฟเฟอร์ให้กับลูกค้า
ค่าเริ่มต้น: ใช่

ดึงข้อมูลทีละแถวจาก MySQL ในขณะที่ทำการเปรียบเทียบ

ตัวเลือกนี้เปิดใช้งาน "mysql_use_result" ซึ่งทำให้ MySQL เก็บแถวที่เลือกไว้บน
เซิร์ฟเวอร์จนกว่าเครื่องมือจะดึงข้อมูลเหล่านั้น ซึ่งช่วยให้เครื่องมือใช้หน่วยความจำน้อยลงแต่
อาจทำให้แถวล็อคบนเซิร์ฟเวอร์นานขึ้น

หากตัวเลือกนี้ถูกปิดใช้งานโดยระบุ "--no-buffer-to-client" แล้ว
ใช้ "mysql_store_result" ซึ่งทำให้ MySQL ส่งแถวที่เลือกทั้งหมดไปยังเครื่องมือ
ในครั้งเดียว. ซึ่งอาจส่งผลให้ "เคอร์เซอร์" ผลลัพธ์ถูกเปิดค้างไว้เป็นเวลาสั้นลง
บนเซิฟเวอร์ แต่ถ้าโต๊ะใหญ่ๆ ก็ใช้เวลานานอยู่ดี and
ทุกความทรงจำของคุณ

สำหรับขนาดข้อมูลที่ไม่สำคัญส่วนใหญ่ คุณต้องการปล่อยให้ตัวเลือกนี้เปิดใช้งานอยู่

ตัวเลือกนี้ถูกปิดใช้งานเมื่อใช้ "--bidirectional"

--ชุดอักขระ
แบบสั้น: -A; ประเภท: string

ชุดอักขระเริ่มต้น หากค่าเป็น utf8 ให้ตั้งค่า binmode ของ Perl บน STDOUT เป็น utf8
ส่งผ่านตัวเลือก mysql_enable_utf8 ไปยัง DBD::mysql และรัน SET NAMES UTF8 หลังจากนั้น
เชื่อมต่อกับ MySQL ค่าอื่น ๆ ตั้งค่า binmode บน STDOUT โดยไม่มีเลเยอร์ utf8
และรัน SET NAMES หลังจากเชื่อมต่อกับ MySQL

--[ไม่]ตรวจสอบตารางลูก
ค่าเริ่มต้น: ใช่

ตรวจสอบว่า "--execute" จะส่งผลเสียต่อตารางย่อยหรือไม่ เมื่อ "--replace"
มีการระบุ "--replicate" หรือ "--sync-to-master" เครื่องมืออาจซิงค์ตารางโดยใช้
คำสั่ง "แทนที่" หากตารางที่ซิงค์มีตารางย่อยที่มี "ON DELETE
CASCADE", "ON UPDATE CASCADE" หรือ "ON UPDATE SET NULL" เครื่องมือพิมพ์ข้อผิดพลาดและ
ข้ามตารางเพราะ "REPLACE" กลายเป็น "DELETE" จากนั้น "INSERT" ดังนั้น "DELETE" จะ
น้ำตกไปที่ตารางย่อยและลบแถวของมัน ในกรณีที่เลวร้ายที่สุด สิ่งนี้สามารถลบได้
ทุกแถวในตารางลูก!

ระบุ "--no-check-child-tables" เพื่อปิดใช้งานการตรวจสอบนี้ เพื่อหลีกเลี่ยงอย่างสมบูรณ์
ส่งผลกระทบต่อตารางลูกให้ระบุ "--no-foreign-key-checks" ด้วย ดังนั้น MySQL จะไม่
เรียงซ้อนการดำเนินการใด ๆ จากตารางพาเรนต์ไปยังตารางย่อย

การตรวจสอบนี้จะเกิดขึ้นเฉพาะในกรณีที่ "--execute" และ "--replace", "--replicate" หรือ
มีการระบุ "--sync-to-master" "--print" ไม่ตรวจสอบตารางย่อย

ข้อความแสดงข้อผิดพลาดจะพิมพ์เฉพาะตารางย่อยแรกที่พบกับ "ON DELETE CASCADE"
ข้อจำกัดของคีย์ต่างประเทศ "ON UPDATE CASCADE" หรือ "ON UPDATE SET NULL" อาจจะมี
ตารางย่อยอื่นๆ ที่ได้รับผลกระทบ

--[no]เช็คมาสเตอร์
ค่าเริ่มต้น: ใช่

ด้วย "--sync-to-master" ให้ลองตรวจสอบว่าต้นแบบที่ตรวจพบคือต้นแบบที่แท้จริง

--[ไม่]เช็ค-ทาส
ค่าเริ่มต้น: ใช่

ตรวจสอบว่าเซิร์ฟเวอร์ปลายทางเป็นทาสหรือไม่

หากเซิร์ฟเวอร์ปลายทางเป็นสเลฟ โดยทั่วไปจะไม่ปลอดภัยที่จะทำการเปลี่ยนแปลงกับเซิร์ฟเวอร์
อย่างไรก็ตาม บางครั้งคุณต้อง; "--replace" จะไม่ทำงานจนกว่าจะมีดัชนีเฉพาะ
ตัวอย่างเช่น คุณจึงไม่สามารถเปลี่ยนแปลงต้นแบบในสถานการณ์นั้นได้ โดยค่าเริ่มต้น pt-
การซิงค์ตารางจะบ่นหากคุณพยายามเปลี่ยนข้อมูลบนทาส ระบุ
"--no-check-slave" เพื่อปิดใช้งานการตรวจสอบนี้ ใช้ความเสี่ยงของคุณเอง

--[ไม่]ตรวจสอบทริกเกอร์
ค่าเริ่มต้น: ใช่

ตรวจสอบว่าไม่มีการกำหนดทริกเกอร์ในตารางปลายทาง

มีการแนะนำทริกเกอร์ใน MySQL v5.0.2 ดังนั้นสำหรับเวอร์ชันเก่า ตัวเลือกนี้ไม่มี
ผลกระทบเนื่องจากทริกเกอร์จะไม่ถูกตรวจสอบ

--chunk-คอลัมน์
ประเภท: string

แบ่งตารางในคอลัมน์นี้

--chunk-ดัชนี
ประเภท: string

แบ่งตารางโดยใช้ดัชนีนี้

--ก้อนขนาด
ชนิด: สตริง; ค่าเริ่มต้น: 1000

จำนวนแถวหรือขนาดข้อมูลต่ออัน

ขนาดของแต่ละแถวของอัลกอริทึม "Chunk" และ "Nibble" ขนาดสามารถ
เป็นจำนวนแถวหรือขนาดข้อมูล ขนาดข้อมูลถูกระบุด้วยคำต่อท้ายของ
k=kibibytes, M=mebibytes, G=gibibytes. ขนาดข้อมูลจะถูกแปลงเป็นจำนวนแถว
โดยหารด้วยความยาวแถวเฉลี่ย

--คอลัมน์
แบบสั้น: -c; ประเภท: array

เปรียบเทียบรายการคอลัมน์ที่คั่นด้วยเครื่องหมายจุลภาคนี้

--การกำหนดค่า
ชนิด: Array

อ่านรายการไฟล์ปรับแต่งที่คั่นด้วยเครื่องหมายจุลภาค ถ้าระบุ ต้องนี่ก่อน
ตัวเลือกบนบรรทัดคำสั่ง

--conflict-คอลัมน์
ประเภท: string

เปรียบเทียบคอลัมน์นี้เมื่อแถวขัดแย้งกันระหว่างการซิงค์ "--สองทิศทาง"

เมื่อพบแถวที่เหมือนกันแต่ต่างกัน ค่าของคอลัมน์นี้จากแต่ละแถวคือ
เปรียบเทียบตาม "--conflict-comparison", "--conflict-value" และ
"--conflict-threshold" เพื่อกำหนดว่าแถวใดมีข้อมูลที่ถูกต้องและกลายเป็น
แหล่งที่มา. คอลัมน์สามารถเป็นประเภทใดก็ได้ที่มีความเหมาะสม
"--conflict-comparison" (เกือบจะทุกประเภท ยกเว้น ตัวอย่างเช่น blobs)

ตัวเลือกนี้ใช้ได้เฉพาะกับ "--สองทิศทาง" ดู "การซิงโครไนซ์แบบสองทิศทาง" สำหรับข้อมูลเพิ่มเติม
ข้อมูล

--ความขัดแย้ง-เปรียบเทียบ
ประเภท: string

เลือก "--conflict-column" ที่มีคุณสมบัตินี้เป็นแหล่งที่มา

ตัวเลือกมีผลกับค่า "--conflict-column" จากแถวที่ขัดแย้งกัน
เปรียบเทียบ การเปรียบเทียบที่เป็นไปได้เป็นหนึ่งใน MAGIC_comparisons เหล่านี้:

ใหม่ที่สุด | เก่าที่สุด | ยิ่งใหญ่ที่สุด | น้อยที่สุด | เท่ากับ | ตรงกัน

การเปรียบเทียบเลือกแถวด้วย
========== ======================================= =================
ใหม่ล่าสุด ชั่วคราว ใหม่ล่าสุด --conflict-column value
เก่าแก่ที่สุด ชั่วขณะ --conflict-column value
มากที่สุด ตัวเลขที่ยิ่งใหญ่ที่สุด "--conflict-column value
ค่าตัวเลขน้อยที่สุด --conflict-column value
เท่ากับ --conflict-column value เท่ากับ --conflict-value
การจับคู่ --conflict-column ค่าที่ตรงกับรูปแบบ Perl regex
--ความขัดแย้ง-มูลค่า

ตัวเลือกนี้ใช้ได้เฉพาะกับ "--สองทิศทาง" ดู "การซิงโครไนซ์แบบสองทิศทาง" สำหรับข้อมูลเพิ่มเติม
ข้อมูล

--ความขัดแย้ง-ข้อผิดพลาด
ชนิด: สตริง; ค่าเริ่มต้น: warn

วิธีรายงานข้อขัดแย้งที่แก้ไขไม่ได้และข้อผิดพลาดข้อขัดแย้ง

ตัวเลือกนี้จะเปลี่ยนวิธีการแจ้งเตือนผู้ใช้เมื่อไม่สามารถแก้ไขข้อขัดแย้งได้หรือ
ทำให้เกิดข้อผิดพลาดบางอย่าง ค่าที่เป็นไปได้คือ:

* เตือน: พิมพ์คำเตือนถึง STDERR เกี่ยวกับข้อขัดแย้งที่ไม่สามารถแก้ไขได้
* ตาย: ตาย หยุดการซิงค์ และพิมพ์คำเตือนไปที่STDERR

ตัวเลือกนี้ใช้ได้เฉพาะกับ "--สองทิศทาง" ดู "การซิงโครไนซ์แบบสองทิศทาง" สำหรับข้อมูลเพิ่มเติม
ข้อมูล

--ข้อขัดแย้ง-เกณฑ์
ประเภท: string

จำนวนเงินที่ "--conflict-column" หนึ่งต้องเกินอีกอันหนึ่ง

"--conflict-threshold" ป้องกันไม่ให้มีการแก้ไขข้อขัดแย้งหากความสัมบูรณ์
ความแตกต่างระหว่างค่า "--conflict-column" ทั้งสองค่าน้อยกว่าจำนวนนี้ สำหรับ
ตัวอย่างเช่น หากสอง "--conflict-column" มีค่าประทับเวลา "2009-12-01 12:00:00" และ
"2009-12-01 12:05:00" ต่างกัน 5 นาที หากตั้งค่า "--conflict-threshold" ไว้
เป็น "5m" ข้อขัดแย้งจะได้รับการแก้ไข แต่ถ้า "--conflict-threshold" ถูกตั้งค่าเป็น "6m"
ความขัดแย้งจะล้มเหลวในการแก้ไขเพราะความแตกต่างไม่มากกว่าหรือเท่ากับ
ถึง 6 นาที ในกรณีหลังนี้ "--conflict-error" จะรายงานความล้มเหลว

ตัวเลือกนี้ใช้ได้เฉพาะกับ "--สองทิศทาง" ดู "การซิงโครไนซ์แบบสองทิศทาง" สำหรับข้อมูลเพิ่มเติม
ข้อมูล

--ความขัดแย้ง-มูลค่า
ประเภท: string

ใช้ค่านี้สำหรับ "--conflict-comparison" บางอย่าง

ตัวเลือกนี้ให้ค่าสำหรับ "เท่ากับ" และ "ตรงกัน" "--conflict-comparison"

ตัวเลือกนี้ใช้ได้เฉพาะกับ "--สองทิศทาง" ดู "การซิงโครไนซ์แบบสองทิศทาง" สำหรับข้อมูลเพิ่มเติม
ข้อมูล

--ฐานข้อมูล
แบบสั้น: -d; ประเภท: hash

ซิงค์เฉพาะรายการฐานข้อมูลที่คั่นด้วยเครื่องหมายจุลภาค

คำขอทั่วไปคือการซิงค์ตารางจากฐานข้อมูลหนึ่งกับตารางจากฐานข้อมูลอื่น
บนเซิร์ฟเวอร์เดียวกันหรือต่างกัน นี้ยังไม่เป็นไปได้ "--ฐานข้อมูล" จะไม่ทำ
มันและคุณไม่สามารถทำได้ด้วยส่วน D ของ DSN เช่นกันเพราะในกรณีที่ไม่มีa
ชื่อตาราง ถือว่าควรซิงค์ทั้งเซิร์ฟเวอร์และส่วน D ควบคุมเท่านั้น
ฐานข้อมูลเริ่มต้นของการเชื่อมต่อ

--defaults-ไฟล์
แบบสั้น: -F; ประเภท: string

อ่านเฉพาะตัวเลือก mysql จากไฟล์ที่กำหนด คุณต้องระบุชื่อพาธที่แน่นอน

--ดรายรัน
วิเคราะห์ ตัดสินใจเลือกอัลกอริธึมการซิงค์ที่จะใช้ พิมพ์ และออก

หมายถึง "--verbose" เพื่อให้คุณสามารถดูผลลัพธ์ได้ ผลลัพธ์อยู่ในผลลัพธ์เดียวกัน
รูปแบบที่คุณจะเห็นจากการเรียกใช้เครื่องมือจริง แต่จะมีเลขศูนย์สำหรับ
แถวที่ได้รับผลกระทบ นี่เป็นเพราะว่าเครื่องมือทำงานจริง แต่หยุดก่อนมัน
เปรียบเทียบข้อมูลใด ๆ และส่งคืนค่าศูนย์ ค่าศูนย์ไม่ได้หมายความว่าไม่มีการเปลี่ยนแปลง
ที่จะทำ

--เครื่องยนต์
แบบสั้น: -e; ประเภท: hash

ซิงค์เฉพาะรายการเอ็นจิ้นการจัดเก็บข้อมูลที่คั่นด้วยเครื่องหมายจุลภาคเท่านั้น

--ดำเนินการ
ดำเนินการค้นหาเพื่อให้ตารางมีข้อมูลที่เหมือนกัน

ตัวเลือกนี้ทำให้ pt-table-sync ซิงค์ข้อมูลตารางจริงโดยดำเนินการสืบค้นข้อมูลทั้งหมด
ที่สร้างขึ้นเพื่อแก้ไขความแตกต่างของตาราง ดังนั้น, ตาราง จะ be เปลี่ยน!
และเว้นแต่คุณจะระบุ "--verbose" ไว้ด้วย การเปลี่ยนแปลงจะทำแบบไม่มีเสียง ถ้านี้
ไม่ใช่สิ่งที่คุณต้องการ ดู "--print" หรือ "--dry-run"

--explain-โฮสต์
พิมพ์ข้อมูลการเชื่อมต่อและออก

พิมพ์รายชื่อโฮสต์ที่จะเชื่อมต่อ pt-table-sync พร้อมรายการต่างๆ ทั้งหมด
ตัวเลือกการเชื่อมต่อและออก

--float-ความแม่นยำ
ประเภท: int

ความแม่นยำสำหรับการแปลงตัวเลขเป็นสตริง "FLOAT" และ "DOUBLE" ทำให้เกิด FLOAT และ
ค่าสองเท่าที่จะปัดเศษเป็นจำนวนหลักที่ระบุหลังจุดทศนิยม
กับ กลม() ฟังก์ชันใน MySQL สิ่งนี้สามารถช่วยหลีกเลี่ยงเช็คซัมไม่ตรงกันเนื่องจาก
การแสดงทศนิยมที่แตกต่างกันของค่าเดียวกันบน MySQL . ที่ต่างกัน
รุ่นและฮาร์ดแวร์ ค่าเริ่มต้นคือไม่มีการปัดเศษ ค่าจะถูกแปลงเป็น
สตริงโดย คอนแค็ท() ฟังก์ชั่นและ MySQL เลือกการแสดงสตริง ถ้าคุณ
ระบุค่า 2 เช่น จากนั้นค่า 1.008 และ 1.009 จะถูกปัดเศษเป็น
1.01 และจะเช็คซัมเท่ากัน

--[ไม่]ต่างประเทศ-คีย์-เช็ค
ค่าเริ่มต้น: ใช่

เปิดใช้งานการตรวจสอบคีย์ต่างประเทศ ("SET FOREIGN_KEY_CHECKS=1")

การระบุ "--no-foreign-key-checks" จะเป็น "SET FOREIGN_KEY_CHECKS=0"

--การทำงาน
ประเภท: string

ฟังก์ชันแฮชใดที่คุณต้องการใช้สำหรับเช็คซัม

ค่าเริ่มต้นคือ "CRC32" ตัวเลือกที่ดีอื่นๆ ได้แก่ "MD5" และ "SHA1" ถ้าคุณมี
ติดตั้งฟังก์ชันที่ผู้ใช้กำหนด "FNV_64" แล้ว "pt-table-sync" จะตรวจจับและ
ชอบที่จะใช้เพราะมันเร็วกว่าในตัว คุณสามารถใช้
MURMUR_HASH หากคุณได้ติดตั้งฟังก์ชันที่ผู้ใช้กำหนดนั้น ทั้งสองอย่างคือ
แจกจ่ายให้กับมาตกิต ดู pt-table-checksum สำหรับข้อมูลเพิ่มเติมและการเปรียบเทียบ

--ช่วยด้วย
แสดงความช่วยเหลือและออก

--[ไม่]hex-blob
ค่าเริ่มต้น: ใช่

คอลัมน์ "HEX()" "BLOB" "TEXT" และ "BINARY"

เมื่อดึงข้อมูลแถวจากต้นทางเพื่อสร้างแบบสอบถามเพื่อซิงค์ข้อมูล (เช่น
ข้อความค้นหาที่เห็นด้วย "--print" และดำเนินการโดย "--execute") คอลัมน์ไบนารีจะถูกห่อ
in เลขฐานสิบหก() ดังนั้นข้อมูลไบนารีจึงไม่สร้างคำสั่ง SQL ที่ไม่ถูกต้อง คุณสามารถ
ปิดการใช้งานตัวเลือกนี้ แต่คุณไม่ควร

--เจ้าภาพ
แบบสั้น: -h; ประเภท: string

เชื่อมต่อกับโฮสต์

--ละเว้นคอลัมน์
ประเภท: แฮช

ละเว้นรายการชื่อคอลัมน์ที่คั่นด้วยเครื่องหมายจุลภาคนี้ในการเปรียบเทียบ

ตัวเลือกนี้ทำให้ไม่สามารถเปรียบเทียบคอลัมน์ได้ อย่างไรก็ตาม หากกำหนดแถวเป็น
แตกต่างกันระหว่างตาราง คอลัมน์ทั้งหมดในแถวนั้นจะถูกซิงค์ โดยไม่คำนึงถึง (มันไม่ใช่
ขณะนี้สามารถแยกคอลัมน์ออกจากกระบวนการซิงค์ได้เฉพาะจาก
การเปรียบเทียบ.)

--ละเว้น-ฐานข้อมูล
ประเภท: แฮช

ละเว้นรายการฐานข้อมูลที่คั่นด้วยเครื่องหมายจุลภาคนี้

(ฐานข้อมูลระบบเช่น ข้อมูล_สคีมา และ ประสิทธิภาพ_สคีมา ถูกละเลยโดย
ค่าเริ่มต้น)

--ignore-เครื่องยนต์
ชนิด: แฮช; ค่าเริ่มต้น: FEDERATED,MRG_MyISAM

ละเว้นรายการเครื่องมือเก็บข้อมูลที่คั่นด้วยเครื่องหมายจุลภาคนี้

--ละเว้น-ตาราง
ประเภท: แฮช

ละเว้นรายการตารางที่คั่นด้วยเครื่องหมายจุลภาคนี้

ชื่อตารางอาจตรงกับชื่อฐานข้อมูล

--ละเว้นตาราง-regex
ชนิด: สตริง; กลุ่ม: ตัวกรอง

ละเว้นตารางที่มีชื่อตรงกับ Perl regex

--[ไม่]ดัชนี-คำใบ้
ค่าเริ่มต้น: ใช่

เพิ่มคำแนะนำ FORCE/USE INDEX ให้กับคิวรีแบบกลุ่มและแบบแถว

โดยค่าเริ่มต้น "pt-table-sync" จะเพิ่มคำใบ้ FORCE/USE INDEX ให้กับคำสั่ง SQL แต่ละคำสั่งเพื่อบังคับ
MySQL ในการใช้ดัชนีที่เลือกโดยอัลกอริธึมการซิงค์หรือระบุโดย
"--chunk-index". ซึ่งมักจะเป็นสิ่งที่ดี แต่ในบางกรณี ดัชนีอาจไม่เป็นเช่นนั้น
ดีที่สุดสำหรับข้อความค้นหาเพื่อให้คุณสามารถระงับคำใบ้ดัชนีโดยระบุ
"--no-index-hint" และให้ MySQL เลือกดัชนี

การดำเนินการนี้ไม่มีผลกับข้อความค้นหาที่พิมพ์โดย "--print" มันมีผลกับก้อนและ .เท่านั้น
คิวรีแถวที่ "pt-table-sync" ใช้เพื่อเลือกและเปรียบเทียบแถว

--ล็อค
ประเภท: int

ล็อกตาราง: 0=ไม่มี 1=ต่อรอบการซิงค์ 2=ต่อตาราง หรือ 3=ทั่วโลก

ใช้ "LOCK TABLES" ซึ่งจะช่วยป้องกันไม่ให้มีการเปลี่ยนแปลงตารางในขณะที่คุณ
ตรวจสอบพวกเขา ค่าที่เป็นไปได้มีดังนี้:

คุณค่า ความหมาย
===== ============================================ ==========
0 ไม่เคยล็อคโต๊ะ
1 ล็อกและปลดล็อกหนึ่งครั้งต่อรอบการซิงค์ (ตามการใช้งาน
โดยอัลกอริธึมการซิงค์) ละเอียดที่สุดแล้ว
ระดับการล็อคที่มีอยู่ ตัวอย่างเช่น Chunk
อัลกอริทึมจะล็อคแต่ละส่วนของ C แถว แล้วก็
ปลดล็อกหากเหมือนกันในแหล่งที่มาและ
ปลายทาง ก่อนจะไปต่อในส่วนถัดไป
2 ล็อคและปลดล็อคก่อนและหลังแต่ละโต๊ะ
3 ล็อกและปลดล็อกหนึ่งครั้งสำหรับทุกเซิร์ฟเวอร์ (DSN) ที่ซิงค์ด้วย
ค .

ทาสการจำลองแบบจะไม่ถูกล็อคหาก "--replicate" หรือ "--sync-to-master" เป็น
ระบุไว้ เนื่องจากในทางทฤษฎี การล็อกโต๊ะบนมาสเตอร์ควรป้องกันการเปลี่ยนแปลงใด ๆ
จากการเกิดขึ้น (คุณไม่ได้เปลี่ยนข้อมูลบนทาสของคุณใช่ไหม) ถ้า "--รอ" คือ
ให้มาสเตอร์ (ต้นทาง) ถูกล็อค จากนั้นเครื่องมือก็รอให้ทาสตามทัน
ถึงเจ้านายก่อนดำเนินการต่อ

หากระบุ "--ธุรกรรม" ไว้ จะไม่มีการใช้ "LOCK TABLES" ให้ล็อกและปลดล็อกแทน
ดำเนินการโดยการเริ่มต้นและทำธุรกรรม ข้อยกเว้นคือถ้า
"--ล็อค" คือ 3

หากระบุ "--ไม่มีธุรกรรม" ระบบจะใช้ "ล็อกตาราง" สำหรับค่าใดๆ ของ
"--ล็อค". ดู "-[ไม่]ธุรกรรม"

--lock-and-เปลี่ยนชื่อ
ล็อกตารางต้นทางและปลายทาง ซิงค์ จากนั้นสลับชื่อ สิ่งนี้มีประโยชน์ในฐานะ a
ALTER TABLE ที่บล็อกน้อยกว่าเมื่อตารางซิงค์กันอย่างสมเหตุสมผล
(ซึ่งคุณสามารถเลือกทำสำเร็จด้วยวิธีการต่างๆ รวมถึงการดัมพ์และโหลดซ้ำ
หรือแม้แต่บางอย่างเช่น pt-archiver) มันต้องการสอง DSN และถือว่าพวกเขา
อยู่บนเซิร์ฟเวอร์เดียวกัน จึงไม่ต้องรอการจำลองแบบหรือสิ่งที่คล้ายกัน ตารางคือ
ล็อคด้วย LOCK TABLES

--รหัสผ่าน
แบบสั้น: -p; ประเภท: string

รหัสผ่านเพื่อใช้ในการเชื่อมต่อ หากรหัสผ่านมีเครื่องหมายจุลภาค จะต้องหลีกเลี่ยง
ด้วยแบ็กสแลช: "exam\,ple"

--ปิด
ประเภท: string

สร้างไฟล์ PID ที่กำหนด เครื่องมือจะไม่เริ่มทำงานหากมีไฟล์ PID อยู่แล้วและ
PID ที่มีอยู่ในนั้นแตกต่างจาก PID ปัจจุบัน อย่างไรก็ตาม หากไฟล์ PID
มีอยู่และ PID ที่มีอยู่ไม่ทำงานอีกต่อไป เครื่องมือจะเขียนทับ PID
ไฟล์ที่มี PID ปัจจุบัน ไฟล์ PID จะถูกลบออกโดยอัตโนมัติเมื่อเครื่องมือออก

--ท่า
แบบสั้น: -P; ประเภท: int

หมายเลขพอร์ตที่ใช้เชื่อมต่อ

--พิมพ์
พิมพ์ข้อความค้นหาที่จะแก้ไขความแตกต่าง

หากคุณไม่เชื่อถือ "pt-table-sync" หรือเพียงแค่ต้องการดูว่าจะทำอะไรได้บ้าง นี่คือ
วิธีที่ดีที่จะปลอดภัย แบบสอบถามเหล่านี้เป็น SQL ที่ถูกต้อง และคุณสามารถเรียกใช้ได้เองหากคุณ
ต้องการซิงค์ตารางด้วยตนเอง

--recursion-วิธี
ชนิด: อาร์เรย์; ค่าเริ่มต้น: processlist,hosts

วิธีการเรียกซ้ำที่ต้องการใช้เพื่อค้นหาทาส

วิธีการที่เป็นไปได้คือ:

วิธีการใช้งาน
========== ==================
รายชื่อกระบวนการ SHOW PROCESSLIST
เจ้าภาพ SHOW SLAVE HOSTS
ไม่มี ไม่พบทาส

ควรใช้วิธีการแบบรายการกระบวนการ เนื่องจาก SHOW SLAVE HOSTS ไม่น่าเชื่อถือ
อย่างไรก็ตาม จำเป็นต้องใช้เมธอด hosts หากเซิร์ฟเวอร์ใช้พอร์ตที่ไม่ได้มาตรฐาน (ไม่ใช่
3306. โดยปกติ pt-table-sync จะทำสิ่งที่ถูกต้องและค้นหาทาส แต่คุณอาจ
ให้วิธีที่ต้องการและจะใช้ก่อน หากไม่พบทาสใด ๆ
จะลองวิธีอื่นๆ

--แทนที่
เขียนคำสั่ง "INSERT" และ "UPDATE" ทั้งหมดเป็น "REPLACE"

ซึ่งจะเปิดโดยอัตโนมัติตามความจำเป็นเมื่อมีการละเมิดดัชนีที่ไม่ซ้ำกัน

--ทำซ้ำ
ประเภท: string

ซิงค์ตารางที่ระบุไว้ว่าแตกต่างกันในตารางนี้

ระบุว่า "pt-table-sync" ควรตรวจสอบตารางที่ระบุเพื่อค้นหาข้อมูลที่
แตกต่างกัน ตารางเหมือนกับอาร์กิวเมนต์ที่มีชื่อเดียวกันกับ pt-table-
เช็คซัม กล่าวคือ ประกอบด้วยบันทึกที่ตาราง (และช่วงของค่า) ต่างกัน
ระหว่างนายกับทาส

สำหรับแต่ละตารางและช่วงของค่าที่แสดงความแตกต่างระหว่างต้นแบบและ
ทาส "pt-table-checksum" จะซิงค์ตารางนั้นด้วยส่วนคำสั่ง "WHERE" ที่เหมาะสม
ถึงเจ้านายของมัน

สิ่งนี้จะตั้งค่า "--รอ" เป็น 60 โดยอัตโนมัติและทำให้มีการเปลี่ยนแปลงบนมาสเตอร์
แทนที่จะเป็นทาส

หากระบุ "--sync-to-master" เครื่องมือจะถือว่าเซิร์ฟเวอร์ที่คุณระบุคือ
ทาสและเชื่อมต่อกับต้นแบบตามปกติเพื่อซิงค์

มิเช่นนั้นจะพยายามใช้ "SHOW PROCESSLIST" เพื่อค้นหาทาสของเซิร์ฟเวอร์คุณ
ระบุไว้ หากไม่พบทาสใด ๆ ผ่าน "SHOW PROCESSLIST" มันจะตรวจสอบ
"SHOW SLAVE HOSTS" แทน คุณต้องกำหนดค่า "โฮสต์รายงาน" ของทาสแต่ละคน
"รายงานพอร์ต" และตัวเลือกอื่น ๆ เพื่อให้ทำงานได้ถูกต้อง พอหาทาสได้แล้วจะ
ตรวจสอบตารางที่ระบุในแต่ละทาสเพื่อค้นหาข้อมูลที่ต้องการซิงค์และ
ซิงค์มัน

เครื่องมือตรวจสอบสำเนาของตารางของต้นแบบก่อน โดยสมมติว่าต้นแบบคือ
อาจเป็นทาสเช่นกัน ตารางใด ๆ ที่แสดงความแตกต่างจะมี ไม่ be
ซิงค์กับทาส ตัวอย่างเช่น สมมติว่าการจำลองแบบของคุณตั้งค่าเป็น A->B
B->C, B->D. สมมติว่าคุณใช้อาร์กิวเมนต์นี้และระบุเซิร์ฟเวอร์ B เครื่องมือจะ
ตรวจสอบสำเนาตารางของเซิร์ฟเวอร์ B หากดูเหมือนว่าข้อมูลของเซิร์ฟเวอร์ B ในตาราง
"test.tbl1" ต่างจากสำเนาของเซิร์ฟเวอร์ A เครื่องมือจะไม่ซิงค์ตารางนั้นบน
เซิร์ฟเวอร์ C และ D

--set-vars
ชนิด: Array

ตั้งค่าตัวแปร MySQL ในรายการคู่ "variable=value" ที่คั่นด้วยเครื่องหมายจุลภาค

โดยค่าเริ่มต้น เครื่องมือจะตั้งค่า:

wait_timeout=10000

ตัวแปรที่ระบุในบรรทัดคำสั่งจะแทนที่ค่าเริ่มต้นเหล่านี้ ตัวอย่างเช่น,
การระบุ "--set-vars wait_timeout=500" จะแทนที่ค่าเริ่มต้นที่ 10000

เครื่องมือจะพิมพ์คำเตือนและดำเนินการต่อหากไม่สามารถตั้งค่าตัวแปรได้

--เบ้า
แบบฟอร์ม; ประเภท: string

ไฟล์ซ็อกเก็ตที่ใช้สำหรับการเชื่อมต่อ

--sync-to-มาสเตอร์
ปฏิบัติต่อ DSN เป็นทาสและซิงค์กับต้นแบบ

ปฏิบัติต่อเซิร์ฟเวอร์ที่คุณระบุเป็นทาส ตรวจสอบ "SHOW SLAVE STATUS" เชื่อมต่อกับ
ต้นแบบของเซิร์ฟเวอร์และปฏิบัติต่อต้นแบบเป็นแหล่งและทาสเป็น
ปลายทาง. ทำให้เกิดการเปลี่ยนแปลงในต้นแบบ ตั้งค่า "--รอ" เป็น 60 โดย
ค่าเริ่มต้น ตั้งค่า "--lock" เป็น 1 ตามค่าเริ่มต้น และปิดใช้งาน "--[no]transaction" ตามค่าเริ่มต้น
ดูเพิ่มเติมที่ "--replicate" ซึ่งจะเปลี่ยนพฤติกรรมของตัวเลือกนี้

--ตาราง
แบบสั้น: -t; ประเภท: hash

ซิงค์เฉพาะรายการตารางที่คั่นด้วยเครื่องหมายจุลภาคนี้

ชื่อตารางอาจตรงกับชื่อฐานข้อมูล

--หมดเวลา-โอเค
ทำต่อไปหาก "--รอ" ล้มเหลว

หากคุณระบุ "--รอ" และทาสไม่ทันตำแหน่งเจ้านายมาก่อน
การรอหมดเวลา ลักษณะการทำงานเริ่มต้นคือการยกเลิก ตัวเลือกนี้ทำให้เครื่องมือเก็บ
ไปอยู่แล้ว การเตือน: หากคุณกำลังพยายามที่จะได้รับการเปรียบเทียบที่สอดคล้องกันระหว่าง
สองเซิร์ฟเวอร์ คุณอาจไม่ต้องการดำเนินการต่อหลังจากหมดเวลา

--[ไม่มี]ธุรกรรม
ใช้ธุรกรรมแทน "LOCK TABLES"

ความละเอียดของการเริ่มต้นและการทำธุรกรรมจะถูกควบคุมโดย "--lock"
สิ่งนี้ถูกเปิดใช้งานโดยค่าเริ่มต้น แต่เนื่องจาก "--lock" ถูกปิดใช้งานโดยค่าเริ่มต้น มันจึงไม่มี
ผล

ตัวเลือกส่วนใหญ่ที่เปิดใช้งานการล็อคยังปิดการใช้งานการทำธุรกรรมตามค่าเริ่มต้น ดังนั้นหากคุณต้องการ
ในการใช้การล็อกธุรกรรม (ผ่าน "LOCK IN SHARE MODE" และ "FOR UPDATE" คุณต้อง
ระบุ "--ธุรกรรม" อย่างชัดเจน

หากคุณไม่ระบุ "--ธุรกรรม" ไว้อย่างชัดเจน "pt-table-sync" จะตัดสินใจเลือกต่อ
พื้นฐานตารางว่าจะใช้ธุรกรรมหรือการล็อคตาราง ปัจจุบันใช้
ธุรกรรมบนตาราง InnoDB และการล็อกตารางกับรายการอื่นๆ ทั้งหมด

หากระบุ "--ไม่มีธุรกรรม" ดังนั้น "pt-table-sync" จะไม่ใช้ธุรกรรมที่
ทั้งหมด (ไม่ใช่แม้แต่สำหรับตาราง InnoDB) และการล็อกถูกควบคุมโดย "--lock"

เมื่อเปิดใช้งาน ไม่ว่าจะโดยชัดแจ้งหรือโดยปริยาย ระดับการแยกธุรกรรมจะถูกตั้งค่า
"อ่านซ้ำได้" และธุรกรรมเริ่มต้น "ด้วยสแนปช็อตที่สอดคล้องกัน"

--ตัด
คอลัมน์ "TRIM()" "VARCHAR" ในโหมด "BIT_XOR" และ "ACCUM" ช่วยในการเปรียบเทียบ MySQL
4.1 ถึง >= 5.0

สิ่งนี้มีประโยชน์เมื่อคุณไม่สนใจความแตกต่างของช่องว่างต่อท้ายระหว่าง MySQL
เวอร์ชันที่แตกต่างกันในการจัดการช่องว่างต่อท้าย MySQL 5.0 และใหม่กว่าทั้งหมด
เก็บช่องว่างต่อท้ายใน "VARCHAR" ในขณะที่เวอร์ชันก่อนหน้าจะลบออก

--[ไม่]การตรวจสอบที่ไม่ซ้ำ
ค่าเริ่มต้น: ใช่

เปิดใช้งานการตรวจสอบคีย์ที่ไม่ซ้ำ ("SET UNIQUE_CHECKS=1")

การระบุ "--no-unique-checks" จะ "SET UNIQUE_CHECKS=0"

--ผู้ใช้
แบบสั้น: -u; ประเภท: string

ผู้ใช้สำหรับเข้าสู่ระบบหากไม่ใช่ผู้ใช้ปัจจุบัน

--รายละเอียด
แบบสั้น: -v; สะสม: ใช่

พิมพ์ผลการดำเนินการซิงค์

ดู "OUTPUT" สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับเอาต์พุต

--รุ่น
แสดงเวอร์ชันและออก

--[ไม่] version-check
ค่าเริ่มต้น: ใช่

ตรวจสอบเวอร์ชันล่าสุดของ Percona Toolkit, MySQL และโปรแกรมอื่นๆ

นี่คือคุณสมบัติ "ตรวจหาการอัปเดตอัตโนมัติ" มาตรฐาน พร้อมด้วยคุณสมบัติเพิ่มเติมอีกสองรายการ
คุณสมบัติ. ขั้นแรก เครื่องมือจะตรวจสอบเวอร์ชันของโปรแกรมอื่นๆ บนระบบโลคัลใน
นอกจากเวอร์ชั่นของตัวเองแล้ว ตัวอย่างเช่น จะตรวจสอบเวอร์ชันของทุกเซิร์ฟเวอร์ MySQL
มันเชื่อมต่อกับ Perl และโมดูล Perl DBD::mysql ประการที่สอง ตรวจสอบและเตือน
เกี่ยวกับรุ่นที่มีปัญหาที่ทราบ ตัวอย่างเช่น MySQL 5.5.25 มีจุดบกพร่องที่สำคัญและ
ได้รับการเผยแพร่อีกครั้งในชื่อ 5.5.25a

การอัปเดตหรือปัญหาที่ทราบจะพิมพ์ไปที่ STDOUT ก่อนเอาต์พุตปกติของเครื่องมือ
คุณลักษณะนี้ไม่ควรรบกวนการทำงานปกติของเครื่องมือ

ดูรายละเอียดเพิ่มเติมได้ที่ .

--รอ
แบบสั้น: -w; ประเภท: เวลา

นานแค่ไหนที่จะรอให้ทาสไล่ตามนายของตน

ทำให้ต้นแบบรอให้ทาสติดตามการจำลองแบบก่อนที่จะเปรียบเทียบ
ตาราง ค่าคือจำนวนวินาทีที่จะรอก่อนที่จะหมดเวลา (ดูเพิ่มเติม
"--หมดเวลา-ตกลง") ตั้งค่า "--lock" เป็น 1 และ "--[no]transaction" เป็น 0 โดยค่าเริ่มต้น ถ้าคุณ
เห็นข้อผิดพลาดดังต่อไปนี้

MASTER_POS_WAIT ส่งคืน -1

หมายความว่าเกินเวลาหมดและคุณต้องเพิ่มเวลา

ค่าเริ่มต้นของตัวเลือกนี้ได้รับอิทธิพลจากตัวเลือกอื่นๆ เพื่อดูว่ามีค่าแค่ไหน
ให้เรียกใช้ด้วย "--help"

หากต้องการปิดใช้งานการรอทั้งหมด (ยกเว้นการล็อก) ให้ระบุ "--wait" 0 ซึ่งจะช่วยได้เมื่อ
สเลฟกำลังล้าหลังบนโต๊ะที่ไม่ได้ซิงค์

--ที่ไหน
ประเภท: string

ส่วนคำสั่ง "WHERE" เพื่อจำกัดการซิงค์กับบางส่วนของตาราง

--[ไม่]ศูนย์-ก้อน
ค่าเริ่มต้น: ใช่

เพิ่มกลุ่มสำหรับแถวที่มีค่าศูนย์หรือเทียบเท่าศูนย์ จะมีผลก็ต่อเมื่อ
ระบุ "--chunk-size" จุดประสงค์ของก้อนศูนย์คือการจับ a
อาจมีค่าศูนย์จำนวนมากซึ่งอาจทำให้ขนาดของค่าแรกไม่สมดุล
ก้อน. ตัวอย่างเช่น ถ้าใส่ตัวเลขติดลบจำนวนมากลงใน unsigned
คอลัมน์จำนวนเต็มทำให้ถูกเก็บไว้เป็นศูนย์ จากนั้นค่าศูนย์เหล่านี้จะถูกบันทึก
โดยกลุ่มศูนย์แทนที่จะเป็นกลุ่มแรกและค่าที่ไม่ใช่ศูนย์ทั้งหมด

DSN OPTIONS


ตัวเลือก DSN เหล่านี้ใช้เพื่อสร้าง DSN แต่ละตัวเลือกจะได้รับเช่น "option=value"
ตัวเลือกจะคำนึงถึงขนาดตัวพิมพ์ ดังนั้น P และ p ไม่ใช่ตัวเลือกเดียวกัน ไม่สามารถ
ช่องว่างก่อนหรือหลัง "=" และถ้าค่ามีช่องว่างจะต้องยกมา
ตัวเลือก DSN คั่นด้วยเครื่องหมายจุลภาค ดูหน้าคู่มือ percona-toolkit สำหรับรายละเอียดทั้งหมด

·ก

dsn: ชุดอักขระ; สำเนา: ใช่

ชุดอักขระเริ่มต้น

· NS

dsn: ฐานข้อมูล; สำเนา: ใช่

ฐานข้อมูลที่มีตารางที่จะซิงค์

· NS

dsn: mysql_read_default_file; สำเนา: ใช่

อ่านเฉพาะตัวเลือกเริ่มต้นจากไฟล์ที่กำหนด

·ชม

dsn: โฮสต์; สำเนา: ใช่

เชื่อมต่อกับโฮสต์

· NS

dsn: รหัสผ่าน; สำเนา: ใช่

รหัสผ่านเพื่อใช้ในการเชื่อมต่อ หากรหัสผ่านมีเครื่องหมายจุลภาค จะต้องหลีกเลี่ยง
ด้วยแบ็กสแลช: "exam\,ple"

· ป

dsn: พอร์ต; สำเนา: ใช่

หมายเลขพอร์ตที่ใช้เชื่อมต่อ

· NS

dsn: mysql_socket; สำเนา: ใช่

ไฟล์ซ็อกเก็ตที่ใช้สำหรับการเชื่อมต่อ

· NS

สำเนา: ใช่

ตารางที่จะซิงค์

· ยู

dsn: ผู้ใช้; สำเนา: ใช่

ผู้ใช้สำหรับเข้าสู่ระบบหากไม่ใช่ผู้ใช้ปัจจุบัน

และพวกเรา


ตัวแปรสภาพแวดล้อม "PTDEBUG" เปิดใช้งานเอาต์พุตการดีบักแบบละเอียดไปยัง STDERR การเปิดใช้งาน
การดีบักและดักจับเอาต์พุตทั้งหมดไปยังไฟล์ เรียกใช้เครื่องมือเช่น:

PDEBUG=1 pt-table-sync ... > FILE 2>&1

ระวัง: การดีบักเอาท์พุตมีจำนวนมากและสามารถสร้างเอาต์พุตได้หลายเมกะไบต์

ระบบ สิ่งที่ต้องมี


คุณต้องมี Perl, DBI, DBD::mysql และแพ็คเกจหลักบางตัวที่ควรติดตั้งในทุก
Perl เวอร์ชันใหม่พอสมควร

ใช้ pt-table-syncp ออนไลน์โดยใช้บริการ onworks.net


เซิร์ฟเวอร์และเวิร์กสเตชันฟรี

ดาวน์โหลดแอพ Windows & Linux

คำสั่ง Linux

Ad




×
โฆษณา
❤️ช้อป จอง หรือซื้อที่นี่โดยไม่เสียค่าใช้จ่าย ช่วยให้บริการต่างๆ ฟรี