ads

วันพุธที่ 31 กรกฎาคม พ.ศ. 2556

การลบ binlog ใน mysql

การลบ 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);

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

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