การลบ binlog ใน mysql
เครืองที่เป็น Master leplicate กันมักประสบปัญหาเรืองนี้คือ mysqld-bin.0000xx log ไฟล์มีขนาดใหญ่และเยอะมากจนทำให้พื้นที่ hdd โตเกินจำเป็น เช่น-rw-rw---- 1 mysql mysql 10485760 Mar 11 2010 ibdata1
-rw-rw---- 1 mysql mysql 268435456 Mar 11 2010 ib_logfile0
-rw-rw---- 1 mysql mysql 268435456 Feb 16 2010 ib_logfile1
-rw-rw---- 1 mysql mysql 268435456 Feb 16 2010 ib_logfile2
drwx------ 2 mysql mysql 4096 Feb 16 2010 mysql
-rw-rw---- 1 mysql mysql 1073741894 Mar 16 2010 mysqld-bin.000001
-rw-rw---- 1 mysql mysql 1073742024 Mar 16 2010 mysqld-bin.000002
-rw-rw---- 1 mysql mysql 1073741890 Mar 16 2010 mysqld-bin.000003
-rw-rw---- 1 mysql mysql 1073742087 Mar 17 2010 mysqld-bin.000004
-rw-rw---- 1 mysql mysql 1073741985 Mar 17 2010 mysqld-bin.000005
-rw-rw---- 1 mysql mysql 1073741929 Mar 17 2010 mysqld-bin.000006
-rw-rw---- 1 mysql mysql 1073742387 Mar 19 2010 mysqld-bin.000007
-rw-rw---- 1 mysql mysql 1073741902 Mar 22 2010 mysqld-bin.000008
-rw-rw---- 1 mysql mysql 1073742301 Mar 24 2010 mysqld-bin.000009
-rw-rw---- 1 mysql mysql 1073742016 Apr 19 2010 mysqld-bin.000010
-rw-rw---- 1 mysql mysql 1073742294 Apr 20 2010 mysqld-bin.000011
-rw-rw---- 1 mysql mysql 1073742217 Apr 21 2010 mysqld-bin.000012
-rw-rw---- 1 mysql mysql 1073742741 May 21 2010 mysqld-bin.000013
-rw-rw---- 1 mysql mysql 1073741945 Apr 8 2011 mysqld-bin.000014
-rw-rw---- 1 mysql mysql 1073741999 Oct 2 2011 mysqld-bin.000015
-rw-rw---- 1 mysql mysql 1073742188 Apr 2 2012 mysqld-bin.000016
-rw-rw---- 1 mysql mysql 1073741903 Jun 9 2012 mysqld-bin.000017
-rw-rw---- 1 mysql mysql 1073742107 Aug 3 2012 mysqld-bin.000018
-rw-rw---- 1 mysql mysql 1073742015 Oct 4 2012 mysqld-bin.000019
-rw-rw---- 1 mysql mysql 1073742151 Feb 16 17:47 mysqld-bin.000020
-rw-rw---- 1 mysql mysql 844116141 Jun 7 10:37 mysqld-bin.000021
-rw-rw---- 1 mysql mysql 440 Jun 7 10:37 mysqld-bin.index
srwxrwxrwx 1 mysql mysql 0 Feb 16 2010 mysql.sock
สังเกตว่าเครืองนี้มีไฟล์ปีเก่าๆ ด้วย เราจะทำการเคลียร์ทิ้งด้วย command กันครับ การลบทิ้งทื่อๆ เลยก็ได้ครับแต่อาจจะไม่ปลอดภัยหาก
เลยใช้วิธีการ purge แบบนี้ดีกว่า
เข้า mysql
# mysql -u root -p
> flush logs;
หลังจากคำสั่งนี้ ระบบจะทำการสร้าง bin logใหม่และไปเรียกใช้ log นี้แทน เมื่อ ls -al ดูจะเป็น
-rw-rw---- 1 mysql mysql 10485760 Mar 11 2010 ibdata1
-rw-rw---- 1 mysql mysql 268435456 Mar 11 2010 ib_logfile0
-rw-rw---- 1 mysql mysql 268435456 Feb 16 2010 ib_logfile1
-rw-rw---- 1 mysql mysql 268435456 Feb 16 2010 ib_logfile2
drwx------ 2 mysql mysql 4096 Feb 16 2010 mysql
-rw-rw---- 1 mysql mysql 1073741894 Mar 16 2010 mysqld-bin.000001
-rw-rw---- 1 mysql mysql 1073742024 Mar 16 2010 mysqld-bin.000002
-rw-rw---- 1 mysql mysql 1073741890 Mar 16 2010 mysqld-bin.000003
-rw-rw---- 1 mysql mysql 1073742087 Mar 17 2010 mysqld-bin.000004
-rw-rw---- 1 mysql mysql 1073741985 Mar 17 2010 mysqld-bin.000005
-rw-rw---- 1 mysql mysql 1073741929 Mar 17 2010 mysqld-bin.000006
-rw-rw---- 1 mysql mysql 1073742387 Mar 19 2010 mysqld-bin.000007
-rw-rw---- 1 mysql mysql 1073741902 Mar 22 2010 mysqld-bin.000008
-rw-rw---- 1 mysql mysql 1073742301 Mar 24 2010 mysqld-bin.000009
-rw-rw---- 1 mysql mysql 1073742016 Apr 19 2010 mysqld-bin.000010
-rw-rw---- 1 mysql mysql 1073742294 Apr 20 2010 mysqld-bin.000011
-rw-rw---- 1 mysql mysql 1073742217 Apr 21 2010 mysqld-bin.000012
-rw-rw---- 1 mysql mysql 1073742741 May 21 2010 mysqld-bin.000013
-rw-rw---- 1 mysql mysql 1073741945 Apr 8 2011 mysqld-bin.000014
-rw-rw---- 1 mysql mysql 1073741999 Oct 2 2011 mysqld-bin.000015
-rw-rw---- 1 mysql mysql 1073742188 Apr 2 2012 mysqld-bin.000016
-rw-rw---- 1 mysql mysql 1073741903 Jun 9 2012 mysqld-bin.000017
-rw-rw---- 1 mysql mysql 1073742107 Aug 3 2012 mysqld-bin.000018
-rw-rw---- 1 mysql mysql 1073742015 Oct 4 2012 mysqld-bin.000019
-rw-rw---- 1 mysql mysql 1073742151 Feb 16 17:47 mysqld-bin.000020
-rw-rw---- 1 mysql mysql 844116141 Jun 7 10:37 mysqld-bin.000021
-rw-rw---- 1 mysql mysql 98 Jun 7 10:37 mysqld-bin.000022
-rw-rw---- 1 mysql mysql 440 Jun 7 10:37 mysqld-bin.index
srwxrwxrwx 1 mysql mysql 0 Feb 16 2010 mysql.sock
mysqld-bin.000022 คือไฟล์ที่เพิ่มเข้ามา แล้วเราก็ทำการเคลียร์ log เก่าๆ นั้นได้เลยสั่ง
> purge binary logs to 'mysqld-bin.000022';
ระสักพัก
Query OK, 0 rows affected (25.39 sec)
แค่นี้เราก็ลดพื้นที่ไปได้มากแล้วล่ะครับ
========================================
อีกกรณีหนึ่ง หากเราไม่ชัวร์ว่า จะมี app ไดมาใช้ log เก่ากว่า 3-4 วันหรือไม่ หรือกลัวว่าจำเป็นต้อง restore กลับไปวันก่อน
อาจจะใช้เป็นคำสั่งแบบ ระบุวันที่ก็ได้เป็น
# mysql -u root -p -e "PURGE BINARY LOGS BEFORE '2013-06-02 01:00:00';"
ใส่ password root ไประบบก็จะทำการ clean log ก่อนวันที่ 2/06/2013
=======================================
เพิ่มเติมในส่วน configure my.cnf
expire_logs_days = 5
ระบุไว้เพื่อให้เก็บ bin log ย้อนหลังไว้ 5 วัน
อีกวิธีใส่คอมมาน purge ไว้ใน contrab ให้เคลียร์ย้อนหลังกี่วันก็ว่ากันไป
mysql> PURGE BINARY LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 7 DAY);
ไม่มีความคิดเห็น:
แสดงความคิดเห็น