مرکز آموزش

رفع خطای MySQL server has gone away

  • جوملا!, جوملا فارسی, خطای دیتابیس جوملا, error time_out joomla!, mysql time_out
  • 0

در برخی اوقات که قصد نصب Extensionهای سنگین و پرحجم دارید، با خطایی مشابه مورد زیر مواجه می‌شوید:

MySQL server has gone away SQL=SELECT a.id AS value, a.title AS text, a.level, a.menutype, a.type, a.template_style_id, a.checked_out FROM jos_menu AS a LEFT JOIN `jos_menu` AS b ON a.lft > b.lft AND a.rgt < b.rgt WHERE a.published != -2 GROUP BY a.id, a.title, a.level, a.menutype, a.type, a.template_style_id, a.checked_out, a.lft ORDER BY a.lft ASC
Error loading component: com_media, 1
Error loading module MySQL server has gone away SQL=SELECT m.id, m.title, m.module, m.position, m.content, m.showtitle, m.params, mm.menuid FROM jos_modules AS m LEFT JOIN jos_modules_menu AS mm ON mm.moduleid = m.id LEFT JOIN jos_extensions AS e ON e.element = m.module AND e.client_id = m.client_id WHERE m.published = 1 AND e.enabled = 1 AND (m.publish_up = '0000-00-00 00:00:00' OR m.publish_up <= '2012-09-21 16:01:46') AND (m.publish_down = '0000-00-00 00:00:00' OR m.publish_down >= '2012-09-21 16:01:46') AND m.access IN (1,1,2,3) AND m.client_id = 1 AND (mm.menuid = 0 OR mm.menuid <= 0) ORDER BY m.position, m.ordering

 

دلیل شایع وقوع این مشکل

این خطا زمانی رخ می‌دهد که برای انجام عمل مورد نظر از FTP استفاده می‌کنید و تنظیمات به درستی اعمال نشده است.

 

راه حل رفع این مشکل

برای رفع این مشکل به پنل مدیریت جوملا مراجعه و مسیر زیر را دنبال کنید:

Global Configuration > Settings > FTP settings

سپس Enable FTP را از yes به no تغییر دهید. اکنون می‌توانید افزونه مورد نظر را مجدداً نصب کنید.

دلایل دیگر وقوع این خطا

این خطا به دلایل متعدد دیگر نیز روی می‌دهد که از جمله‌ می‌توان به زمان ایجاد فایل‌های حجیم PDF، بررسی خروجی و اطلاعات ثبت شده در فرم‌های مختلف موجود در وبسایت و یا مشاهده سفارش‌های ثبت شده در فروشگاه ساز VirtueMart اشاره کرد. خطایی که در این مواقع روی می‌دهد، موردی مشابه خطای زیر است:

Error displaying the error page: Could not connect to MySQL.: MySQL server has gone away SQL=SELECT SQL_CALC_FOUND_ROWS o.*, CONCAT_WS(‘ ‘,u.first_name,u.middle_name,u.last_name) AS order_name ,u.email as order_email,pm.payment_name AS payment_method FROM #__virtuemart_orders as o LEFT JOIN #__virtuemart_order_userinfos as u ON u.virtuemart_order_id = o.virtuemart_order_id AND u.address_type=”BT” LEFT JOIN #__virtuemart_paymentmethods_en_gb as pm ON o.virtuemart_paymentmethod_id = pm.virtuemart_paymentmethod_id ORDER BY created_on DESC LIMIT 0, 100

 

دلیل وقوع خطای فوق

آنچه موجب وقوع خطای فوق شده، Query دیتابیس ذکر شده است که سرور در واکنش به پروسه مربوط به آن، ارتباط را قطع می‌کند و این مورد موجب مواجهه با خطای از دسترس خارج شدن MySQL Server می‌شود. برای مثال:

