بسم الله الرحمن الرحيم
كل إنسان يتعامل مع MySQL بدون التطرق إلى المتغيرات التى معد عليها MySQL فربما حتى الأن تقوم بتصميم برنامجك أو موقعك مستخدماً MySQL ثم تقوم برفعة على الهوست أو السرفر الذى تحجزة و إنشاء قاعده البيانات و تجد أن الموقع يعمل بدون مشاكل.
س: هل لاحظت مرة عند عمل Backup من قاعده البيانات ثم فكها على جهازك المحلى أنها لا تعمل ؟
ج : لا
أممممم .... ممكن أن تعمل و لم تواجة أى مشاكل ولكن ممكن أن لا تعمل و يصدر لك الخطأ رقم 1153 ولكنك عند فكها على السرفر الذى تحجزة تجدها تعمل بدون مشاكل.
س : فما هذا الخطأ ؟
ج : هذا الرقم يشير أن حجم Packet المرسلة إلى MySQL أكبر من الحجم المسموح به
س : و ما العمل ؟
ج : هناك متغيرات خاصة بالسرفر و أقصد هنا بكلمة السرفر هو MySQL و هذة المتغيرات يجب إعدادها حتى يستقبل حجم Packet كبير .
س: هل هناك متغيرات خاصة بالـ MySQL ؟
ج : هناك بالطبع متغيرات خاصة به مثل باقى قواعد البيانات.
س : أنا لم أواجه أى مشكلة .... لماذا ؟
ج : لأن هناك عده عوامل ربما تكون أنها هى السبب فى عدم ظهور هذا الخطأ لك و هى أنك تستعمل سرفرات معده مسبقاً مثل مجموعة WAMP أو أنك لم تتعرض لإرسال نص كبير إلى MySQL مثل الذين يريدون حفظ الصور فى قاعده البيانات.
س : وما هى المتغيرات المطلوب إعدادها لهذا الأمر ؟
ج : بصراحة هى ليست متغيرات ولكن هو متغير واحد فقط مسئول عن حجم Packet و هو max_allowed_packet
س : و كيف أعرف قيمة هذا المتغير ؟
ج : بواسطه select ولكن قبل أن نتعرف على هذا المتغير يجب أن نعرف أشياء بسيطة عنه و هى أنه يوجد منه نواعان .
س : و ما هم النوعان ؟
ج : النوع الأول يستخدم على مستوى session و النوع الأخر يستخدم على المستوى global و لكن النواعان بإسم واحد max_allowed_packet
س: و ما الفرق بينهم ؟
ج : النوع الأول يستخدم للتعرف و تغيير حجم Packet المرسلة على المستوى الفردى أى عند إتصال العميل يمكن تغيير قيمة هذا المتغير كما يريد أما النوع الثانى فهو خاص بالتعرف و تغيير قيمة Packet على المستوى العام أى يتم تطبيق قيمة Packet المطلوبه على جميع sessions المتصلة بالـ MySQL حتى لا يتطرق العميل لتغير القيمة بنفسة على المستوى الفردى .
س: هلى يمكننى تغيير النوع الثانى و الذى على المستوى global بحسابى الذى أمتلكة على السرفر ؟
ج : بالطبع نعم إذا كنت تمتلك الصلاحيات اللازمة و هى غالبا تتوفر فى المستخدم root
س: وماذا أفعل لو لم أمتلك هذة الصلاحيات ؟
ج: يجب الإتصال بالشركة التى تتعامل معها و تطلب منها رفع قيمة هذا المتغير .
س: لم تقل لى كيف أعرف قيمة هذا المتغير ؟
ج : كما ذكرت بواسطة select ولكن متغييرات MySQL يجب إلحاق علامه @ قبلها مرتين هكذا
select @@max_allowed_packet ;
س: هذا السطر ينطبق على المستوى العام ؟
ج : لا فالسطر السابق تستطيع أن تعرف منه حجم Packet على المستوى الفردى فقط .
س : و كيف اتعرف على متغير المستوى العام ؟
ج : إذا كنت تريد أن تتعرف على قيمة هذا المتغيير على المستوى العام او الفردى فممكن أن تلحق قبل المتغيير كلمة global للمتغيير العام و كلمة session المتغيير الفردى
س : و كيف يتم تطبيق هذا ؟
ج : ممكن أن تكتب هذا السطر للتعرف على المتغير على المستوى العام
SELECT @@global.max_allowed_packet;
كما يمكنك أن تكتب السطر السابق ولكن مع تغيير كلمة global بكلمة session لتتعرف على حجم Packet على المستوى الفردى هكذا
SELECT @@session.max_allowed_packet;
س : وكيف أقوم بتغيير قيمه هذا المتغيير ؟
ج : بواسطة الأمر set هكذا
SET @@global.max_allowed_packet=10485760;
كما يمكنك أن تكتب السطر السابق بصيغة أخرى هكذا
SET GLOBAL max_allowed_packet=10485760;
بالطبع إذا كنت تريد التغيير على المستوى الفردى فقم بتبديل كلمة global بكلمة session
س : أرى أنك كتبت الرقم 10485760 فما قصدك بهذا الرقم ؟
ج : هذا الرقم يقوم بتغيير قيمة المتغيير إلى ما يساوى 10 ميجا بايت فعند إلحاق القيمة يحتسبها MySQL بالبايت.
س : هل من الممكن أن يكون قيمة المتغيير على المستوى الفردى أكبر من قيمة المتغيير على المستوى العام ؟
ج : لا فيجب أن لا يتعدى قيمة المتغير المستوى الفردى قيمة متغيير المستوى العام .
س : وما أقصى حد مسموح به لقيمة هذا المتغيير ؟
ج : الحد المسموح به هو واحد جيجا بايت (1 GB )
س : و متا أحتاج تغيير هذا المتغيير ؟
ج : يجب تغيير و تكبير قيمة هذا المتغيير عند إستخدام أحد أنواع الحقول الكبيرة مثل LONGBLOB او LONGTEXT
س: وهل ممكن أن توافق الشركة على تغيير هذا المتغيير و تكبيرة إلى واحد جيجا بايت ؟
ج : أكاد أقول لك مستحيل أن تجد شركة تعده على هذا النحو فأعلى إعداد رأيتة بحياتى كان معد على 40 ميجا بايت فقط
س: لماذا ؟
ج : لأنه يحتاج الكثير من الذاكرة و إذا قامو برفع هذا المتغيير سيكون مشكلة بالنسبة لهم
س: و ماذا أفعل إذا كنت أحتاج رفع هذا المتغيير إلى هذا الحد الكبير ؟
ج : يجب أن تحجز سرفر كامل لهذا المشروع و حينها لا يشترك معك أحد على نفس السرفر.
وهنا أعتقد انك تعرفت على هذا المتغير جيداً و أرجو ان أكون وفقت فى إصال المعلومة بشكل مبسط .
