นี่คือคำสั่ง 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