ฉันตั้งใจโยนโต๊ะทั้งหมด ฉันสามารถคืนสภาพได้หรือไม่ ฉันไม่มีสำเนาสำรอง
ฉันตั้งใจโยนโต๊ะทั้งหมด ฉันสามารถคืนสภาพได้หรือไม่ ฉันไม่มีสำเนาสำรอง
คำตอบ:
หากคุณไม่มีการสำรองข้อมูลอย่างแท้จริงฉันมั่นใจว่าคุณโชคดี 99%
หากคุณมีการสำรองข้อมูลในรูปแบบใด ๆ ก็ตาม แต่เก่าแล้วคุณได้เปิดการบันทึกแบบไบนารี่ผ่านตัวเลือก log-bin ในไฟล์ MySQL config (my.ini) หรือไม่? ถ้าเป็นเช่นนั้นคุณอาจสามารถกู้คืนได้ตั้งแต่การสำรองข้อมูลครั้งล่าสุด
วิธีที่ไม่ดีในการเริ่มต้นเพื่อนสัปดาห์ขอโทษ
คำถามค่อนข้างเก่า แต่ไม่มีคำตอบในเชิงบวกเดียวดังนั้นฉันจะเพิ่มอีกหนึ่งคำถาม
หลังจาก MySQL วางตารางข้อมูลจะยังคงอยู่ในสื่ออยู่ครู่หนึ่ง ดังนั้นคุณสามารถดึงข้อมูลและสร้างตารางใหม่ได้ ต่อมาฉันจะบล็อกเกี่ยวกับมัน แต่ตอนนี้ร่างอย่างรวดเร็ว
คุณจะต้องมีโครงสร้างของตารางของคุณ (คำสั่ง CREATE TABLE)
ถ้า innodb_file_per_table อยู่บนตารางที่ดร็อปอยู่บนดิสก์พาร์ติชัน หยุด MySQL และติดตั้งใหม่เป็นแบบอ่านอย่างเร็ว หาก MySQL อยู่บนพาร์ติชันรูท (ซึ่งไม่ใช่ความคิดที่ดี btw) ให้ถ่ายรูปหรือนำดิสก์ออกแล้วเสียบกับเซิร์ฟเวอร์อื่น หยุดเขียนทั้งหมดในคำอื่น ๆ
ถ้า innodb_file_per_table OFF ให้หยุด MySQL
จากนั้นดาวน์โหลดและรวบรวมเครื่องมือยกเลิกการลดลงสำหรับ InnoDB จากhttps://github.com/twindb/undrop-for-innodb/ ตรวจสอบการโพสต์" รวบรวมเครื่องมือการกู้คืน TwinDB " สำหรับรายละเอียด
จากนั้นแยกวิเคราะห์พาร์ติชันดิสก์หรือ ibdata1 (ขึ้นอยู่กับการตั้งค่า innodb_file_per_table) ด้วย stream_parser:
./stream_parser -f /path/to/diskimage_or_ibdata1
จากนั้นกู้คืนพจนานุกรม InnoDB เพื่อให้ทราบว่า index_id ตารางที่ถูกดร็อปคืออะไร
จากนั้นใช้โครงสร้างตารางและดึงระเบียน
./c_parser -f pages-diskimage_or_ibdata1/FIL_PAGE_INDEX/00000<index_id>.page
มันจะส่งออกบันทึกไปยัง stdout และคำสั่งโหลดข้อมูลไปยัง stderr
นี่คือสิ่งที่ฉันทำ ในไดเรกทอรี mysql (สำหรับ Ubuntu นี่คือ / var / lib / mysql สำหรับ Mac ที่ใช้ Homebrew นี่คือ / usr / local / var / mysql) ฉันพบไฟล์บางไฟล์ ก่อนอื่นฉันคัดลอก myapp_development / directory ที่มี schema เฉพาะลงในไดเรกทอรี mysql ในพื้นที่ของฉัน จากนั้นฉันก็สำรองข้อมูล ibdata1 ในเครื่องของฉันและคัดลอก ibdata1 ของเซิร์ฟเวอร์ไปยังไดเรกทอรี mysql ฆ่า mysqld ( ps aux
เพื่อค้นหา PID จากนั้นkill PID
) เริ่ม mysql ใหม่มันเริ่มต้นในโหมดการกู้คืนความผิดพลาด จากนั้นจึงเปิดไคลเอนต์ mysql ในพื้นที่ของฉันและสร้างตารางเต็มที่ฉันต้องการ
และ 15,000 แถวที่แสดงถึงสัปดาห์ของการทำงานเข้าสู่เมทาดาทาที่เราคิดว่าหายไปตลอดกาลจะถูกบันทึกไว้ !!
หวังว่านี่จะช่วยใครซักคน
มีน้อยมากที่คุณสามารถทำสิ่งที่น่าเสียดายที่นอกเหนือไปจากบทเรียนที่มีค่ามากเกี่ยวกับความต้องการแผนสำรองที่ดี
ขึ้นอยู่กับชนิดของตารางคุณอาจจะสามารถหาผู้เชี่ยวชาญที่สามารถรวบรวมข้อมูลกลับมาจากสิ่งที่เหลืออยู่บนแผ่นดิสก์ แต่การวิเคราะห์ทางนิติเวชนั้นจะมีราคาแพงมาก (เพราะต้องใช้ทักษะที่ค่อนข้างแปลก) เพื่อเป็นประโยชน์อย่างแท้จริง
หากนี่คือตาราง MyISAM คุณต้องยกเลิกการลบไฟล์ตารางใน / var / log / mysql หรือข้อมูลใด ๆ ที่คุณต้องการ คุณสามารถใช้โปรแกรมอรรถประโยชน์ext3grepเพื่อเป็นตัวอย่าง
คุณไม่สามารถ DROP TABLE
"ยกเลิก"
คุณสามารถดูและดูว่า MySQL มีการเปิดใช้งานการบันทึกแบบไบนารีหรือไม่คุณสามารถดึงข้อมูลบางส่วนได้จากตรงนั้น
นอกเหนือจากนั้นคุณสามารถลืม MySQL และอยู่ในระดับเดียวกันของปัญหา "ฉันลบบางไฟล์ออกจากระบบไฟล์ของฉัน" มีเครื่องมือบางอย่างที่พยายามกู้คืนไฟล์และยังมี บริษัท ที่ทำอย่างมืออาชีพ
หากคุณเปิดการบันทึกแบบไบนารี่คุณสามารถสร้างตารางใหม่ได้ก่อนหากคุณมีสคีมา ตรวจสอบให้แน่ใจว่าคุณสร้างสคีมาในขณะที่ปิด Binlogs หรือคุณสามารถข้ามเซสชันได้ จากนั้นคุณสามารถเล่นซ้ำ binlogs จนถึงคำสั่งสุดท้ายซึ่งเป็นตารางการปล่อยตัวเอง
ถ้าไม่เช่นนั้นคุณสามารถคืนค่าโดยใช้การถ่ายโอนข้อมูลสำรองหากคุณมี หากคุณมีไฟล์ csv คุณสามารถโหลดวิธี infile ข้อมูลเพื่อกู้คืนข้อมูล หากคุณกำลังกู้คืนจาก mysqldump คุณอาจพิจารณากู้คืนตารางเดียวจากไฟล์การถ่ายโอนข้อมูลแทนที่จะกู้คืนฐานข้อมูลแบบเต็ม หากขนาดข้อมูลใหญ่เกินไปคุณอาจพิจารณาปิดใช้งานคีย์ก่อนที่จะโหลดนี่จะเพิ่มกระบวนการกู้คืนอย่างมีนัยสำคัญ
สำหรับอนาคตคุณอาจต้องการมีทาสที่ล่าช้ากว่า 10-24 ชั่วโมง คุณสามารถสร้าง Slave ที่ล่าช้าโดยใช้ชุดเครื่องมือ percona (pt-slave-delay)