ไฟล์ibdata1
นี้เป็นพื้นที่ตารางระบบสำหรับโครงสร้างพื้นฐาน InnoDB
มันมีหลายชั้นสำหรับข้อมูลที่สำคัญสำหรับ InnoDB
- หน้าข้อมูลตาราง
- หน้าดัชนีตาราง
- พจนานุกรมข้อมูล
- ข้อมูลการควบคุม MVCC
- เลิกทำ Space
- ส่วนย้อนกลับ
- บัฟเฟอร์การเขียนซ้ำ (หน้าเขียนในพื้นหลังเพื่อหลีกเลี่ยงการแคชระบบปฏิบัติการ)
- แทรกบัฟเฟอร์ (เปลี่ยนเป็นดัชนีรอง)
โปรดทราบว่าสถานที่ของ ibdata1 ใน InnoDB Universe (ด้านขวา)
คุณสามารถแยกข้อมูลและหน้าดัชนีจากibdata1
โดยการช่วยให้innodb_file_per_table สิ่งนี้จะทำให้ตาราง InnoDB ที่สร้างขึ้นใหม่เพื่อจัดเก็บข้อมูลและหน้าดัชนีใน.ibd
ไฟล์ภายนอก
ตัวอย่าง
- datadirคือ / var / lib / mysql
CREATE TABLE mydb.mytable (...) ENGINE=InnoDB;
สร้าง /var/lib/mysql/mydb/mytable.frm
- เปิดใช้งาน innodb_file_per_table หน้าข้อมูล / ดัชนีเก็บไว้ใน
/var/lib/mysql/mydb/mytable.ibd
- innodb_file_per_table ถูกปิดใช้งานหน้าข้อมูล / ดัชนีที่เก็บไว้ใน ibdata1
ไม่ว่าตาราง InnoDB จะถูกเก็บไว้ไม่มีการทำงานของ InnoDB ต้องมองหาข้อมูลเมตาของตารางและจัดเก็บและเรียกMVCCข้อมูลเพื่อสนับสนุนการปฏิบัติตามกรดและการแยกการทำธุรกรรม
นี่คือบทความที่ผ่านมาของฉันในการแยกข้อมูลตารางและดัชนีจาก ibdata1
จะทำอะไรต่อไป
คุณสามารถให้ ibdata1 เก็บทุกอย่างต่อไปได้ แต่นั่นทำให้ LVM snapshots เป็นจริงที่น่าเบื่อหน่าย (ความเห็นส่วนตัวของฉัน)
คุณต้องใช้ My StackOverflow โพสต์และลดขนาดไฟล์นั้นอย่างถาวร
กรุณาเรียกใช้แบบสอบถามนี้:
SELECT
((POWER(1024,3)*94 - InnoDBDiskDataAndIndexes))/POWER(1024,3) SpaceToReclaim
FROM
(SELECT SUM(data_length+index_length) InnoDBDiskDataAndIndexes
FROM information_schema.tables WHERE engine='InnoDB') A;
สิ่งนี้จะบอกว่าสามารถเรียกคืนพื้นที่ที่สูญเปล่าไปเท่าใดหลังจากใช้การล้างข้อมูลบน InnoDB