پیام «Error establishing a database connection» یعنی وردپرس نتوانسته به دیتابیس MySQL یا MariaDB وصل شود. چهار علت رایج دارد: اطلاعات اتصال در wp-config.php اشتباه است، سرویس دیتابیس خاموش شده، دیتابیس خراب یا پر شده، یا سرور بهخاطر کمبود حافظه سرویس دیتابیس را متوقف کرده است. با یک بررسی چندمرحلهای، معمولاً در چند دقیقه علت پیدا میشود.
پیش از هر تغییر، از دیتابیس بکاپ بگیرید؛ بسیاری از مراحل زیر فقط میخوانند، ولی یک مرحله ترمیم جداول را عوض میکند. روش بکاپگیری در بکاپ دیتابیس MySQL آمده است.
Error establishing a database connection کجا دیده میشود؟
| جایی که پیام میآید | معنی |
|---|---|
| همه صفحات سایت و پیشخوان | مشکل کلی اتصال یا خود دیتابیس |
| فقط پیشخوان (wp-admin) با پیام «One or more database tables are unavailable» | جدول خراب است |
| فقط گاهی و بعد خودبهخود درست میشود | کمبود حافظه یا بار زیاد |
| بعد از انتقال سایت یا تغییر رمز | اطلاعات اتصال تغییر کرده است |
مرحله اول: بررسی دیتابیس در Error establishing a database connection
sudo systemctl status mysql
sudo systemctl status mariadbیکی از این دو سرویس روی سرور شما نصب است. اگر inactive یا failed است:
sudo systemctl start mysql
sudo journalctl -u mysql --since "1 hour ago"اگر سرویس بالا آمد و سایت درست شد، سراغ علت خاموش شدن بروید. لاگ را بخوانید؛ پیام Out of memory: Killed process یعنی سرور حافظه نداشته و دیتابیس را متوقف کرده است. کمکردن مصرف، اضافه کردن حافظه یا ساخت swap کمک میکند. بهینهسازی دیتابیس در بهینه سازی دیتابیس سرور آمده است.
مرحله دوم: اطلاعات اتصال در wp-config.php
فایل را باز کنید و چهار مقدار را بررسی کنید:
define( 'DB_NAME', 'wp_dbname' );
define( 'DB_USER', 'wp_user' );
define( 'DB_PASSWORD', 'رمز' );
define( 'DB_HOST', 'localhost' );بعد با همین اطلاعات مستقیم وصل شوید:
mysql -u wp_user -p -h localhost wp_dbnameاگر خطای Access denied گرفتید، نام کاربر یا رمز اشتباه است. اگر Unknown database گرفتید، نام دیتابیس درست نیست. رمز واقعی را در پیام یا گفتگوی عمومی ننویسید. اگر کاربر وجود ندارد یا رمز باید عوض شود، با یک کاربر مدیر دیتابیس:
ALTER USER 'wp_user'@'localhost' IDENTIFIED BY 'رمز-جدید-و-قوی';
FLUSH PRIVILEGES;بعد همان رمز را در wp-config.php بنویسید. اگر دیتابیس روی سرور جدا است، مقدار DB_HOST باید آدرس همان سرور (و در صورت نیاز پورت) باشد. بعد از انتقال سایت هم همین بخش را بررسی کنید؛ مراحل انتقال در انتقال سایت وردپرس به هاست جدید آمده است.
مرحله سوم: دسترسی کاربر به دیتابیس
ممکن است کاربر وجود داشته باشد ولی به دیتابیس دسترسی نداشته باشد:
SHOW GRANTS FOR 'wp_user'@'localhost';اگر دسترسی روی دیتابیس وردپرس نیست:
GRANT ALL PRIVILEGES ON wp_dbname.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;برای وردپرس فقط روی همان دیتابیس دسترسی بدهید و از کاربر root در wp-config.php استفاده نکنید.
مرحله چهارم: ترمیم جداول خراب
اگر پیام درباره جدول در دسترس نبودن است، وردپرس ابزار ترمیم دارد. در wp-config.php این خط را موقتاً اضافه کنید:
define( 'WP_ALLOW_REPAIR', true );بعد آدرس https://example.com/wp-admin/maint/repair.php را باز کنید و گزینه Repair را بزنید. این صفحه بدون ورود در دسترس است، پس فوراً بعد از پایان کار آن خط را حذف کنید. از خط فرمان هم میتوان:
mysqlcheck -u root -p --auto-repair --check wp_dbnameاگر دیتابیس از نوع InnoDB است و جدول واقعاً آسیب دیده، ترمیم ممکن است کافی نباشد و باید از بکاپ بازیابی کنید. بکاپ سالم داشتن و بازیابی آزمایششده، تنها راه مطمئن است؛ برنامهریزی آن را در بکاپ و بازیابی بحران ببینید.
مرحله پنجم: دیسک پر یا inode تمامشده
وقتی دیسک پر است، دیتابیس نمیتواند بنویسد و ممکن است بیفتد:
df -h
df -iاگر Use% نزدیک 100 است، لاگهای قدیمی، بکاپهای بزرگ یا فایلهای موقت را پیدا کنید. روش پیدا کردن بزرگترین فایلها در راهنمای grep و find آمده است. اگر دیسک واقعاً کم است، گسترش آن را در افزایش حجم دیسک لینوکس با LVM ببینید.
مرحله ششم: محدودیت اتصال و بار زیاد
اگر خطا فقط در ساعات شلوغ میآید، ممکن است تعداد اتصالها از حد مجاز گذشته باشد:
SHOW VARIABLES LIKE 'max_connections';
SHOW STATUS LIKE 'Threads_connected';
SHOW STATUS LIKE 'Max_used_connections';اگر Max_used_connections به max_connections رسیده، یا بار را کم کنید (کش، حذف افزونههای سنگین) یا مقدار را با توجه به حافظه بالا ببرید. بالا بردن بیحساب آن حافظه را تمام میکند و علت اصلی را حل نمیکند.
مرحله هفتم: بررسی از طریق WP-CLI
اگر دسترسی SSH دارید:
wp db check
wp db size --tablesدستور اول وجود اتصال و سلامت جداول را بررسی میکند. اگر WP-CLI هم خطای اتصال میدهد، مشکل قطعاً در اطلاعات اتصال یا خود دیتابیس است و به وردپرس و افزونهها ربطی ندارد.
جدول عیبیابی سریع
| نشانه | علت محتمل | راه حل |
|---|---|---|
| سرویس mysql خاموش است | کمبود حافظه یا خطای دیسک | شروع سرویس و بررسی لاگ |
Access denied for user | رمز یا نام کاربر اشتباه | اصلاح wp-config.php یا تغییر رمز |
Unknown database | نام دیتابیس اشتباه یا حذفشده | بررسی نام یا بازیابی از بکاپ |
| بعد از انتقال سایت | DB_HOST یا اطلاعات قدیمی | بهروزرسانی wp-config.php |
| پیام جدول در دسترس نیست | جدول خراب | ترمیم با repair یا بازیابی بکاپ |
| فقط در ساعات شلوغ | حد اتصال یا کمبود منابع | بهینهسازی و بررسی max_connections |
No space left on device | دیسک یا inode پر | پاکسازی یا افزایش حجم |
سوالات متداول
آیا با این خطا اطلاعات سایت از بین رفته است؟
معمولاً خیر. در بیشتر موارد دادهها سر جایشان است و فقط اتصال برقرار نمیشود. تا قبل از تغییر، بکاپ بگیرید.
آیا برای رفع آن باید وردپرس را دوباره نصب کنم؟
نه. نصب مجدد لازم نیست و ممکن است اطلاعات را عوض کند. علت را در اتصال یا دیتابیس پیدا کنید.
چرا بعد از انتقال هاست این خطا آمد؟
دیتابیس جدید نام، کاربر یا رمز متفاوتی دارد و باید در wp-config.php بهروز شود. بعضی هاستها مقدار DB_HOST غیر از localhost میخواهند.
چطور از تکرار آن جلوگیری کنم؟
بکاپ منظم، پایش وضعیت سرویس دیتابیس و فضای دیسک، و تنظیم حافظه متناسب با ترافیک. هشدار قطع سایت را با ابزارهای پایش بگیرید.





