بازخورد

منو محصولات

سبد خرید

شما هنوز محصولی را به سبد خرید خود اضافه نکرده اید!

آموزش رفع خطای MySQL server has gone away جوملا

برطرف نکردن و چشم پوشی از خطاهای اعلام شده دیتابیس می‌توانند خطرات مختلفی برای وب سایت شما ایجاد کنند. این خطرات ممکن است به توسعه و عملکرد وب سایت شما آسیب برسانند و اطلاعات مهم را در معرض خطر قرار دهند. در این مقاله راهکاری جامع در مورد چگونگی رفع این خطا فراخواهید گرفت.

در برخی اوقات که قصد نصب 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 = '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

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

منبع

  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
محسن محمد

هر آنچه از دوران دانشجویی سال 89 تا به امروز در زمینه طراحی سایت و برنامه نویسی به عنوان تخصص و مهارت کسب کرده ام، قابل نوشتن و انتقال است و بسیار دوست میدارم که این تجربیات را در قالب مجله طراحی و برنامه نویسی به علاقه مندان این حوزه منتقل کنم . 

در بخش مجله استودیو محسن، شما میتوانید کد های نمونه و اخبار و مقالات خواندنی دنیای طراحی و برنامه نویسی وب را بخوانید . اگر هم کمی و کاستی در این زمینه هست، خوشحال میشوم برای تکمیل داده ها به من کمک کنید.

این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید
سه شنبه, 02 آبان 1402 ساعت 12:00
خواندن 38 دفعه آخرین ویرایش در سه شنبه, 02 آبان 1402 ساعت 09:43

فیلتر جستجو

Start 1399/04/24