การสำรองข้อมูล MySQL อย่างไม่มีที่สิ้นสุดในงบประมาณ


14

สถานการณ์จำลองการสำรองข้อมูล MySQL ปัจจุบันของฉันคือการทำซ้ำ db ของเราไปยังเซิร์ฟเวอร์ที่สองและรัน mysqldump บนเซิร์ฟเวอร์นั้นเพื่อลบการหยุดทำงานใด ๆ จากการล็อคตารางหรือแถว สิ่งนี้ใช้ได้ดี แต่ราคา $ 150 ต่อเดือนสำหรับเซิร์ฟเวอร์ตัวที่สอง (โฮสติ้งของออสเตรเลียแพงกว่า US มาก)

ฉันอ่านคำถามมากมายเกี่ยวกับที่นี่ผู้คนส่วนใหญ่ต้องการความช่วยเหลือเกี่ยวกับการสำรองข้อมูลตามกำหนดเวลาและอะไรก็ตามที่ไม่ใช่สิ่งที่ฉันต้องการ ฉันต้อง mysqldump (ยิ่งกว่าทุกๆ 4 ชั่วโมง) โดยไม่มีการหยุดทำงาน db ไม่ได้บีบอัด ~ 7GB ดังนั้น mysqldump อาจใช้เวลาพอสมควรขึ้นอยู่กับเซิร์ฟเวอร์

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

ฉันเพิ่งอ่านhttp://www.zmanda.com/quick-mysql-backup.htmlนี้และมันก็ดูดี $ 300 ต่อปีก็โอเคที่ช่วยฉันได้มาก

น่าเสียดายที่ฉันไม่สามารถจำลอง RDS ของ Amazon ได้ แต่ฉันสามารถทำซ้ำกับ micro RC2 instance แต่การจำลองจะเกิดขึ้นบนเน็ตและ ping คือ ~ 220ms

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

ความคิดเห็นจะได้รับการชื่นชมอย่างมาก


เว็บไซต์คืออะไร ให้คำอธิบายว่าทำอะไรได้บ้าง
jamespo

คุณสามารถซื้อเซิร์ฟเวอร์ในราคาถูกกว่า $ 150 ต่อเดือน 7GB ไม่ได้ฟังดูเหมือนข้อมูลจำนวนมาก คุณสามารถซื้อเซิร์ฟเวอร์ 128MB แบบใช้ครั้งเดียวได้เพียง $ 1.50 ต่อเดือนและ 1GB ที่น่าประทับใจมากขึ้นสำหรับราคา $ 20 เนื่องจากไม่จำเป็นต้องมีแคชคิวรีคุณจึงสามารถจัดการการเขียนจำนวนมากได้อย่างง่ายดายด้วย RAM ขนาด GB และเซิร์ฟเวอร์ที่มี SSD
Xeoncross

LVM snapshots จะไม่ให้ภาพที่สอดคล้องเว้นแต่คุณจะปิดเซิร์ฟเวอร์ก่อน คุณสามารถถ่ายภาพร้อนและลองสร้างไฟล์ใหม่ - แต่มันมีความเสี่ยง
symcbean

คำตอบ:


10

หากคุณใช้ตาราง Innodb คุณสามารถใช้

http://www.percona.com/docs/wiki/percona-xtrabackup:start

ที่จะถ่ายโอนข้อมูลของฐานข้อมูลของคุณที่สามารถนำเข้าโดยเครื่องมือของพวกเขาโดยไม่ต้องล็อก ฉันเชื่อว่าถ้าคุณมีตาราง myisam มันจะล็อคเหล่านั้น


ฉันมีตาราง MyISAM บางตัว แต่ไม่ได้ใช้บ่อยๆดังนั้นการล็อกเหล่านั้นก็โอเค ขอบคุณสำหรับความคิดเห็นจะตรวจสอบว่า
คริสเตียน

หิน Percona btw!
คริสเตียน

5

หากคุณกำลังใช้ InnoDB mysqldump --single-transaction ...หรือแบ็กเอนด์ที่ทำธุรกรรมได้อย่างเต็มที่อีกคุณสามารถใช้ ฉันใช้สิ่งนี้กับฐานข้อมูลขนาดใหญ่ (~ 100GB) ที่มีผลลัพธ์ดี หากฐานข้อมูลอยู่ภายใต้การโหลดจำนวนมากอาจใช้เวลาหลายชั่วโมงแต่จะทำงานโดยไม่ต้องล็อคตารางของคุณ การจำลองแบบโดยทั่วไปจะดีกว่า แต่บางครั้งคุณต้องการไฟล์ solid dump ที่ดี โปรดทราบว่าคุณสามารถทิ้งทาสการจำลองแบบ mysql เช่นกัน

