MySQL - หลีกเลี่ยงการล็อคตารางระหว่างการสำรองข้อมูล


2

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

ตามรายการกระบวนการดูเหมือนว่าข้อความค้นหาในตารางที่ไม่เกี่ยวข้องจะถูกบล็อกในบางครั้งเช่น "INSERT INTO A" อยู่ในสถานะถูกล็อกเป็นเวลาหลายนาทีในขณะที่การสืบค้นที่ทำงานอยู่เพียงแตะที่ตาราง B

มีวิธีที่ดีกว่าในการสำรองข้อมูลเช่นนี้หรือไม่

คำตอบ:


4

คุณมีสองทางเลือก:

A. การใช้งาน --skip-lock-tables ตัวเลือก mysqldump ตารางของคุณจะไม่ถูกล็อค แต่การสำรองข้อมูลของคุณอาจไม่สอดคล้องกัน (ขึ้นอยู่กับสคีมาของคุณ: หากทรานแซคชันฐานข้อมูลของคุณแตะหลายตารางพร้อมกันและตารางหนึ่งสำรองแล้ว และคำสั่งซื้อหากลูกค้าสำรองไว้ก่อนจากนั้นจึงใส่คู่ลูกค้า / คำสั่งซื้อใหม่คุณอาจท้ายด้วยคำสั่งซื้อโดยไม่มีลูกค้าในการสำรองข้อมูลของคุณ)

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

B. ใช้วิธีการสำรองข้อมูลอื่น ๆ ตัวอย่างเช่น: ล้างตารางที่มีการล็อกการอ่านสร้างสแนปชอต LVM ปลดล็อกตารางเมานต์สแน็ปช็อต LVM ของคุณและสำรองข้อมูลของคุณ สิ่งนี้จะซับซ้อนและรวดเร็วกว่า mysqldump ธรรมดามาก Google "mysql backups พร้อม LVM snapshots" มีสคริปต์และแบบฝึกหัดมากมาย

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.