پیام «Error establishing a database connection» یعنی وردپرس نتوانسته به دیتابیس وصل شود؛ و بدون دیتابیس، هیچ صفحهای ساخته نمیشود. این خطا ترسناک به نظر میرسد، اما در اغلب موارد علت سادهای دارد: اطلاعات اتصال اشتباه، متوقف شدن سرویس دیتابیس یا پر شدن منابع. در این راهنما علتها را به ترتیب احتمال بررسی میکنیم و برای هرکدام راه رفع قدمبهقدم ارائه میدهیم.
فهرست مطالب
وردپرس چطور به دیتابیس وصل میشود؟
وردپرس اطلاعات اتصال را از فایل wp-config.php میخواند:
define( 'DB_NAME', 'example_wp' );
define( 'DB_USER', 'example_user' );
define( 'DB_PASSWORD', '...' );
define( 'DB_HOST', 'localhost' );
$table_prefix = 'wp_';
اگر هر یک از این مقادیر اشتباه باشد، سرور دیتابیس در دسترس نباشد یا اتصال را رد کند، همین خطا نمایش داده میشود. پیام کمی متفاوت «One or more database tables are unavailable» یعنی اتصال برقرار است اما جدولها مشکل دارند (علت ۵).
علت ۱: اطلاعات اتصال اشتباه در wp-config.php
رایجترین علت، بهخصوص پس از انتقال سایت به هاست جدید یا تغییر رمز دیتابیس. بررسی کنید:
- نام دیتابیس و کاربر دقیقاً با آنچه در هاست ساخته شده یکی باشد. در cPanel این نامها معمولاً با پیشوند نام کاربری اکانت شروع میشوند؛ مثلاً
myacc_wp. - رمز درست باشد؛ اگر شک دارید، از بخش MySQL Databases در cPanel رمز کاربر را تغییر دهید و همان را در
wp-config.phpوارد کنید. - کاربر به دیتابیس اضافه شده و دسترسی کامل داشته باشد.
- DB_HOST معمولاً
localhostاست؛ برخی سرویسها آدرس جداگانه یا مسیر سوکت میدهند. - table_prefix با پیشوند جدولهای واقعی در دیتابیس یکی باشد؛ در phpMyAdmin ببینید جدولها با چه پیشوندی شروع میشوند.
روی VPS میتوانید اتصال را مستقیم تست کنید:
mysql -u example_user -p -h localhost example_wp -e "SHOW TABLES;" | head
اگر این دستور خطای «Access denied» داد، مشکل از نام کاربر، رمز یا دسترسی است، نه وردپرس. راهنمای ساخت دیتابیس و کاربر در آموزش cPanel.
علت ۲: سرویس دیتابیس متوقف شده
روی VPS، بررسی کنید MySQL یا MariaDB در حال اجراست:
systemctl status mariadb # یا mysql
sudo journalctl -u mariadb -n 50
sudo systemctl start mariadb
اگر سرویس متوقف شده، پیش از ریاستارت علت را در لاگ پیدا کنید؛ در غیر این صورت دوباره متوقف میشود. رایجترین علت، کمبود حافظه است (علت بعد). اگر سرویس اصلاً بالا نمیآید، لاگ خطای دیتابیس (معمولاً در /var/log/mysql/) را بخوانید.
علت ۳: کمبود RAM یا فضای دیسک
- کمبود RAM: وقتی حافظه تمام شود، سیستمعامل بزرگترین فرایند را میبندد که اغلب دیتابیس است. بررسی:
sudo dmesg -T | grep -i -E "out of memory|killed process" free -hراه رفع: کاهش تعداد فرایندهای PHP-FPM، تنظیم
innodb_buffer_pool_sizeمتناسب با RAM و در صورت نیاز ارتقای حافظه. محاسبه در راهنمای انتخاب VPS. - پر شدن دیسک: دیتابیس بدون فضای خالی نمیتواند بنویسد و ممکن است متوقف شود:
df -h sudo du -sh /var/log/* /var/lib/mysql 2>/dev/null | sort -h | tailلاگهای حجیم، بکاپهای قدیمی و Binary Logهای دیتابیس رایجترین مقصرها هستند.
علت ۴: تعداد اتصال بیش از حد
پیام «Too many connections» در لاگ یعنی سقف اتصال همزمان دیتابیس پر شده؛ معمولاً به دلیل ترافیک بالا، کوئریهای کندی که اتصال را نگه میدارند یا هجوم رباتها. راهحل اصلی کاهش تعداد درخواستهایی است که به PHP و دیتابیس میرسند (کش صفحه و Object Cache) و بهینهسازی کوئریهای کند؛ افزایش max_connections بدون RAM کافی مشکل را بدتر میکند. روشها در بهینهسازی MySQL و MariaDB.
علت ۵: جدولهای خراب
خاموشی ناگهانی یا پر شدن دیسک میتواند جدولها را خراب کند. وردپرس ابزار تعمیر داخلی دارد. این خط را موقتاً به wp-config.php اضافه کنید:
define( 'WP_ALLOW_REPAIR', true );
سپس آدرس https://example.com/wp-admin/maint/repair.php را باز کنید و تعمیر را اجرا کنید. این صفحه بدون ورود در دسترس است؛ پس بلافاصله پس از اتمام، خط بالا را حذف کنید. روی VPS میتوانید از mysqlcheck --repair هم استفاده کنید. قبل از تعمیر، اگر ممکن است، از دیتابیس بکاپ بگیرید.
علت ۶: مشکل سمت هاست
اگر اطلاعات اتصال درست است و تغییری هم ندادهاید، ممکن است سرور دیتابیس هاست موقتاً مشکل داشته باشد یا اکانت به سقف منابع رسیده باشد. صفحه وضعیت یا اطلاعیههای ارائهدهنده را بررسی کنید و تیکت بزنید. اگر این خطا مکرر رخ میدهد، احتمالاً سایت از منابع هاست فعلی فراتر رفته است؛ مقایسه گزینهها در VPS یا هاست اشتراکی.
پیشگیری
- کش صفحه و Object Cache برای کاهش بار دیتابیس.
- پایش دسترسپذیری سایت، فضای دیسک و RAM با هشدار؛ نمونه در آموزش Uptime Kuma.
- چرخش لاگها و پاکسازی بکاپهای قدیمی روی سرور.
- بکاپ منظم دیتابیس به محلی خارج از سرور؛ روشها در بکاپ و انتقال دیتابیس.
سوالات متداول
آیا با این خطا اطلاعات سایت از بین رفته است؟
معمولاً نه. این خطا یعنی وردپرس نمیتواند به دیتابیس وصل شود؛ دادهها در اغلب موارد سالماند و پس از رفع مشکل اتصال برمیگردند.
بعد از انتقال سایت به هاست جدید این خطا را میبینم؛ چرا؟
تقریباً همیشه به دلیل نام دیتابیس، کاربر، رمز یا پیشوند جدول در wp-config.php است که با هاست جدید هماهنگ نشده. راهنمای کامل انتقال در انتقال وردپرس به هاست جدید.
خطا گاهی میآید و میرود؛ چرا؟
الگوی متناوب معمولاً نشانه کمبود منابع یا تعداد اتصال در ساعات شلوغ است. لاگها و مصرف RAM را در همان زمانها بررسی کنید.
DB_HOST را چه بگذارم؟
در اغلب هاستها و VPSها localhost. اگر دیتابیس روی سرور جداگانه است، IP یا نام آن سرور (ترجیحاً از طریق شبکه خصوصی) را وارد کنید.
هاست پایدار برای وردپرس
هاستهای تراست هاست با دیسک NVMe و پشتیبانی فنی برای سایتهای وردپرسی آمادهاند؛ برای عیبیابی سرورهای اختصاصی هم خدمات مدیریت سرور در دسترس است.