วันจันทร์ที่ 15 มิถุนายน พ.ศ. 2558

ibdata1 ของ mysql ใหญ่มาก

โอ้ /var/lib/mysql ใหญ่มากเกือบเต็ม ไปดูแล้ว พบ ibdata1 250GB
หาวิธีลด
http://meewebfree.com/site/general-web-technic/410-reduce-size-shrink-file-size-ibdata1

ไฟล์ ibdata1 นี้ ตามคำกล่าวของ MySQL เค้าบอกเอาไว้ว่า มันเป็นดัวที่ทำหน้าที่หลายอย่าง สำหรับ engine InnoDB (การทำเว็บโดยปกติ และตามบทความโดยทั่วๆไป เค้าจะใช้ engine MyISAM จะมีเฉพาะกรณีที่ต้องการทำ transaction record เท่านั้นเอง จึงละเลือกใช้ InnoDB) ซึ่งคนที่ไม่ได้ใช้งาน InnoDB จะไม่พบปัญหานี้เลย เพราะว่า MyISAM เก็บ database เป็น raw file ใน folder ของใครของมันแบ่งตาม database อยู่แล้ว แต่เจ้า InnoDB เจ้ากรรม มันดันเก็บของทุก database เอาไว้รวมกันไฟล์เดียว และปัญหาก็คือ database ถึงจะถูกลบไปแล้ว แต่ก็ยังมีข้อมูลต่างๆอยู่ใน ibdata1 อยู่ดี นั่นจะทำให้ ibdata1 จะขยายใหญ่ขึ้นไปเรื่อยเมื่อวันเวลาผ่านไป....
สำหรับการลดขนาดไฟล์ ibdata1 เราจะลบออกตรงๆเลยไม่ได้ ถึงแม้ว่า การ restart MySQL มันจะสร้างไฟล์ ibdata1 ใหม่โดยอัตโนมัติก็ตาม แต่หากลบไฟเฉยๆ สิ่งที่จะเจอก็คือ ข้อมูล ที่เก็บใน InnoDB engine หายเกลี้ยงเลย (ทดสอบลบมาแล้ว ถึงได้รู้ชัด โดยผม backup เอาไว้ก่อน) สำหรับขั้นตอนนั้นมีไม่เยอะ ก็จะมีดังนี้
  • ใช้ mysql dump เพื่อ backup ข้อมูลออกมาจากทุก database ก่อน
  • ลบ database ออกทั้งหมด ยกเว้น mysql และ information_schema
  • shut down mysql service
  • ลบไฟล์ ibdata1 และ ib_logfile0 ออก
  • start mysql service ขั้นตอนนี้ มันจะสร้าง ibdata1 มาใหม่ แต่ขนาดเล็กนิดเดียว (เมื่อเทียบกับของเดิม)
  • restore mysql จากไฟล์ .sql เมื่อกี้กลับเข้าไป

ไม่มีความคิดเห็น:

แสดงความคิดเห็น