- انجام پروسه مربوطه به درازا می‌انجامد و فرصت ارائه شده از طرف سرور به اتمام می‌رسد. در این صورت ارتباط و در نتیجه پروسه‌ی ذکر شده قطع می‌شود.

- یک Packet ناقص و یا با حجم بالا به سمت سرور ارسال می‌شود و سرور به اشتباه از دریافت آن پاکت امتناع کرده و آن را حذف می‌کند. در واقع زمانی که MySQL آن پاکت بزرگ و یا ناقص را دریافت کند، اینگونه برداشت می‌کند که پاکت مذکور برای کاربری به غیر از خودش می‌بایست ارسال می‌شد و با فرض نادرست عدم مالکیت آن Packet، ارتباط را قطع می‌کند.

خطای از دسترس خارج شدن پایگاه داده یا همان MySQL server has gone away در متن فوق، بر خلاف ظاهر متن خطا، به معنای وجود Time out به هنگام اجرای Query مورد نظر است و در واقع این عبارت یعنی زمان اجرای کوئری مورد نظر بسیار طولانی شده که در نهایت موجب بروز این خطا گردیده است.

 

راه حل رفع مشکل

موارد زیر را جهت رفع مشکل لازم است انجام دهید:

1- فرم‌های موجود در وبسایت، هسته‌ی جوملا! و سایر موارد موجود را بروزرسانی نمایید.

مواردی که در ادامه ذکر می‌شوند، در سرورهای لینوکسی قابل اجرا و نیازمند داشتن دسترسی روت سرور (SSH) هستند.

2- مسیر زیر را با استفاده از ویرایشگر nano یا vi باز کنید:

/etc/my.cnf

مقدار Max_allowed_packet را به 256M تغییر دهید. سپس آن را ذخیره کنید و MySQL را ریست نمایید:

/etc/init.d/mysql restart

در صورت عدم رفع مشکل مجددا فایل my.cnf را باز کنید و عبارات زیر را به آن اضافه نمایید:

wait_timeout=120
interactive_timeout=120
net_write_timeout=120

 

همچنین در صورت استفاده از cPanel می‌توانید موارد زیر را در آن افزایش دهید:

max_execution_time
max_input_time

مجددا MySQL را Restart نمایید.

چنانچه مشکل مذکور همچنان ادامه داشت، به کمک مدیر سرور لاگ‌های MySQL را بررسی کنید. در بسیاری از موارد دلیل وقوع این مشکل، وجود خطا در خصوص جدول «ysql.innodb_index_stats» می‌باشد. در این صورت می‌توانید ابتدا از Repair دیتابیس شروع کنید. در صورت عدم رفع مشکل، لازم است MySQL را ضمن ایجاد بکاپ حذف و مجددا ایجاد نمایید و درون‌ریزی (Import) اطلاعات را در آن انجام دهید. چنانچه انجام این کار برای شما مقدور نمی‌باشد و از پنل مدیریتی cPanel استفاده می‌کنید، موارد زیر را انجام دهید:

با استفاده از فرمان زیر، به مسیر ذخیره سازی دیتابیس های MySQL مراجعه کنید:

cd /var/lib/mysql

 

با اجرای فرامین زیر، فایل «ib_logfile0» و «ib_logfile1» را در آن مسیر یافته و آن‌ها را به مسیری دیگر منتقل و مالکیت آن‌ها را تغییر دهید:

mv ib_logfile0 /backup/tmp/
mv ib_logfile1 /backup/tmp/
cd /backup/tmp/
Chown root:root ib_logfile0
Chown root:root ib_logfile1

سپس MySQL را ریست نمایید:

Service mysql restart

حال می‌بایست مشکل مذکور برطرف شده باشد.

تمامی حقوق مادی و معنوی این مطلب متعلق به HiSupport است.
کپی برداری از مطالب تنها با ذکر منبع و لینک به وبسایت HiSupport بلامانع است.


آیا این آموزش به شما کمک کرد؟