الويب العربي

الويب العربي (http://www.arabwebtalk.com/index.php)
-   خلاصة قسم إدارة و تشغيل السيرفرات (http://www.arabwebtalk.com/forumdisplay.php?f=134)
-   -   حل مشكلة امتلاء القرص الصلب بسبب MySQL Binary Log (http://www.arabwebtalk.com/showthread.php?t=123694)

Mustafa Albazy 09-10-2009 12:37 AM

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


المشكلة:-

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


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

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

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


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


الطريقة:

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

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

root@linux:$ cd /var/lib/mysql/ && ls -la
لنفرض ان الناتج كان كتالي
كود:

root@linux:$ 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
كود:

root@linux:$ 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 عبر الامر
كود:

root@linux:$ service mysql restart
الان, ننفذ الاوامر هذه (جمعتها داخل امر واحد للسرعة)
كود:

root@linux:$ 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)
وبعد الانتهاء سوف يظهر لنا ناتج بالشكل التالي
كود:

root@linux:$ 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 اختفت, ولو نفذنا الامر التالي
كود:

root@linux:$ df -h
راح نلاحظ ان المساحة المستهلكة قلت.

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

Ramy Allam 13-10-2009 07:49 PM

السلام عليكم


تمام يا درش

واعتقد ممكن تتعمل بطريقه Purge Master Logs


جزاك الله خيرا

Mustafa Albazy 14-10-2009 09:50 AM

نعم رامي ممكن عمل ذالك وهية الطريقة الموفرة من قبل MySQL
خصوصاً اذا كنت تستخدم كذا سيرفر للقواعد

ولكن في الحالة الافتراضية ممكن حذفها


هنا معلومات حول عملية التطهير Purge
http://dev.mysql.com/doc/refman/5.0/...nary-logs.html


شكراً لك
مصطفى.

eg-logic.com 15-10-2009 04:01 PM

اولااحب اشكرك على الموضوع الرائع و على الشرح الاروع
لكن فى شئ بسيط
اولا انا لما دخلت على الشل و فتحت ملف ال mySQL
my.cnf
لم اجد
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 500M

ما وجدته فقط
[mysqld]
skip-bdb
skip-innodb
set-variable=local-infile=0
safe-show-database

وجد 4 اسطر ليس لها علاقة و عملت بحث عنهم و لم اجدهم

ثانيا اما فتحت /var/lib/mysql/
و جدت فعلا ملفات كثيرة و احجامها كبيرة جدا و وجدت ايضا جميع قواعد بيانات العملا للى بالسيرفر
هل هذا الطريقة ستؤثر على القواعد او تحدث بها اى مشكل
فى الانتظار و شكرا لك مرة اخرى

Mustafa Albazy 15-10-2009 10:54 PM

إقتباس:

اقتباس من مشاركة eg-logic.com (المشاركة 682668)
اولااحب اشكرك على الموضوع الرائع و على الشرح الاروع
لكن فى شئ بسيط
اولا انا لما دخلت على الشل و فتحت ملف ال mySQL
my.cnf
لم اجد
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 500M

ما وجدته فقط
[mysqld]
skip-bdb
skip-innodb
set-variable=local-infile=0
safe-show-database

وجد 4 اسطر ليس لها علاقة و عملت بحث عنهم و لم اجدهم

ثانيا اما فتحت /var/lib/mysql/
و جدت فعلا ملفات كثيرة و احجامها كبيرة جدا و وجدت ايضا جميع قواعد بيانات العملا للى بالسيرفر
هل هذا الطريقة ستؤثر على القواعد او تحدث بها اى مشكل
فى الانتظار و شكرا لك مرة اخرى


هذا يعني انها غير مفعلة لديك, وايضاً mysql بحاجة إلى اعدادات

بخصوص var/lib/mysql هو المجلد الذي يحتوي على جميع القواعد الخاصة باليوزرات والروت ..الخ
وايضاً يحتوي على بعض ملفات اللوج وملف السوكت الخاص بال mysql


تحياتي
مصطفى.

L!NUX MAN 26-10-2009 06:00 PM

تسلم ايدك يا مصطفى

مبدع دايما ض1

معلومات هوست 01-12-2009 02:20 AM

تسلم اخوي علي الجميل
ويجزيك ربي بكل خير

belsemtech.info 28-05-2010 02:48 PM

شكرا لك أستاذ مصطفى



فعلا درس رائع و اﻷاروع هو حضورنا معك هنا


جميع الأوقات بتوقيت مكة المكرمة. الساعة الآن » 08:28 AM.

Powered by vBulletin
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © ArabWebTalk.Com 2004-2012