جمله Error establishing a database connection را احتمالا دیدهاید. صفحه سفید، یک خط متن، و هیچ چیز دیگر. اولین بار که این را روی سایت خودم دیدم، فکر کردم همه چیز از دست رفته. حالا که بارها دیدهامش، میدانم معمولا علتش سادهتر از چیزی است که به نظر میرسد.
اینجا ترتیبی را مینویسم که خودم دنبال میکنم. از سادهترین و رایجترین علت شروع میکنم و به سمت موارد نادرتر میروم.
اول بررسی میکنم آیا فقط صفحه اصلی این خطا را میدهد یا آدرس wp-admin هم. اگر پنل مدیریت پیام دیگری مثل «یک یا چند جدول دیتابیس در دسترس نیست» بدهد، مشکل احتمالا خراب شدن جدولهاست، نه قطع اتصال. این تفاوت کوچک مسیر را کاملا عوض میکند.
بیشتر مواردی که من دیدهام همینجا حل شده. چهار خط را نگاه میکنم:
define('DB_NAME', '...'); define('DB_USER', '...'); define('DB_PASSWORD', '...'); define('DB_HOST', '...');
موقعیتهایی که این مقادیر بهم میریزند:
سایت را از هاست دیگری منتقل کردهاید و اسم دیتابیس یا کاربر عوض شده
کسی رمز کاربر دیتابیس را از پنل عوض کرده ولی فایل را بهروز نکرده
مقدار DB_HOST روی localhost مانده در حالی که هاست جدید آدرس دیگری میخواهد
یک بار تمام یک ظهر را گشتم و آخرش معلوم شد یک فاصله اضافه آخر رمز عبور بوده که موقع کپی آمده بود.
در پنل هاست نگاه میکنم کاربر دیتابیس واقعا به آن دیتابیس متصل شده و دسترسی کامل دارد. بعد از انتقال سایت، فراموش کردن همین مرحله خیلی رایج است. کاربر ساخته شده، دیتابیس هم ساخته شده، ولی به هم وصل نشدهاند.
اگر تنظیمات درست بود، احتمال دارد خود سرویس دیتابیس مشکل داشته باشد. روی هاست اشتراکی این را با پشتیبانی چک میکنم. روی سرور خودم وضعیت سرویس را نگاه میکنم و لاگ MySQL را میخوانم. گاهی کمبود فضای دیسک باعث میشود سرویس بالا نیاید، مخصوصا وقتی لاگها یا بکاپهای قدیمی جا را پر کردهاند.
اگر پنل مدیریت گفت جدولها خراباند، وردپرس ابزار تعمیر داخلی دارد. این خط را موقتا به wp-config.php اضافه میکنم:
define('WP_ALLOW_REPAIR', true);
بعد به آدرس wp-admin/maint/repair.php میروم و تعمیر را اجرا میکنم. این صفحه به ورود نیاز ندارد، پس حتما بعد از کار خط را پاک میکنم. قبل از تعمیر هم یک بکاپ از دیتابیس میگیرم، حتی اگر خراب باشد.
گاهی خطا فقط در ساعتهای شلوغ میآید و بعد خودش رفع میشود. این یعنی سقف اتصالهای همزمان پر شده. علتش میتواند یک افزونه پرمصرف، رباتهایی که سایت را میخزند یا نبود کش باشد. اینجا کش صفحه و بستن رباتهای مزاحم معمولا کمک میکند. اگر کمک نکرد، وقت آن است که به منابع بیشتر فکر کنید.
از این ماجراها یک عادت برایم مانده: همیشه یک بکاپ تازه از دیتابیس دارم و میدانم چطور برگردانمش. وقتی جدولها واقعا از بین بروند، هیچ ترفندی جای بکاپ را نمیگیرد.
اگر هاستتان بکاپ خودکار روزانه از دیتابیس نمیگیرد، همین امروز یک بکاپ دستی بگیرید و یک جای دیگر نگهش دارید. روزی که این خطا را ببینید، از خودتان ممنون میشوید.
اگه نمیخواید درگیر تنظیم دیتابیس و سرور بشید، یه پیشنهاد هم دارم: پاستاکلود یه سرویس ابری ایرانیه که دیتابیس و وردپرس رو آماده تحویل میده.
برای شفافیت: من با پاستاکلود همکاری دارم.