แค่เว็บๆหนึ่ง ! ที่อยากเก็บประสบการณ์
Home
 

การลบ binary log ของ MySQL

MySQL ถ้าหากมีการเปิดใช้งาน binary log จะทำให้มีการเสียเนื้อที่บางส่วนไป ซึ่งถ้าหากไม่มีการกำหนดวันและเวลาในการ expire ของ binary log จะทำให้มีโอกาสเกิดปัญหาเรื่องเนื้อที่ไม่พอใช้งานเกิดขึ้นได้ หากเกิดปัญหา binary log ใช้เนื้อที่ในการเก็บข้อมูลเยอะมาก และต้องการลบออกไปบางส่วนเพื่อให้มีเนื้อที่พอใช้งานจำเป็นต้องรันคำสั่งบน MySQL เท่านั้น ไม่สามารถรันคำสั่งลบจาก OS ได้เหมือนการลบไฟล์ทั่วไป ดังนั้นควรทำตามขั้นตอนการลบ binary log ดังนี้
รันคำสั่งด้านล่างเพื่อแสดงข้อมูล binary log บนระบบ
mysql> SHOW BINARY LOGS;
+——————+————+
| Log_name         | File_size  |
+——————+————+
| mysql-bin.000601 | 1073743595 |
| mysql-bin.000602 | 1083142845 |
| mysql-bin.000603 | 1073742373 |
| mysql-bin.000604 | 1077985876 |
| mysql-bin.000605 | 3035396642 |
| mysql-bin.000606 | 1093176407 |
+——————+————+
6 rows in set (0.00 sec)
การคำสั่งด้านบนพบว่าจำนวน binary log ที่เก็บไว้มีจำนวนมาก ดังนั้นถ้าหากไม่ต้องการให้ binary log มีจำนวนมาก จำเป็นต้องทำการแก้ไข expire_logs_days บน MySQL ให้มีจำนวนวันน้อยกว่านี้ แต่ก่อนจะทำการแก้ไขเราควรจะทราบก่อนว่าตอนนี้ expire_logs_days กำหนดเป็นกี่วัน โดยให้รันคำสั่งด้านล่าง
mysql> show variables like “expire_logs%”;
+——————+——-+
| Variable_name    | Value |
+——————+——-+
| expire_logs_days | 7     |
+——————+——-+
1 row in set (0.00 sec)
mysql> SET GLOBAL expire_logs_days=xx;              xx คือจำนวนวันที่เก็บ binary log
ตัวอย่างเช่น ต้องการเก็บ binary log ไว้ 5 วัน ให้รันคำสั่งดังนี้
mysql> set global expire_logs_days=5;
Query OK, 0 rows affected (0.00 sec)
เมื่อทำการกำหนดวัน expire เรียบร้อยแล้ว ขั้นต่อมาให้ทำการ flush log เพื่อลบ binary log ที่มีอายุเกินกว่าที่กำหนดทิ้ง
mysql> flush logs;
Query OK, 0 rows affected (0.35 sec)
ทำการตรวจสอบ binary log อีกครั้ง จะพบว่าจำนวน binary log ที่มีจะมีจำนวนน้อยลง
mysql> SHOW BINARY LOGS;
+——————+————+
| Log_name         | File_size  |
+——————+————+
| mysql-bin.000601 | 1073743595 |
| mysql-bin.000602 | 1083142845 |
| mysql-bin.000603 | 1073742373 |
| mysql-bin.000604 | 1077985876 |
| mysql-bin.000605 | 3035396642 |
| mysql-bin.000606 | 1093176407 |
+——————-+———–+
6 rows in set (0.00 sec)
หลังจากแก้ไขแล้วอย่าลืมไปแก้ที่ไฟล์ my.cnf โดยให้เพิ่ม parameter ด้านล่างลงไปที่ส่วนของ [mysqld] ถ้าหากไม่แก้ไขจะทำให้ expire_logs_days คืนค่าเดิมหลังจาก restart MySQL
[mysqld]

expire_logs_days=xx
xx คือจำนวนวันที่เก็บ binary log
นอกจากนี้ยังมีอีกวิธีที่สามารถลบ binary log ได้ โดยไม่ต้องไปแก้ไข parameter ของ MySQL แต่จำนวนวันหมดอายุของ binary log จะเท่าเดิม ซึ่งก็จะมีโอกาศที่ binary log จะใช้เนื้อมากเหมือนเดิม
คำสั่งที่ใช้ในการลบ binary log
ลบ binary log โดยกำหนดจากไฟล์ binary log
mysql> PURGE BINARY LOGS TO ‘mysql-bin.0xx’;
ลบ binary log โดยกำหนดจากวันและเวลา
mysql> PURGE BINARY LOGS BEFORE ‘2016-04-02 23:59:00’;

 

 

เพิ่มเติม กรณี  ต้องการ ดู position ของ mysql-bin  ก่อนหน้า  สามารถ ใช้คำสั่งดังนี้
#mysqlbinlog –no-defaults -v   mysql-bin.000818

Off 

April 3, 2016 This post was written by Categories: เรื่องเล่ารายวัน No comments yet


Top