วิธีเพิ่มการสำรองข้อมูลที่รวดเร็วและกู้คืนฐานข้อมูล 500GB โดยใช้ mysqldump


10

มีฐานข้อมูลขนาด 500GB ตารางในฐานข้อมูล A มีทั้งตาราง MyISAM และ INNODB ตาราง MyISAM เป็นตารางต้นแบบและตาราง Innodb เป็นตารางธุรกรรมหลัก

สำรองและคืนค่าโดยใช้การถ่ายโอนข้อมูล mysql ออกจากเวลานานหรือวัน

  • max_allowed_packet = 1G
  • foreign_key_checks = 0
  • auto_commit = ปิด

1
ฉันแค่ต้องการให้แน่ใจว่าคุณใช้ --opt กับยูทิลิตี้ mysqldump นี่คือประหยัดเวลามากเมื่อโหลดใหม่ โดยไม่ต้อง mysqldump สร้างไฟล์ sql ทีละแถว --opt ทำ: เพิ่มล็อคปล่อยและสร้างใหม่ด้วยตัวเลือกการสร้างทั้งหมดที่เปิดใช้งานปิดการใช้งานคีย์ชั่วคราวสำหรับการโหลดอย่างรวดเร็วและจากนั้นเปิดกุญแจอีกครั้งในตอนท้ายเพื่อสร้างดัชนีหลังจากการเขียนเสร็จแล้ว มันเชื่อมหลายแถวเข้าด้วยกันในส่วนแทรกเพื่อลดขนาดไฟล์และเวลาในการแยกวิเคราะห์ของแต่ละคำสั่ง (มากถึง 70%) และเปิดใช้งาน - ด่วนเพื่อลดโหลดเทียบกับการทุ่มตลาด DB เมื่อทำงาน ลดเวลาในการโหลดลง 80%
ppostma1

คำตอบ:


5

แต่ลิงก์ยังแนะนำ XtraBackup จาก Percona ซึ่งเร็วกว่าไม่มีการล็อกบนตารางที่ใช้งานอยู่แล้วและไม่เสียเวลาในการกู้คืน สำหรับข้อมูล 500GB ฉันต้องการให้ Percona XtraBackup รวดเร็วและมีประสิทธิภาพเว้นแต่คุณต้องการแปลงให้เป็นรุ่น innodb_file_per_table หากไม่ใช่จากเซิร์ฟเวอร์ DB ที่มีอยู่ ลิงค์ด้านล่างอธิบายวิธีดำเนินการต่อ

http://www.percona.com/doc/percona-xtrabackup/innobackupex/creating_a_backup_ibk.html


1
ปัญหาของ Percona Xtrabackup คือต้องหยุด mysqld เพื่อกู้คืนฐานข้อมูล
dr_

2

ตรวจสอบ mydumper มันเร็วกว่า mysqldump มาก: Mydumper 0.6.1 ใหม่มีคุณสมบัติด้านประสิทธิภาพและการใช้งาน

คุณสามารถดาวน์โหลดได้จากที่นี่: https://github.com/maxbube/mydumper

mydumper คืออะไร ทำไม?

  • Parallelism (ด้วยเหตุนี้, ความเร็ว) และประสิทธิภาพ (หลีกเลี่ยงรูทีนการแปลงชุดอักขระที่มีราคาแพง, รหัสที่มีประสิทธิภาพโดยรวม)
  • จัดการเอาต์พุตได้ง่ายขึ้น (แยกไฟล์สำหรับตาราง, เมตาดาต้าดัมพ์, ฯลฯ , ง่ายต่อการดู / แยกวิเคราะห์ข้อมูล)
  • ความสอดคล้อง - เก็บสแน็ปช็อตในเธรดทั้งหมดจัดเตรียมตำแหน่งบันทึกหลักและทาสที่ถูกต้อง ฯลฯ
  • การจัดการ - รองรับ PCRE สำหรับการระบุฐานข้อมูลและการรวมและแยกตาราง

1

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

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

นี่เป็นเทคนิคที่รวดเร็วและเกือบจะได้รับการพิสูจน์แล้ว แต่ไม่แน่ใจว่าจะใช้เวลานานเท่าใดในการกู้คืนจาก 500G แต่ imho คุณต้องการอะไรแบบขนาน ดูลิงค์ด้านล่างเพื่อดูตัวอย่าง

การกู้คืนแบบขนานอย่างรวดเร็วจากการทิ้ง SQL (mysqldump) สำหรับ MySQL


1

ลองทำสิ่งต่อไปนี้กับ innobackupex:

innobackupex --parallel=7 --rsync  /var/mysql/backup

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

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