วิธีหลักสองวิธีในการสำรองฐานข้อมูลคือการใช้โปรแกรม mysqldump หรือคัดลอกไฟล์ฐานข้อมูลโดยตรง (เช่น การใช้ cp, cpio หรือ tar เป็นต้น) บทความนี้ให้รายละเอียดเกี่ยวกับแผนสำรองฐานข้อมูลแพลตฟอร์ม MySQL ในกรณีที่ตารางฐานข้อมูลสูญหายหรือเสียหาย สิ่งสำคัญคือต้องสำรองฐานข้อมูลของคุณ หากระบบขัดข้อง คุณจะต้องสามารถกู้คืนตารางของคุณกลับสู่สถานะเดิมได้อย่างแน่นอนเมื่อเกิดข้อขัดข้องโดยสูญเสียข้อมูลน้อยที่สุด บางครั้งก็เป็นผู้ดูแลระบบ MySQL ที่ทำให้เกิดความเสียหาย ผู้ดูแลระบบรู้อยู่แล้วว่าตารางเสียหาย และการพยายามแก้ไขโดยตรงโดยใช้โปรแกรมแก้ไขเช่น vi หรือ Emacs ไม่ใช่สิ่งที่ดีสำหรับตารางอย่างแน่นอน
วิธีหลักสองวิธีในการสำรองฐานข้อมูลคือการใช้โปรแกรม mysqldump หรือคัดลอกไฟล์ฐานข้อมูลโดยตรง (เช่น การใช้ cp, cpio หรือ tar เป็นต้น) แต่ละวิธีมีข้อดีและข้อเสีย:
mysqldump ทำงานร่วมกับเซิร์ฟเวอร์ MySQL วิธีการคัดลอกโดยตรงจะดำเนินการนอกเซิร์ฟเวอร์ และคุณต้องดำเนินการเพื่อให้แน่ใจว่าไม่มีไคลเอ็นต์ใดแก้ไขตารางที่คุณกำลังคัดลอก หากคุณต้องการใช้การสำรองข้อมูลระบบไฟล์เพื่อสำรองฐานข้อมูล ปัญหาเดียวกันนี้จะเกิดขึ้น: หากมีการแก้ไขตารางฐานข้อมูลในระหว่างกระบวนการสำรองข้อมูลระบบไฟล์ เรื่องของไฟล์ตารางที่สำรองไว้จะไม่สอดคล้องกัน และตารางจะเป็น ไม่มีความหมายต่อการฟื้นตัวในอนาคต ข้อแตกต่างระหว่างการสำรองข้อมูลระบบไฟล์และสำเนาโดยตรงของไฟล์ก็คือ คุณสามารถควบคุมกระบวนการสำรองข้อมูลได้อย่างสมบูรณ์ ดังนั้นคุณจึงสามารถดำเนินการเพื่อให้แน่ใจว่าเซิร์ฟเวอร์จะออกจากโต๊ะโดยไม่ถูกรบกวน
mysqldump ช้ากว่าการคัดลอกโดยตรง
mysqldump สร้างไฟล์ข้อความที่สามารถพกพาไปยังเครื่องอื่นได้ แม้แต่ไฟล์ที่มีสถาปัตยกรรมฮาร์ดแวร์ต่างกันก็ตาม การคัดลอกไฟล์โดยตรงไม่สามารถย้ายไปยังเครื่องอื่นได้ เว้นแต่ตารางที่คุณกำลังคัดลอกจะใช้รูปแบบที่จัดเก็บข้อมูล MyISAM สามารถคัดลอกตาราง ISAM บนเครื่องที่มีโครงสร้างฮาร์ดแวร์คล้ายกันเท่านั้น รูปแบบพื้นที่จัดเก็บตาราง MyISAM ที่นำมาใช้ใน MySQL 3.23 แก้ปัญหานี้ได้เนื่องจากรูปแบบนี้ไม่ขึ้นอยู่กับเครื่อง ดังนั้นการคัดลอกไฟล์โดยตรงจึงสามารถย้ายไปยังเครื่องที่มีโครงสร้างฮาร์ดแวร์ต่างกันได้ ตราบใดที่ตรงตามเงื่อนไขสองข้อ: เครื่องอีกเครื่องจะต้องใช้งาน MySQL 3.23 หรือใหม่กว่า และไฟล์จะต้องแสดงในรูปแบบ MyISAM ไม่ใช่รูปแบบ ISAM
ไม่ว่าคุณจะใช้วิธีการสำรองข้อมูลแบบใด หากคุณต้องการกู้คืนฐานข้อมูลของคุณ มีหลักการหลายประการที่ควรปฏิบัติตามเพื่อให้แน่ใจว่าได้รับผลลัพธ์ที่ดีที่สุด:
ใช้การสำรองข้อมูลปกติ จัดทำแผนและปฏิบัติตามนั้น
ให้เซิร์ฟเวอร์ดำเนินการบันทึกการอัปเดต บันทึกการเปลี่ยนแปลงจะช่วยคุณเมื่อคุณต้องการกู้คืนข้อมูลหลังจากเกิดข้อขัดข้อง หลังจากที่คุณใช้ไฟล์สำรองข้อมูลเพื่อกู้คืนข้อมูลไปยังสถานะที่เป็นอยู่ ณ เวลาที่สำรองข้อมูล คุณสามารถนำการเปลี่ยนแปลงที่ทำหลังจากการสำรองข้อมูลไปใช้ใหม่ได้โดยการเรียกใช้แบบสอบถามในบันทึกการอัปเดต ซึ่งจะคืนค่าตารางในฐานข้อมูลเป็น สภาพที่พวกเขาอยู่เมื่อเกิดอุบัติเหตุ
ในเงื่อนไขการสำรองข้อมูลระบบไฟล์ ไฟล์สำรองฐานข้อมูลแสดงถึงการถ่ายโอนข้อมูลแบบเต็ม ในขณะที่บันทึกการอัปเดตแสดงถึงการถ่ายโอนข้อมูลส่วนเพิ่ม
ใช้รูปแบบการตั้งชื่อที่สอดคล้องกันและเข้าใจได้สำหรับไฟล์สำรอง สิ่งต่างๆ เช่น backup1, buckup2 ฯลฯ ไม่ได้มีความหมายมากนัก เมื่อดำเนินการกู้คืน คุณจะเสียเวลาค้นหาว่ามีอะไรอยู่ในไฟล์บ้าง คุณอาจพบว่าการใช้ชื่อฐานข้อมูลและวันที่เพื่อสร้างชื่อไฟล์สำรองนั้นมีประโยชน์ ตัวอย่างเช่น:
%mysqldump samp_db >/usr/เอกสารสำคัญ/mysql/samp_db.1999-10-02
% mysqldump โรงละครสัตว์ > / usr / archives / mysql / menagerie.1999-10-02
คุณอาจต้องการบีบอัดข้อมูลสำรองหลังจากสร้างแล้ว การสำรองข้อมูลมักจะมีขนาดใหญ่ คุณยังต้องทำให้ไฟล์สำรองของคุณหมดอายุเพื่อหลีกเลี่ยงไม่ให้ไฟล์เต็มดิสก์ เช่นเดียวกับที่คุณทำให้ไฟล์บันทึกของคุณหมดอายุ
สำรองไฟล์สำรองข้อมูลของคุณด้วยการสำรองข้อมูลระบบไฟล์ หากคุณพบปัญหาขัดข้องโดยสิ้นเชิงซึ่งไม่เพียงแต่ล้างไดเร็กทอรีข้อมูลของคุณ แต่ยังรวมถึงดิสก์ไดรฟ์ที่มีการสำรองฐานข้อมูลด้วย คุณจะต้องประสบปัญหาอย่างแท้จริง
สำรองข้อมูลบันทึกการเปลี่ยนแปลงของคุณด้วย
วางไฟล์สำรองของคุณบนระบบไฟล์อื่นที่ไม่ใช่ระบบที่ใช้สำหรับฐานข้อมูลของคุณ วิธีนี้จะช่วยลดความเป็นไปได้ในการเติมระบบไฟล์ที่มีไดเร็กทอรีข้อมูลอันเป็นผลมาจากการสร้างการสำรองข้อมูล
เทคนิคที่ใช้ในการสร้างการสำรองข้อมูลยังมีประโยชน์สำหรับการคัดลอกฐานข้อมูลไปยังเครื่องอื่นอีกด้วย โดยทั่วไปแล้ว ฐานข้อมูลจะถูกย้ายไปยังเซิร์ฟเวอร์ที่ทำงานบนโฮสต์อื่น แต่คุณยังสามารถย้ายข้อมูลไปยังเซิร์ฟเวอร์อื่นบนโฮสต์เดียวกันได้
1 ใช้ mysqldump เพื่อสำรองและคัดลอกฐานข้อมูล
เมื่อคุณใช้โปรแกรม mysqldumo เพื่อสร้างไฟล์สำรองฐานข้อมูล ตามค่าเริ่มต้น เนื้อหาของไฟล์จะมีคำสั่ง CREATE ที่สร้างตารางที่กำลังดัมพ์และคำสั่ง INSERT ที่มีข้อมูลแถวในตาราง กล่าวอีกนัยหนึ่ง เอาต์พุตที่สร้างโดย mysqldump สามารถใช้เป็นอินพุตไปยัง mysql เพื่อสร้างฐานข้อมูลใหม่ได้ในภายหลัง
คุณสามารถดัมพ์ฐานข้อมูลทั้งหมดลงในไฟล์ข้อความเดียวได้ดังนี้:
%mysqldump samp_db >/usr/เอกสารสำคัญ/mysql/samp_db.1999-10-02
จุดเริ่มต้นของไฟล์เอาต์พุตมีลักษณะดังนี้:
# MySQL Dump 6.0# # โฮสต์: ฐานข้อมูล localhost: samp_db
-
เซิร์ฟเวอร์เวอร์ชัน 3.23.2-alpha-log## โครงสร้างตารางสำหรับการไม่มีตาราง
#CREATE TABLE ขาด (school_id int (10) ไม่ได้ลงนาม DEFAULT 0 NOT NULL, วันที่วันที่ DEFAULT 0000-00-00 NOT NUL L,
คีย์หลัก (student_id,date));## การทิ้งข้อมูลสำหรับการขาดตาราง #INSERT INTO VALUES การขาด (3,1999-09-03);INSERT INTO การขาด VALUE S (5,1999-09-03);INSERT INTO มูลค่าการขาด (10,1999-09-08);......
ส่วนที่เหลือของไฟล์ประกอบด้วยคำสั่ง INSERT และ CREATE TABLE เพิ่มเติม หากคุณต้องการบีบอัดข้อมูลสำรอง ให้ใช้คำสั่งที่คล้ายกับต่อไปนี้:
%mysqldump samp_db | .gzip >/usr/archives/mysql/samp_db.1999-10-02.gz
หากคุณมีฐานข้อมูลขนาดใหญ่ ไฟล์เอาต์พุตก็จะมีขนาดใหญ่และอาจจัดการได้ยาก หากต้องการ คุณสามารถแสดงรายการชื่อตารางแต่ละตารางหลังชื่อฐานข้อมูลบนบรรทัดคำสั่ง mysqldump เพื่อดัมพ์เนื้อหา ซึ่งจะแยกไฟล์ดัมพ์ออกเป็นไฟล์ที่เล็กลงและจัดการได้ง่ายขึ้น ตัวอย่างต่อไปนี้แสดงวิธีดัมพ์บางตารางจากฐานข้อมูล samp_db ลงในไฟล์แยกกัน:
%mysqldump samp_db เหตุการณ์คะแนนนักเรียนขาดไป >grapbook.sql
%mysqldump ประธานสมาชิก samp_db >hist-league.sql
หากคุณกำลังสร้างไฟล์สำรองข้อมูลที่มีจุดประสงค์เพื่อใช้รีเฟรชเนื้อหาของฐานข้อมูลอื่นเป็นระยะ คุณอาจต้องการใช้ตัวเลือก --add-drop-table ซึ่งจะบอกให้เซิร์ฟเวอร์เขียนคำสั่ง DROP TABLE IF EXISTS ลงในไฟล์สำรองข้อมูล จากนั้นเมื่อคุณนำไฟล์สำรองและโหลดลงในฐานข้อมูลที่สอง คุณจะไม่ได้รับข้อผิดพลาดหากมีตารางอยู่แล้ว
หากคุณดัมพ์ฐานข้อมูลเพื่อให้คุณสามารถย้ายฐานข้อมูลไปยังเซิร์ฟเวอร์อื่น คุณไม่จำเป็นต้องสร้างไฟล์สำรองด้วยซ้ำ ตรวจสอบให้แน่ใจว่าฐานข้อมูลมีอยู่ในโฮสต์อื่น จากนั้นใช้ไปป์เพื่อดัมพ์ฐานข้อมูลเพื่อให้ mysql สามารถอ่านเอาต์พุตของ mysqldump ได้โดยตรง ตัวอย่างเช่น: คุณต้องการคัดลอกฐานข้อมูล samp_db จากโฮสต์ pit-viper.snake.net ไปยัง boa.snake.net คุณสามารถทำได้ง่ายๆ ดังนี้:
%mysqladmin -h boa.snake.net สร้าง samp_db
%mysqldump samp_db | . mysql -h boa.snake.net samp_db
ในอนาคต หากคุณต้องการรีเฟรชฐานข้อมูลบน boa.snake.net อีกครั้ง ให้ข้ามคำสั่ง mysqladmin แต่เพิ่ม --add-drop-table ไปยัง mysqldump เพื่อหลีกเลี่ยงไม่ให้ตารางมีอยู่แล้ว ข้อผิดพลาด: %mysqldump --add- วางตาราง samp_db | . mysql -h boa.snake.net samp_db
ตัวเลือก mysqldump ที่มีประโยชน์อื่นๆ ได้แก่: --flush-logs และ --lock-tables รวมกันจะมีประโยชน์สำหรับการตรวจสอบฐานข้อมูลของคุณ --lock-tables ล็อคตารางทั้งหมดที่คุณกำลังทิ้ง และ --flush-logs จะปิดและเปิดไฟล์บันทึกการอัพเดตใหม่จะรวมเฉพาะแบบสอบถามที่แก้ไขฐานข้อมูลจากจุดสำรอง นี่จะตั้งเวลาสำรองข้อมูลจุดตรวจสอบบันทึกการอัปเดตของคุณ (อย่างไรก็ตาม หากคุณมีไคลเอนต์ที่ต้องทำการอัปเดต การล็อคตารางทั้งหมดไม่ใช่ความคิดที่ดีสำหรับการเข้าถึงไคลเอนต์ระหว่างการสำรองข้อมูล)
หากคุณใช้ --flush-logs เพื่อตรวจสอบจุดในการสำรองข้อมูล วิธีที่ดีที่สุดคือทิ้งฐานข้อมูลทั้งหมด
หากคุณดัมพ์ไฟล์แยกกัน การซิงโครไนซ์จุดตรวจสอบบันทึกการอัพเดตกับไฟล์สำรองจะทำได้ยากขึ้น ในระหว่างการกู้คืน คุณมักจะแตกเนื้อหาบันทึกการอัพเดตตามแต่ละฐานข้อมูล ไม่มีตัวเลือกในการแยกการอัพเดตสำหรับแต่ละตาราง ดังนั้นคุณต้องแยกมันด้วยตัวเอง
ตามค่าเริ่มต้น mysqldump จะอ่านเนื้อหาทั้งหมดของตารางลงในหน่วยความจำก่อนที่จะเขียน โดยปกติแล้วสิ่งนี้จะไม่จำเป็นจริงๆ และเกือบจะล้มเหลวหากคุณมีโต๊ะขนาดใหญ่ คุณสามารถใช้ตัวเลือก --quick เพื่อบอกให้ mysqldump เขียนแต่ละแถวทุกครั้งที่ดึงข้อมูลมา หากต้องการเพิ่มประสิทธิภาพกระบวนการเทเพิ่มเติม ให้ใช้ --opt แทน --quick ตัวเลือก --opt จะเปิดตัวเลือกเพิ่มเติมเพื่อเพิ่มความเร็วในการถ่ายโอนข้อมูลและอ่านกลับ
การใช้การสำรองข้อมูลด้วย --opt อาจเป็นวิธีที่พบได้บ่อยที่สุดเนื่องจากข้อได้เปรียบด้านความเร็วของการสำรองข้อมูล อย่างไรก็ตาม ได้รับการเตือน ตัวเลือก --opt มีค่าใช้จ่าย --opt ปรับกระบวนการสำรองข้อมูลของคุณให้เหมาะสม ไม่ใช่การเข้าถึงฐานข้อมูลของลูกค้ารายอื่น ตัวเลือก --opt ป้องกันไม่ให้ใครก็ตามอัปเดตตารางใด ๆ ที่คุณกำลังทิ้งโดยการล็อคตารางทั้งหมดในครั้งเดียว คุณสามารถเห็นผลต่อการเข้าถึงฐานข้อมูลทั่วไปได้อย่างง่ายดาย เมื่อฐานข้อมูลของคุณมีการใช้งานบ่อยมาก เพียงแค่ปรับการสำรองข้อมูลวันละครั้ง
ตัวเลือกที่มีผลตรงกันข้ามกับ --opt คือ --dedayed ตัวเลือกนี้ทำให้ mysqldump เขียนคำสั่ง INSERT DELAYED แทนคำสั่ง INSERT --delayed จะมีประโยชน์หากคุณกำลังโหลดไฟล์ข้อมูลลงในฐานข้อมูลอื่น และคุณต้องการให้การดำเนินการนี้มีผลกระทบน้อยที่สุดต่อการสืบค้นที่อาจปรากฏในฐานข้อมูลนั้น
ตัวเลือก --compress มีประโยชน์เมื่อคุณคัดลอกฐานข้อมูลไปยังเครื่องอื่น เนื่องจากจะช่วยลดจำนวนไบต์ที่ถ่ายโอนผ่านเครือข่าย นี่คือตัวอย่าง โปรดทราบว่า --compress ถูกกำหนดไว้สำหรับโปรแกรมที่สื่อสารกับเซิร์ฟเวอร์บนโฮสต์ระยะไกล ไม่ใช่สำหรับโปรแกรมที่เชื่อมต่อกับโลคัลโฮสต์:
%mysqldump --opt samp_db | . mysql --compress -h boa.snake.net samp_db
mysqldump มีตัวเลือกมากมาย โปรดดูรายละเอียดใน "คู่มืออ้างอิง MySQL"
2 วิธีการสำรองและคัดลอกโดยใช้ฐานข้อมูลการคัดลอกโดยตรง
อีกวิธีในการสำรองฐานข้อมูลและตารางที่ไม่เกี่ยวข้องกับ mysqldump คือการคัดลอกไฟล์ตารางฐานข้อมูลโดยตรง โดยปกติแล้วจะทำได้โดยใช้โปรแกรมอรรถประโยชน์ เช่น cp, tar หรือ cpio ตัวอย่างในบทความนี้ใช้ cp
เมื่อคุณใช้วิธีการสำรองข้อมูลโดยตรง คุณต้องแน่ใจว่าไม่มีการใช้งานตารางอีกต่อไป หากเซิร์ฟเวอร์เปลี่ยนตารางในขณะที่คุณกำลังคัดลอก การคัดลอกนั้นไม่มีความหมาย
วิธีที่ดีที่สุดในการตรวจสอบความสมบูรณ์ของสำเนาของคุณคือการปิดเซิร์ฟเวอร์ คัดลอกไฟล์ จากนั้นรีสตาร์ทเซิร์ฟเวอร์ หากคุณไม่ต้องการปิดเซิร์ฟเวอร์ ให้ล็อคเซิร์ฟเวอร์ขณะดำเนินการตรวจสอบตาราง หากเซิร์ฟเวอร์กำลังทำงานอยู่ จะมีข้อจำกัดเดียวกันนี้กับการคัดลอกไฟล์ และคุณควรใช้โปรโตคอลการล็อคเดียวกันเพื่อ "เงียบ" เซิร์ฟเวอร์
สมมติว่าเซิร์ฟเวอร์ล่มหรือคุณได้ล็อคตารางที่คุณต้องการคัดลอก ข้อมูลต่อไปนี้จะแสดงวิธีสำรองฐานข้อมูล samp_db ทั้งหมดไปยังไดเร็กทอรีสำรอง (DATADIR แสดงถึงไดเร็กทอรีข้อมูลของเซิร์ฟเวอร์): %cd DATADIR%cp -r samp_db /usr /เก็บถาวร/mysql
ตารางเดียวสามารถสำรองข้อมูลได้ดังนี้:
%cd สมาชิก DATADIR/samp_db%cp.* /usr/archive/mysql/samp_db%cp คะแนน.* /usr/archive/mysql/samp_db ....
เมื่อคุณสำรองข้อมูลเสร็จแล้ว คุณสามารถรีสตาร์ทเซิร์ฟเวอร์ได้ (หากคุณปิดเครื่อง) หรือปลดล็อคที่วางไว้บนโต๊ะ (หากคุณปล่อยให้เซิร์ฟเวอร์ทำงานต่อไป)
หากต้องการคัดลอกฐานข้อมูลจากเครื่องหนึ่งไปยังอีกเครื่องหนึ่งโดยใช้ไฟล์การคัดลอกโดยตรง เพียงคัดลอกไฟล์ไปยังไดเร็กทอรีข้อมูลที่เหมาะสมบนโฮสต์เซิร์ฟเวอร์อื่น ตรวจสอบให้แน่ใจว่าไฟล์อยู่ในรูปแบบ MyIASM หรือทั้งสองเครื่องมีโครงสร้างฮาร์ดแวร์เหมือนกัน ไม่เช่นนั้นฐานข้อมูลของคุณจะมีเนื้อหาแปลก ๆ บนอีกเครื่องหนึ่ง คุณควรตรวจสอบให้แน่ใจด้วยว่าเซิร์ฟเวอร์บนเครื่องอื่นไม่สามารถเข้าถึงตารางฐานข้อมูลในขณะที่คุณกำลังติดตั้ง
3 การจำลองฐานข้อมูล
การจำลองแบบจะคล้ายกับการคัดลอกฐานข้อมูลไปยังเซิร์ฟเวอร์อื่น แต่ความหมายที่แท้จริงคือเพื่อให้แน่ใจว่าทั้งสองฐานข้อมูลมีการซิงโครไนซ์แบบเรียลไทม์อย่างสมบูรณ์ คุณสมบัตินี้จะปรากฏในเวอร์ชัน 3.23 และยังไม่สมบูรณ์มากนัก ดังนั้นบทความนี้จะไม่แนะนำโดยละเอียด
4 กู้คืนข้อมูลจากการสำรองข้อมูล
ความเสียหายของฐานข้อมูลสามารถเกิดขึ้นได้จากหลายสาเหตุและในระดับที่แตกต่างกัน หากคุณโชคดี คุณอาจสร้างความเสียหายได้เพียงหนึ่งหรือสองตารางเท่านั้น (เช่น ไฟฟ้าดับ) หากคุณโชคร้าย คุณอาจต้องเปลี่ยนไดเร็กทอรีข้อมูลทั้งหมด (เช่น ดิสก์เสียหาย) จำเป็นต้องมีการกู้คืนในบางสถานการณ์ เช่น เมื่อผู้ใช้ลบฐานข้อมูลหรือตารางโดยไม่ได้ตั้งใจ โดยไม่คำนึงถึงสาเหตุของเหตุการณ์ที่โชคร้ายเหล่านี้ คุณจะต้องดำเนินการกู้คืนบางประเภท
หากตารางเสียหายแต่ไม่สูญหาย ให้ลองซ่อมแซมด้วย myisamchk หรือ isamchk หากความเสียหายดังกล่าวสามารถซ่อมแซมได้ด้วยโปรแกรมซ่อมแซม คุณอาจไม่จำเป็นต้องใช้ไฟล์สำรองข้อมูลเลย สำหรับกระบวนการซ่อมแซมโต๊ะ โปรดดู "การบำรุงรักษาและซ่อมแซมฐานข้อมูล"
กระบวนการกู้คืนเกี่ยวข้องกับแหล่งข้อมูลสองแหล่ง: ไฟล์สำรองและบันทึกการเปลี่ยนแปลงของคุณ แฟ้มสำรองข้อมูลจะคืนค่าตารางไปยังสถานะเดิมเมื่อทำการสำรองข้อมูล อย่างไรก็ตาม โดยทั่วไปตารางจะได้รับการแก้ไขในช่วงเวลาระหว่างการสำรองข้อมูลและปัญหา และบันทึกการอัปเดตประกอบด้วยแบบสอบถามที่ใช้ในการแก้ไขเหล่านี้ คุณสามารถใช้ไฟล์บันทึกเป็นอินพุตไปยัง mysql เพื่อทำการสืบค้นซ้ำได้ นี่คือเหตุผลที่คุณควรเปิดใช้งานบันทึกการเปลี่ยนแปลง
กระบวนการกู้คืนจะแตกต่างกันไปขึ้นอยู่กับจำนวนข้อมูลที่คุณต้องกู้คืน ที่จริงแล้ว การกู้คืนฐานข้อมูลทั้งหมดทำได้ง่ายกว่าตารางเดียว เนื่องจากสามารถนำบันทึกการอัปเดตไปใช้กับฐานข้อมูลได้ง่ายกว่าตารางเดียว
4.1 กู้คืนฐานข้อมูลทั้งหมด
ขั้นแรก หากฐานข้อมูลที่คุณต้องการกู้คืนเป็นฐานข้อมูล mysql ที่มีตารางการให้สิทธิ์ คุณจะต้องรันเซิร์ฟเวอร์ด้วยตัวเลือก --skip-grant-table มิฉะนั้นจะบ่นว่าไม่พบตารางการอนุญาต หลังจากที่คุณกู้คืนตารางแล้ว ให้ดำเนินการ mysqladmin flush-privileges เพื่อแจ้งให้เซิร์ฟเวอร์โหลดโทเค็นการอนุญาตและใช้งาน
คัดลอกเนื้อหาไดเร็กทอรีฐานข้อมูลไปยังตำแหน่งอื่นหากคุณต้องการในภายหลัง
ติดตั้งฐานข้อมูลใหม่ด้วยไฟล์สำรองข้อมูลล่าสุด หากคุณใช้ไฟล์ที่สร้างโดย mysqldump ให้ใช้เป็นอินพุตใน mysql หากคุณใช้ไฟล์ที่คัดลอกมาจากฐานข้อมูลโดยตรง ให้คัดลอกไฟล์เหล่านั้นกลับไปยังไดเร็กทอรีฐานข้อมูลโดยตรง อย่างไรก็ตาม ในกรณีนี้ คุณจะต้องปิดฐานข้อมูลแล้วรีสตาร์ทก่อนที่จะคัดลอกไฟล์
ใช้บันทึกการอัปเดตเพื่อทำซ้ำแบบสอบถามที่แก้ไขตารางฐานข้อมูลหลังจากการสำรองข้อมูล สำหรับบันทึกการเปลี่ยนแปลงที่เกี่ยวข้อง ให้ส่งผ่านเป็นอินพุตไปยัง mysql การระบุตัวเลือก --one-database ทำให้ mysql ดำเนินการค้นหาเฉพาะฐานข้อมูลที่คุณสนใจที่จะกู้คืน หากคุณรู้ว่าคุณจำเป็นต้องใช้ไฟล์บันทึกการอัพเดตทั้งหมด คุณสามารถใช้คำสั่งนี้ในไดเร็กทอรีที่มีบันทึก:
% ls -t -r -1 อัปเดต [0-9]* | . mysql --one-database db_name
คำสั่ง ls จะสร้างรายการไฟล์บันทึกการอัพเดตในคอลัมน์เดียว โดยเรียงลำดับตามลำดับที่เซิร์ฟเวอร์สร้างขึ้น (แนวคิด: หากคุณแก้ไขไฟล์ใด ๆ คุณจะเปลี่ยนลำดับการจัดเรียง ซึ่งจะทำให้บันทึกการอัพเดตเป็น ใช้ผิดลำดับ)
เป็นไปได้มากว่าคุณจะใช้บันทึกการเปลี่ยนแปลงบางอย่าง ตัวอย่างเช่น หากบันทึกการอัพเดตที่สร้างขึ้นตั้งแต่การสำรองข้อมูลของคุณชื่อ update.392, update.393 ฯลฯ คุณสามารถรันใหม่ได้ดังนี้:
%mysql --หนึ่งฐานข้อมูล db_name < update.392
%mysql --หนึ่งฐานข้อมูล db_name < update.393
-
หากคุณกำลังดำเนินการกู้คืนและใช้บันทึกการอัพเดตเพื่อกู้คืนข้อมูลที่สูญหายเนื่องจากคำสั่ง DROP DATABASE, DROP TABLE หรือ DELETE ที่แนะนำอย่างไม่ถูกต้อง ตรวจสอบให้แน่ใจว่าได้ลบข้อความเหล่านี้ออกจากบันทึกการอัพเดตก่อนใช้งาน
4.2 การกู้คืนตารางเดียว
การกู้คืนตารางเดียวนั้นซับซ้อนกว่า หากคุณใช้ไฟล์สำรองที่สร้างโดย mysqldump และไม่มีข้อมูลสำหรับตารางที่คุณสนใจ คุณจะต้องแยกไฟล์เหล่านั้นออกจากแถวที่เกี่ยวข้องและใช้เป็นอินพุตใน mysql นี่เป็นส่วนที่ง่าย ส่วนที่ยากคือการดึงแฟรกเมนต์จากบันทึกการอัปเดตที่ใช้กับตารางนั้นเท่านั้น คุณอาจพบว่ายูทิลิตี mysql_find_rows มีประโยชน์สำหรับสิ่งนี้ ซึ่งจะแยกข้อความค้นหาหลายแถวออกจากบันทึกการเปลี่ยนแปลง
ความเป็นไปได้อีกอย่างหนึ่งคือการใช้เซิร์ฟเวอร์อื่นเพื่อกู้คืนฐานข้อมูลทั้งหมด จากนั้นคัดลอกไฟล์ตารางที่คุณต้องการลงในฐานข้อมูลดั้งเดิม นี่อาจเป็นเรื่องง่ายมาก! เมื่อคุณคัดลอกไฟล์กลับไปยังไดเร็กทอรีฐานข้อมูล ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ฐานข้อมูลเดิมปิดตัวลงแล้ว