ไฟล์ ibdata1 ในไดเร็กทอรี / var / lib / mysql ของฉันคืออะไร


32

การเข้าสู่แผงควบคุม Webmin ของฉันฉันสังเกตเห็นว่าพื้นที่ว่างในดิสก์ของฉันเต็มทั้งหมด ฉันค้นหาไฟล์ / ไดเรกทอรีที่ใหญ่ที่สุดสิบอันดับในระบบของฉันและพบว่าไฟล์ที่ชื่อว่า ibdata1 ใช้พื้นที่ประมาณ 94GB มันอยู่ในไดเรกทอรี / var / lib / mysql ของฉัน

ibdata1 ทำอะไร ฉันปลอดภัยที่จะลบหรือไม่ ข้อสันนิษฐานของฉันคือมันเป็นกองขยะบางอย่าง แต่นั่นเป็นเพียงการคาดเดาที่รุนแรง

คำตอบ:


38

ไฟล์ibdata1นี้เป็นพื้นที่ตารางระบบสำหรับโครงสร้างพื้นฐาน InnoDB

มันมีหลายชั้นสำหรับข้อมูลที่สำคัญสำหรับ InnoDB

  • หน้าข้อมูลตาราง
  • หน้าดัชนีตาราง
  • พจนานุกรมข้อมูล
  • ข้อมูลการควบคุม MVCC
    • เลิกทำ Space
    • ส่วนย้อนกลับ
  • บัฟเฟอร์การเขียนซ้ำ (หน้าเขียนในพื้นหลังเพื่อหลีกเลี่ยงการแคชระบบปฏิบัติการ)
  • แทรกบัฟเฟอร์ (เปลี่ยนเป็นดัชนีรอง)

โปรดทราบว่าสถานที่ของ ibdata1 ใน InnoDB Universe (ด้านขวา)

สถาปัตยกรรม InnoDB

คุณสามารถแยกข้อมูลและหน้าดัชนีจาก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


ขอบคุณสำหรับข้อมูลของคุณ โควต้าดิสก์ของฉันเต็มไปหมดแล้ว - ก่อนที่ฉันจะทำตามคำแนะนำใด ๆ ในโพสต์ของคุณฉันจะต้องมีพื้นที่ว่างหรือไม่? ฉันทราบว่าโพสต์ต้นฉบับของคุณใน SO กล่าวถึงการทำดัมพ์ SQL แต่สิ่งนี้น่าจะสร้างไฟล์ ~ 90GB โดยไม่มีที่ไหนให้ไป
James

mysqldump จะทำการแทนค่าตรรกะของหน้าข้อมูลเท่านั้นไม่ใช่ดัชนี คุณจะต้องติดตั้งดิสก์อื่นอาจจะเป็นเซิร์ฟเวอร์ระยะไกลเพื่อถ่ายโอนข้อมูล
RolandoMySQLDBA

9
มันกลับ 91.25350952148438 SpaceToReclaimสำหรับฉันเป็น นี่เป็นเมกะไบต์หรือไม่ ร้อยละ? ไบต์?
Isaac

ฉันรู้ว่ามันเก่าเกินไป แต่สำหรับทุกคนที่มาที่นี่ด้วยปัญหาคุณจะต้องแทนที่ตัวเลข94ด้วยขนาดของibdata1ไฟล์เป็น GB และขนาดSpaceToReclaimจะให้ขนาดเป็น GB
anupsabraham

8

ไฟล์ดังibdata1กล่าวไม่ใช่ibdatalและมีฐานข้อมูล InnoDB ทั้งหมดของคุณ หากคุณลบคุณจะสูญเสียข้อมูลทั้งหมดของคุณ

สำหรับความคิดบางอย่างเกี่ยวกับวิธีการจัดการกับมันให้ดูวิธีการหด / ไฟล์ ibdata1 ล้างใน MySQL


2

หากคุณใช้ innodb เป็นเครื่องมือ MySQL โดยค่าเริ่มต้นจะจัดเก็บฐานข้อมูลทั้งหมดของคุณลงใน ibdata1 นอกจากนี้ยังมีล็อกไฟล์ ib_logfile0 และ ib_logfile1 อย่าลบไฟล์เหล่านั้น


ลบไฟล์นั้นบนเซิร์ฟเวอร์ของฉันอย่างไร
แฟรงค์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.