ตาราง InnoDB ถูกล็อคระหว่าง mysqldump เมื่อผสมกับ MyISAM หรือไม่


9

ฉันกำลังมองหาโซลูชันสำรองสำหรับเซิร์ฟเวอร์ mysql ของฉันและฉันต้องการการหยุดทำงานน้อยลงเท่าที่จะทำได้ ฉันมีดังต่อไปนี้:

  • เซิร์ฟเวอร์ MySQL
  • พวกเขาจะไม่ทำซ้ำ
  • แต่ละเซิร์ฟเวอร์ย่อมาจากของตัวเอง

ตัวเลขนี้สามารถเติบโตได้ดังนั้นการตั้งค่าการจำลองแบบต้นแบบ / ทาสจะไม่เป็นความคิดที่ดี

วิธีการสำรองข้อมูลที่ง่ายที่สุดที่ฉันเห็นคือการใช้ mysqldump กับซอฟต์แวร์เช่น "automysqlbackup" ข้อมูลที่สำคัญที่สุดของฉันคือใช้ InnoDB ตาราง InnoDB ของฉันค่อนข้างหนัก

คำถามคือถ้าฉันทำ mysqldump กับฐานข้อมูลทั้งหมดในเซิร์ฟเวอร์มันจะล็อคตาราง Innodb ของฉันหรือไม่

คำตอบ:


7

mysqldumps กับ InnoDB และ MyISAM ร่วมกันถือว่าเป็นเอกสิทธิ์เฉพาะบุคคล นี่คือเหตุผล:

หากคุณสามารถเข้าสู่ mysql ขณะที่ mysqldump อยู่ในระหว่างดำเนินการคุณจะเห็นสิ่งนี้:

SELECT /* SQL_NO_CACHE */ * FROM tblname

โดยค่าเริ่มต้น mysqldump จะทำสิ่งต่อไปนี้:

  • ทุกฐานข้อมูลจะถูกทิ้งตามลำดับตัวอักษร
  • ทุกตารางที่ดัมพ์ต่อฐานข้อมูลจะถูกดัมพ์ตามลำดับตัวอักษร (โดยไม่คำนึงถึงเอ็นจินการเก็บข้อมูล)

สิ่งนี้ควรใช้ได้สำหรับ MySQL Instance ที่ไม่มีกิจกรรมฐานข้อมูลอื่น ตาราง InnoDB และตาราง MyISAM จะไม่ส่งผลกระทบต่อกันและกัน

การใช้งาน--single-transactionอินสแตนซ์ MySQL InnoDB MySQL ทั้งหมดสร้างจุดตรวจสอบและทิ้งตารางทั้งหมดจากจุดเวลาเดียวกัน เมื่อพบตาราง MyISAM การเดิมพันทั้งหมดจะปิด อาจทำให้ตาราง InnoDB ทั้งหมดหลังจาก MyISAM ถูกเททิ้งจากจุดเวลาอื่น

เพื่อให้การถ่ายโอนข้อมูล ณ จุดเวลาสอดคล้องกันสำหรับส่วนผสมของ InnoDB และ MyISAM คุณมีตัวเลือก

ตัวเลือกที่ 1

รีสตาร์ท mysql เพื่อให้ไม่มีใครสามารถเข้าสู่ระบบผ่าน TCP / IP จากนั้น mysqldump

service mysql restart --skip-networking --skip-grant-tables
mysqldump --routines --triggers --all-databases > MySQLData.sql
service mysql restart 

OPTION # 2

หากตาราง MyISAM ทั้งหมดสำหรับการอ่านเท่านั้นเพียง mysqldump โดยใช้ --single-transaction

OPTION # 3

หากตาราง MyISAM ใด ๆ กำลังถูกเขียน - ธุรกรรมเดี่ยวไม่เพียงพอ

คุณจะทำสิ่งต่อไปนี้:

mysql -u... -p... -e"FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400)"
sleep 30
mysqldump --routines --triggers --all-databases > MySQLData.sql

ทันทีหลังจากที่ mysqldump เสร็จแล้วเข้าสู่ระบบ MySQL show processlist;และทำ ค้นหาคิวSELECT SLEEP(86400)รีค้นหา ID กระบวนการและเรียกใช้KILL <procidnumn>;


5

mysqldump --single-transactionไม่ล็อคตาราง แต่ตาราง MyISAM ไม่รับประกันว่าจะมีการทิ้งที่สอดคล้องกับตัวเลือกนี้ ดีกว่าที่จะใช้mydumper, mydumperล็อคตาราง MyISAM และไม่ได้ล็อค InnoDB เพื่อให้การถ่ายโอนข้อมูลมีความสอดคล้อง


ว้าวขอบคุณสำหรับเครื่องมือที่ยอดเยี่ยมนี้! คุณคุ้นเคยกับเครื่องมือที่สามารถทำการสำรองข้อมูลรายวันรายสัปดาห์และรายเดือนโดยอัตโนมัติด้วย mydumper หรือไม่? บางอย่างเช่น "automysqlbackup" เพียงกับ mydumper? ขอบคุณ
tounano

0

mysqldump ล็อคตารางระหว่างการถ่ายโอนข้อมูล ภาพรวมการใช้ LVM หรือXtrabackup

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