จากหน้า mysqldump (สังเกตคำเตือนเกี่ยวกับการดำเนินการที่จะรั่วไหลไปยังธุรกรรม):

 ·   --single-transaction

   This option sends a START TRANSACTION SQL statement to the server
   before dumping data. It is useful only with transactional tables
   such as InnoDB, because then it dumps the consistent state of the
   database at the time when BEGIN was issued without blocking any
   applications.

   When using this option, you should keep in mind that only InnoDB
   tables are dumped in a consistent state. For example, any MyISAM or
   MEMORY tables dumped while using this option may still change
   state.

   While a --single-transaction dump is in process, to ensure a valid
   dump file (correct table contents and binary log coordinates), no
   other connection should use the following statements: ALTER TABLE,
   CREATE TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE. A
   consistent read is not isolated from those statements, so use of
   them on a table to be dumped can cause the SELECT that is performed
   by mysqldump to retrieve the table contents to obtain incorrect
   contents or fail.

โจชัวผมสังเกตคำสะกดผิดของคุณ 'ตัวเอง' และทราบว่าฉันคิดว่ามันจึงยากที่จะพิมพ์ 'ตัวเอง' เพราะผมเพียงธรรมชาติพิมพ์ MySQL ขณะนี้ฉันทำการ mysqldump 4 ชั่วโมงต่อชั่วโมงบนเครื่องทาส ธุรกรรมเดียวดูเหมือนว่าเป็นตัวเลือกที่ดีขอบคุณ!
คริสเตียน

Doh รับได้สวย. :)
Joshua Hoblitt

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

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

2

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

ตราบใดที่คุณสามารถใช้แบนด์วิดท์ที่ส่งออกมากในแผนโฮสต์ของออสเตรเลีย

นี่คือการตอบสนองที่มีรายละเอียดมากขึ้นว่ามีเวลาแฝงสูงหรือไม่


1
ฉันไม่ทราบเลยว่ามันจะใช้แบนด์วิดท์เท่าไร บางทีฉันควรตรวจสอบปริมาณการใช้งานระหว่างกล่องที่ฉันมีตอนนี้เพื่อดูว่ามีการใช้งานเท่าใด
คริสเตียน

1
คุณอาจ "ผิดหวัง" โดยพยายามเรียกใช้ mysql ที่ด้านบนของ EBS ฉันขอแนะนำให้คุณทดสอบประสิทธิภาพก่อนลองใช้เพื่อจำลองแบบ
Joshua Hoblitt

ขอบคุณสำหรับสิ่งนั้นจะได้รับความรู้สึกอย่างแน่นอนก่อนที่ฉันจะเริ่มใช้มัน - หากเป็นวิธีที่ฉันใช้
Christian

1

ในความเป็นจริงเฉพาะเวลาที่ใช้ในการส่งออกฐานข้อมูลจริงเท่านั้นที่จะหยุดทำงาน ทำในช่วงเวลาช้าพอและไม่ควรมีปัญหาใด ๆ แผนกไอทีในงบประมาณนั้นคาดหวังอะไรจริงๆ

คุณควรจะสามารถ mysqldump ฐานข้อมูล 7GB ในสูงสุด 5-10 นาทีถอดล็อคการอ่าน / เขียนและการหยุดทำงานจะจบลง จากนั้นคุณสามารถค้นหาแบนด์วิดธ์ที่มีประสิทธิภาพสูงสุดในไฟล์ 7GB ไปยังเซิร์ฟเวอร์ใหม่ (อ่าน: การบีบอัดสูง) คุณมีเวลาเหลือเฟือที่จะรับส่งไฟล์และนำเข้าสู่ MySQL บนเซิร์ฟเวอร์ใหม่ จากนั้นป้อนข้อมูล masterlog และเริ่มการจำลองแบบ ควรเป็นเค้กชิ้นหนึ่ง!

เอกสาร MySQL นั้นยอดเยี่ยม : http://dev.mysql.com/doc/refman/5.0/en/replication.html


และฉันหมายถึงการเพิ่มการจำลองแบบไม่ได้ใช้แบนด์วิดท์มาก ไม่ต้องสงสัยเลยว่าเป็นการโทรที่ดีกว่า mysqldump-ing ทุก ๆ สี่ชั่วโมง !!!
ลูกา

