ที่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