حل مشكلة امتلاء القرص الصلب بسبب MySQL Binary Log

MySQL Logo

MySQL Logo

المشكلة:-

ملفات بإحجام كبيرة يصل حجم كل ملف 1 GB وشوية بداخل var/lib/mysql وتكون هذه الملفات بأسماء مثل mysql-bin.000001 و mysql-bin.00002 ..الخ الخ.
في حالة كان var بارتشن خاص فراح تاكل كل البارتشن واذا كان var ضمن البارتشن / فانفس الشيء راح تاكل كمية كبيرة من القرص. وايضاً سوف تتوقف القواعد وخادم mysql لانة لايستطيع ايجاد مساحة للكتابة فيها واذا كان var ضمن البارتشن / احتمال كبير تتوقف معظم وظائف النظام في حالة الامتلاء الكامل للقرص الصلب.

ماهية هذه الملفات:-

هذه الملفات عبارة عن ملفات LOG او تسجيل بصيغة Binary. تقوم هذه الملفات بتسجيل جميع الأحداث التي تحصل في mysql والكشوفات التي يتم تحديثها او التي قد تم فعلاً تحديثها. ايضاً من الممكن استخدامها لتقوم بتسجيل جميع الاستعلامات التي تحصل في mysql.

الغرض من هذه الملفات:-

  • النسخ الاحتياطي: في حالة قمت بإرجاع نسخة احتياطية اقدم , تستطيع ارجاع القاعدة إلى اخر point او نقطة كانت عليها.
  • عملية التكرار: في حالة كنت تستخدم اكثر من خادم لقواعد البيانات, فان هذه الملفات تعمل او تساعد على عملية التكرار بين السيد والخادم (بمصطلح ابسط بين الـ Master والـ Slaves).

حل هذه المشكلة:-

  • اولاً: استخدام الطريقة هذه تحت مسؤليتك ويجب عليك معرفة ماتقوم بة قبل التنفيذ. واذا كنت تستخدم اكثر من سيرفر لقواعد البيانات فلاتقم بعمل شيء قبل استشارة مختص.
  • ثانياً: يجب ان تعلم ان هذه الخاصية بشكل افتراضي غير مفعلة, وان كانت مفعلة فان مدير النظام هو من قام بتفعيلها.

الطريقة:

قم بالدخول على السيرفر بالمستخدم root كالعادة.

1- نذهب إلى المجلد الذي يحتوي على القواعد, بالإضافة إلى امر عرض المحتويات.

user@computer:$ cd /var/lib/mysql/ && ls -la

لنفرض ان الناتج كان كتالي

user@computer:$ total XXXXXXXXXXXX
drwxr-x--x 14 mysql mysql 4096 Oct 7 20:09 ./
drwxr-xr-x 16 root root 4096 Aug 15 14:06 ../
-rw-rw---- 1 mysql mysql 3135 Aug 15 13:33 host.err
-rw-rw---- 1 mysql mysql 316672 Oct 7 20:09 host.domain-name.err
-rw-rw---- 1 mysql mysql 6 Oct 7 20:09 host.domain-name.com.pid
drwx------ 2 mysql mysql 4096 Oct 7 19:00 modsec/
drwx--x--x 2 mysql mysql 4096 Oct 7 19:24 mysql/
srwxrwxrwx 1 mysql mysql 0 Oct 7 20:09 mysql.sock=
-rw-rw---- 1 mysql mysql 10485760 Oct 7 18:32 ibdata1
-rw-rw---- 1 mysql mysql 5242880 Oct 7 18:32 ib_logfile0
-rw-rw---- 1 mysql mysql 5242880 Aug 15 08:21 ib_logfile1
drwx------ 2 mysql mysql 20480 Oct 8 10:33 username_dbname/
-rw-rw---- 1 mysql mysql 316672 Oct 7 20:09 mysql-bin.000001
-rw-rw---- 1 mysql mysql 316672 Oct 7 20:09 mysql-bin.000002
-rw-rw---- 1 mysql mysql 316672 Oct 7 20:09 mysql-bin.000003
-rw-rw---- 1 mysql mysql 316672 Oct 7 20:09 mysql-bin.000004
-rw-rw---- 1 mysql mysql 316672 Oct 7 20:09 mysql-bin.000005
-rw-rw---- 1 mysql mysql 316672 Oct 7 20:09 mysql-bin.000006
-rw-rw---- 1 mysql mysql 316672 Oct 7 20:09 mysql-bin.000007
-rw-rw---- 1 mysql mysql 316672 Oct 7 20:09 mysql-bin.000008

جيد, الان نفتح ملف إعدادات mysql والي يكون اسمة افتراضياً my.cnf

user@computer:$ nano /etc/my.cnf