ใครพูดถึงแผนกไอที นี่เป็นเพียงเว็บไซต์ของฉัน :) และตอนนี้ฉันกำลังจำลองการสำรองข้อมูล แต่ไม่แน่ใจว่าเป็นวิธีที่ดีที่สุดที่ $ 150 p / m ตามที่ระบุไว้ตัวเลือกของอินสแตนซ์ขนาดเล็ก EC2 อยู่ที่นั่น
คริสเตียน

@ คริสเตียนคืออะไร p / m? ฉันไม่รู้ว่ามันคืออะไร แต่ 150 $ สำหรับ p เดี่ยวต่อ m ดูเหมือนว่าจะแพง 8- |
TehShrike

@TehShrike, p / m = ต่อเดือน โฮสติ้งของออสเตรเลียนั้นแพงกว่าโฮสติ้งของสหรัฐมาก นอกจากนี้ฉันพยายามเก็บเซิร์ฟเวอร์ที่สองในเครือข่ายเดียวกันเพื่อความเร็วและการถ่ายโอนที่ไม่นับรวมกับค่าเผื่อแบนด์วิดท์
Christian

1

ฉันไม่แน่ใจว่าฉันสามารถ จำกัด การใช้หน่วยความจำบนพื้นฐานต่อ db

แน่นอนคุณทำได้ - คุณต้องใช้ทาสด้วย /etc/my.cnf อื่น

คุณสามารถทำสิ่งต่าง ๆ เพื่อจัดการลำดับความสำคัญของการกำหนดเวลา / ความสัมพันธ์ของ CPU บนต้นแบบและทาสโดยใช้ nice / renice และ tasket (สมมติว่าเป็นเซิร์ฟเวอร์ Linux)

แต่การจำลองแบบจะเกิดขึ้น over-net และ ping คือ ~ 220ms

ความหน่วงแฝงค่อนข้างไม่สำคัญ - สิ่งสำคัญคือแบนด์วิดท์ - และแบนด์วิดท์ฐานข้อมูล (สมมติว่าคุณไม่ได้จำลองข้อมูลเซสชั่น) เป็นคำสั่งที่มีขนาดน้อยกว่าแบนด์วิดท์ HTTP

ฉันต้องการ [สร้างการสำรองข้อมูลที่สอดคล้องกันของฐานข้อมูล] (ดีกว่าทุก 4 ชั่วโมง) โดยไม่มีการหยุดทำงาน

แต่กลยุทธ์ที่คุณพูดถึงไม่อนุญาตให้กู้ในเวลาเช่นนั้น

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

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


การตอบสนองที่ดีขอบคุณสำหรับสิ่งนั้น เซิร์ฟเวอร์ใหม่ที่ฉันกำลังมองหาจะมีหน่วยความจำเพียงพอที่จะอนุญาตให้ใช้ทาสในเครื่องเดียวกัน แต่ฉันชอบแนวคิดของ binlogs ที่ถูกคัดลอก / รีดไปข้างหน้า ขอบคุณอีกครั้ง!
คริสเตียน

1

คำแนะนำของฉัน:

1 - เก็บบัญชี / เซิร์ฟเวอร์ที่สองของคุณและใช้การจำลองแบบกับฐานข้อมูลในบัญชี / เซิร์ฟเวอร์เดิมของคุณ

2 - หยุดการจำลองแบบไปยังบัญชี / เซิร์ฟเวอร์ที่สอง

3 - ตรวจสอบประสิทธิภาพเป็นเวลาสองสามวัน ตรวจสอบให้แน่ใจว่าคุณตรวจสอบได้นานพอที่จะรวมช่วงเวลาที่ยุ่งที่สุดของคุณ

4 - พร้อมที่จะสลับไปยังการตั้งค่าเดิมของคุณหากมีปัญหาประสิทธิภาพการทำงานที่สำคัญ นี่คือเหตุผลที่คุณเก็บบัญชีที่สองไว้

5 - ซื้อเซิร์ฟเวอร์ความจุ / อัปเกรดเพิ่มเติมในบัญชีเดิมของคุณ นี่ควรจะถูกกว่าการจ่ายสำหรับสองเซิร์ฟเวอร์ที่ฉันเชื่อ

6 - ยกเลิกบัญชีที่สอง

โชคดี!

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