ดังนั้นฉันมีเซิร์ฟเวอร์ทดสอบ db ที่ติดตั้งในกระแสการจำลอง โดยชื่อการเพิ่มประสิทธิภาพผ่านมาซึ่งเต็มพื้นที่อย่างรวดเร็วบนทาสข้อมูล Mysql ตามหน้าที่กำลังรอพื้นที่เพิ่มขึ้น
datadir นี้เป็นระบบไฟล์ที่ใช้เป็น datadir ของ mysql เท่านั้นดังนั้นจึงไม่มีสิ่งอื่นใดที่จะทำให้ว่าง
ฉันมีตารางการทดสอบขนาด 4 กิ๊กที่ไม่ได้เป็นส่วนหนึ่งของกระแสข้อมูลการจำลองดังนั้นฉันจึงคิดว่าฉันลองทำบางสิ่งเพื่อดูว่ามันใช้งานได้หรือไม่และการเป็นสภาพแวดล้อมการทดสอบ
นี่คือขั้นตอนที่ฉันทำ
- ล้างตารางที่ฉันกำลังจะย้าย
- วางล็อกการอ่านไว้ (แม้ว่าจะไม่มีอะไรถูกเขียนลงไปและไม่ได้อยู่ในสตรีมการจำลองแบบ)
- คัดลอก. frm และ. ibd ไปยังระบบไฟล์ที่มีห้องว่าง
- ปลดล็อกตาราง
- ตัดทอนตารางนั้น - ทำให้มีพื้นที่ว่างเพียงพอสำหรับการปรับให้เสร็จสมบูรณ์เมื่อการเรพลิเคทเริ่มต้นการสับอีกครั้ง
- หยุดทาส / ปิด mysql
- คัดลอกไฟล์จาก tmp กลับไปยัง data dir
- รีสตาร์ท mysql
ไม่มีสิ่งใดปรากฏในบันทึก .err สิ่งต่าง ๆ ดูดี ฉันเชื่อมต่อและใช้ mydb; และดูตารางที่ฉันเล่นด้วยในตารางแสดง แต่ถ้าฉันลอง
select * from testtable limit 10;
ฉันได้รับข้อผิดพลาด
ERROR 1146 (42S02): Table 'mydb.testtable' doesn't exist
จากสิ่งที่ฉันสามารถบอกได้จนถึงตอนนี้ฉันสามารถอ่านจากตารางอื่น ๆ ทั้งหมดได้ดีและเริ่มทำสำเนาสำรองโดยไม่มีข้อร้องเรียนใด ๆ
มีอะไรที่ฉันสามารถทำได้เพื่อกู้คืนจากจุดนี้หรือไม่? ฉันสามารถสร้างใหม่ได้ตั้งแต่ต้นหากจำเป็น แต่อยากรู้ว่าคนอื่นคิดอย่างไรกับการลงทุนนี้โดยทั่วไป มีอะไรบ้างเกี่ยวกับลำดับขั้นตอนที่ฉันทำซึ่งจะได้ผลลัพธ์ที่ไร้ที่ติมากกว่านี้?
ถ้านี่ไม่ใช่เซิร์ฟเวอร์ทดสอบฉันไม่สามารถ 'ทำให้เป็นจริง' และดูว่าเกิดอะไรขึ้น อะไรจะมีวิธีที่ดีที่สุดในการเพิ่มพื้นที่ให้กับทาสผู้ผลิตชั่วคราวถ้าฉันต้องทำอย่างนั้น?
Table 'X' doesn't exist in engine
ฐานข้อมูลที่ตารางทั้งหมดบอกว่า ฉันต้องทำวิธีการข้างต้นสำหรับทุกตารางหรือมีวิธีที่ดีกว่าในการแก้ไขหรือไม่