در جمعهای که گذشت با یک مشکل عجیب مواجه شدم! یهو مانیتورینگ اعلام کرد یکی از سرورها داون شده. از اونجایی که مانیتورینگ ما یک آدرس رو چک میکنه که توی اون یک کانکشن به دیتابیس زده میشه و در صورتی که ارتباط برقرار بشه، سرور رو آپ در نظر میگیره چون سرور در دسترس بود اولین احتمالی که دادم استاپ شدن سرویس دیتابیس mysql سرور بود. تعجبم وقتی بیشتر شد که به سرور متصل شدم و دیدم که mysql آپ هست و بدون مشکل داره کار میکنه.
خطای فایل php مانیتورینگ رو چک کردم بصورت زیر بود.
mysqli_connect(): (HY000/2002): No such file or directory i
n /home/...
همه سایتهایی که اتصال به دیتابیس داشتن هم خطای دیتابیس میدادن (ژانر وحشت). با سرچ خطا تو گوگل و خوندن یکی دو تا تجربه مشابه، متوجه شدم که علت بروز خطا این هست که عبارت localhost به عنوان سرور دیتابیس شناخته نمیشه و اگر به جای این عبارت آدرس لوکال یعنی 127.0.0.1 رو قرار بدم خطا رفع میشه (الله اکبر)
طبیعتا اولین چیزی که به ذهنم رسید بررسی فایل /etc/hosts روی سرور بود. کار این فایل این هست که به آدرسها IP معرفی میکنه. در کمال ناباوری دیدم که به آدرس localhost مقدار آیپی 127.0.0.1 داده شده و آخرین امیدم برای رفع مشکل از دست رفت. پینگ عبارت localhost هم روی سرور مقدار مناسب رو برمیگردوند.
خلاصه سرتون رو درد نیارم با کلی سرچ و تست و آمون و خطا و بررسی تنظیمات فایل کانفیگ دیتابیس یعنی /etc/my.cnf به نتیجهای نرسیدم. دم دمای غروب بود که داشتم نا امیدی رو بغل میکردم ناگه تو سایت سرور فالت به یه پاسخ رو دیدم که خیلی هم بهش توجهی نشده بود، اما همین لعنتی دقیقا راهگشای مشکل من بود و دنیام رو زیبا کرد.
و اما راهکار چی بود؟ اول باید توجه داشته باشید که این خطا فقط و فقط مربوط به سرورهایی هست که سیستم عامل کلودلینوکس دارن و روشون cagefs نصب هست. یعنی اگر این دو رو ندارید پس خطای شما به علتی که خدمتتون عرض میکنم نیست و دلیل دیگری داره. خطا به این خاطر بود که یک سری از محتویات فایل
/etc/cagefs/cagefs.mp
حذف شده بود. و لاینی که باعث بروز خطای ما شده بود و تو این فایل نبود لاین زیر بود.
/var/lib/mysql
بعد از اضافه کردن این لاین و ریستارت کردن سرویس cagefs اشکال رفع شد.
نکته حائز اهمیت:
در چنین مواردی که اختلال باعث از دسترس خارج شدن سایتهای کاربران میشه پس از حفظ خونسردی، اگر امکانش هست باید اول موقت خطای دسترسی سایتها رو برطرف کرد تا بعدا مشکل بصورت ریشهای حل بشه. من هم تا فهمیدم خطا با تغییر localhost به 127.0.0.1 موقتا رفع میشه با دستور sed این عبارتها رو تو فایلهای کانفیگ سایتها با هم جابجا کردم. از اونجایی که اکثر سایتهای سرور وردپرسی بودن دستور زیر برای اعمال تغییرات در فایلهای وردپرسی اجرا شد.
find /home/*/public_html/ -type f -name "wp-config.php" -exec sed -i 's/localhost/127.0.0.1/g' {} +
طبعا برای پلتفرمهای دیگه نیز مشابه همین دستور تغییرات اعمال شد.
این مقاله زندگی من رو نجات داد.