ที่ibdata1ไม่หดตัวเป็นคุณสมบัติที่น่ารำคาญอย่างยิ่งของ MySQL ibdata1ไฟล์ไม่สามารถจริงจะหดเว้นแต่คุณจะลบฐานข้อมูลทั้งหมดลบไฟล์และโหลดการถ่ายโอนข้อมูล
แต่คุณสามารถกำหนดค่า MySQL เพื่อให้แต่ละตารางรวมถึงดัชนีของมันถูกเก็บไว้เป็นไฟล์แยกต่างหาก ด้วยวิธีibdata1นี้จะไม่เติบโตเป็นจำนวนมาก ตามความเห็นของ Bill Karwinสิ่งนี้ถูกเปิดใช้งานโดยค่าเริ่มต้นตั้งแต่เวอร์ชัน 5.6.6 ของ MySQL
เมื่อไม่นานมานี้ฉันได้ทำสิ่งนี้ อย่างไรก็ตามในการตั้งค่าเซิร์ฟเวอร์ของคุณให้ใช้ไฟล์แยกกันสำหรับแต่ละตารางคุณต้องเปลี่ยนmy.cnfเพื่อเปิดใช้งานสิ่งนี้:
[mysqld]
innodb_file_per_table=1
http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html
ตามที่คุณต้องการเรียกคืนพื้นที่จากที่ibdata1จริงคุณต้องลบไฟล์:
- ทำ
mysqldumpฐานข้อมูลโพรซีเดอร์ทริกเกอร์ ฯลฯทั้งหมดยกเว้นmysqlและและperformance_schemaฐานข้อมูล
- ปล่อยฐานข้อมูลทั้งหมดยกเว้นฐานข้อมูล 2 ด้านบน
- หยุด mysql
- ลบ
ibdata1และib_logไฟล์
- เริ่ม mysql
- กู้คืนจากการถ่ายโอนข้อมูล
เมื่อคุณเริ่ม MySQL ในขั้นตอนที่ 5 ibdata1และib_logไฟล์จะถูกสร้างขึ้นใหม่
ตอนนี้คุณก็พร้อมแล้วที่จะไป เมื่อคุณสร้างฐานข้อมูลใหม่สำหรับการวิเคราะห์ตารางจะตั้งอยู่ในที่แยกต่างหากไฟล์ไม่ได้อยู่ในibd* ibdata1ตามปกติคุณจะทิ้งฐานข้อมูลหลังจากนั้นibd*ไฟล์จะถูกลบ
http://dev.mysql.com/doc/refman/5.1/en/drop-database.html
คุณอาจเคยเห็นสิ่งนี้:
http://bugs.mysql.com/bug.php?id=1341
โดยใช้คำสั่งALTER TABLE <tablename> ENGINE=innodbหรือOPTIMIZE TABLE <tablename>อย่างใดอย่างหนึ่งสามารถดึงข้อมูลและหน้าดัชนีจาก ibdata1 เพื่อแยกไฟล์ อย่างไรก็ตาม ibdata1 จะไม่ย่อขนาดจนกว่าคุณจะทำตามขั้นตอนด้านบน
เกี่ยวกับการinformation_schemaที่ไม่จำเป็นหรือเป็นไปไม่ได้ที่จะลดลง อันที่จริงแล้วเป็นเพียงมุมมองแบบอ่านอย่างเดียวไม่ใช่ตาราง และไม่มีไฟล์ที่เกี่ยวข้องกับไฟล์เหล่านั้นแม้แต่ไดเรกทอรีฐานข้อมูล informations_schemaใช้หน่วยความจำ DB-เครื่องยนต์และมีการปรับตัวลดลงและสร้างใหม่เมื่อหยุด / เริ่มต้นใหม่ของ mysqld ดูhttps://dev.mysql.com/doc/refman/5.7/en/information-schema.html