نبحث عن

log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 500M

او مايعدلها, ونضع في بداية كل سطر علامة # لصيبح على الشكل التالي

#log_bin = /var/log/mysql/mysql-bin.log
#expire_logs_days = 10
#max_binlog_size = 500M

تأكد انك قمت بالعملية بشكل صحيح, اي خطأ يسبب في توقف خادم mysql
نقوم بحفظ الملف, ثم اعادة تشغيل لخادم mysql عبر الامر

user@computer:$ service mysql restart

الان, ننفذ الاوامر هذه (جمعتها داخل امر واحد للسرعة)

user@computer:$ cd /var/lib/mysql/ && /usr/bin/mysqlcheck -or --all-databases && service mysql restart && chattr -i mysql-bin* && rm -rf mysql-bin* && /usr/bin/mysqlcheck -or --all-databases && service mysql restart && ls -la

بياخذ وقت (حسب عدد القواعد وحجمها وحسب عدد وحجم ملفات الـ mysql-bin)
وبعد الانتهاء سوف يظهر لنا ناتج بالشكل التالي

user@computer:$ total XXXXXXXXXXXX
drwxr-x--x 14 mysql mysql 4096 Oct 7 20:09 ./
drwxr-xr-x 16 root root 4096 Aug 15 14:06 ../
-rw-rw---- 1 mysql mysql 3135 Aug 15 13:33 host.err
-rw-rw---- 1 mysql mysql 316672 Oct 7 20:09 host.domain-name.err
-rw-rw---- 1 mysql mysql 6 Oct 7 20:09 host.domain-name.com.pid
drwx------ 2 mysql mysql 4096 Oct 7 19:00 modsec/
drwx--x--x 2 mysql mysql 4096 Oct 7 19:24 mysql/
srwxrwxrwx 1 mysql mysql 0 Oct 7 20:09 mysql.sock=
-rw-rw---- 1 mysql mysql 10485760 Oct 7 18:32 ibdata1
-rw-rw---- 1 mysql mysql 5242880 Oct 7 18:32 ib_logfile0
-rw-rw---- 1 mysql mysql 5242880 Aug 15 08:21 ib_logfile1
drwx------ 2 mysql mysql 20480 Oct 8 10:33 username_dbname/

لاحظ ان ملفات mysql-bin اختفت, ولو نفذنا الامر التالي

user@computer:$ df -h

راح نلاحظ ان المساحة المستهلكة قلت.

اطيب تحية
مصطفى البازي.

مشاركة المحتوى
  • Digg
  • del.icio.us
  • Print
  • Technorati
  • Identi.ca
  • email
  • PDF
  • Add to favorites
  • Tumblr
هذه التدوينة كُتبت ضمن التصنيف Databases. الأوسمة: , , , , . أضف الرابط الدائم إلى المفضّلة.

أضف تعليق

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

*

يمكنك استخدام أكواد HTML والخصائص التالية: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre user="" computer="" escaped="">

4 تعليقات على: حل مشكلة امتلاء القرص الصلب بسبب MySQL Binary Log

  1. محمد كتب:

    السلام عليكم اخي مصطفى شكرا على درس الجميل
    هل بالامكان شرح كيف يتم التعديل على nano /etc/my.cnf
    بشكل علمي اي على اي اساس تتم تغير القيم
    وشكرا لك

    هل أعجبك التعليق: Thumb up 0 Thumb down 0

  2. @محمد
    التعديل هو في حالة اردت وضع اعدادت خاصة بك (اي غير الاعدادات الافتراضية).

    اما المتغيرات والتي بداخل الملف فهذه تعتمد على معرفتك بكل اوبشن و وظيفة عملة.

    المزيد هنا
    http://dev.mysql.com/doc/refman/5.0/en/

    هل أعجبك التعليق: Thumb up 0 Thumb down 0

  3. حسن كتب:

    شكرا لك اخى

    لكن ليه استفسار هل هذه العمليه يجب تكرارها كل فتره ام هى مره واحده فقط

    يعنى اللى اقصده تتكرر كل فتره زى مسح الملفات المؤقته من على الكمبيوتر ولا هى مره واحده فقط وهى هتمنع انشاء الملفات دى مره اخرى

    تحياتى لكـــ

    هل أعجبك التعليق: Thumb up 0 Thumb down 0

  4. @حسن
    لا مره واحدة فقط. لاحظ اننا اصلاً وقفنا اعادة انشائها من خلال وضع علامة هاش على كل من

    #log_bin = /var/log/mysql/mysql-bin.log
    #expire_logs_days = 10
    #max_binlog_size = 500M

    في ملف my.cnf

    هل أعجبك التعليق: Thumb up 0 Thumb down 0