رفع خطای Error Establishing a Database Connection در وردپرس

💡 دلیل خطای اتصال به دیتابیس وردپرس چیست و چطور آن را رفع کنیم؟
خطای“Error Establishing a Database Connection” به معنی است که وردپرس نمیتواند به پایگاه داده (Database) خود متصل شود.
وردپرس برای نمایش صفحات سایت، تمام مطالب، کاربران و تنظیمات را از پایگاه داده (MySQL یا MariaDB) میخواند.
اگر اتصال به پایگاه داده به هر دلیل برقرار نشود، وردپرس نمیتواند اطلاعات را بارگذاری کند و این خطا را نشان میدهد.
این صفحه گامبهگام روشهای بررسی و رفع خطای اتصال وردپرس به دیتابیس را نشان میدهد. مراحل را یکییکی اجرا کن تا مشکل پیدا و برطرف شود.
۱. معنی خطا
این خطا یعنی وردپرس نتوانسته به MySQL / MariaDB متصل شود. دلایل رایج:
-
- اطلاعات اتصال (نام دیتابیس، کاربر، رمز، میزبان) در
wp-config.php
اشتباه است - سرویس دیتابیس متوقف یا کرش کرده است
- مجوزهای کاربر دیتابیس اشتباه است
- جداول دیتابیس خراب شدهاند
- سرور تحت فشار (حافظه یا I/O) است
- اطلاعات اتصال (نام دیتابیس، کاربر، رمز، میزبان) در
۲. مراحل بررسی و رفع
گام ۱ — بررسی وضعیت سرویس دیتابیس
در SSH این دستورات را اجرا کن:
# وضعیت سرویس
systemctl status mariadb
# یا در بعضی توزیعها
systemctl status mysql
# اگر متوقف بود، اجرا کن:
sudo systemctl start mariadb
# یا
sudo systemctl start mysql
گام ۲ — بررسی تنظیمات اتصال وردپرس
فایل wp-config.php
را باز کن (معمولاً در مسیر ریشه وردپرس):
/var/www/html/wp-config.php
مقادیر زیر را بررسی کن و مطمئن شو صحیح هست:
define('DB_NAME', 'نام_دیتابیس');
define('DB_USER', 'نام_کاربر');
define('DB_PASSWORD', 'رمز_عبور');
define('DB_HOST', 'localhost'); // یا '127.0.0.1:3307' اگر پورت متفاوت است
گام ۳ — تست اتصال دستی به دیتابیس
با همان اطلاعات وارد MySQL شو:
mysql -u DB_USER -p
# سپس رمز را وارد کن
اگر خطای Access denied
گرفتی، کاربر یا رمز اشتباه است یا کاربر دسترسی ندارد.
گام ۴ — اعطای مجوز به کاربر دیتابیس
اگر به حساب root MySQL دسترسی داری، این دستورات را اجرا کن (نامها را جایگزین کن):
sudo mysql
# در کنسول mysql:
GRANT ALL PRIVILEGES ON DB_NAME.* TO 'DB_USER'@'localhost' IDENTIFIED BY 'DB_PASSWORD';
FLUSH PRIVILEGES;
EXIT;
گام ۵ — تعمیر دیتابیس وردپرس (در صورت خراب شدن جداول)
برای تعمیر جدولها موقتا این خط را در wp-config.php
اضافه کن:
define('WP_ALLOW_REPAIR', true);
سپس در مرورگر برو به:
http://example.com/wp-admin/maint/repair.php
گزینه Repair Database یا Repair and Optimize را اجرا کن. بعد از اتمام فوراً خط WP_ALLOW_REPAIR
را از فایل حذف کن.
برای مشاهده آموزش Reapir دیتابیس از طریق SSH اینجا کلیک کنید.
گام ۶ — بررسی منابع سرور
گاهی MySQL پاسخگو نیست چون RAM یا دیسک پر شده یا I/O سنگین است. دستورات برای بررسی:
free -m
top
df -h
iotop # اگر نصب باشه
اگر حافظه کم است، یا تنظیمات MySQL خیلی بزرگ است (مثلا innodb_buffer_pool_size)، باید آنها را متناسب با RAM تنظیم کنی یا RAM را افزایش دهی.
۳. لاگها را بررسی کن
خطاهای واقعی را در لاگها میتوان دید:
# لاگ MariaDB/MySQL
tail -n 200 /var/log/mysql/error.log
# یا در سیستمهای دیگر
tail -n 200 /var/log/mysqld.log
# لاگ وبسرور (مثلاً LiteSpeed یا Apache)
tail -n 200 /usr/local/lsws/logs/error.log
# یا
tail -n 200 /var/log/apache2/error.log
۴. نکات تکمیلی و مشکلات متداول
مشکل | اقدام پیشنهادی |
---|---|
MySQL کرش میکند یا از حافظه استفاده زیادی میکند | بررسی تنظیمات MySQL (innodb_buffer_pool_size)، کاهش اندازه یا افزایش RAM؛ مانیتور پردازشها |
اطلاعات wp-config اشتباه است | بررسی نام دیتابیس، یوزر و رمز؛ تست اتصال دستی |
کاربر دیتابیس دسترسی ندارد | اجرای GRANT ALL PRIVILEGES ... و FLUSH PRIVILEGES |
دیتابیس خراب است | استفاده از ابزار تعمیر وردپرس (repair.php) یا اجرای تعمیر جداول در MySQL |
پورت یا هاست دیتابیس متفاوت است | در wp-config.php مقدار DB_HOST را مثلاً '127.0.0.1:3307' تنظیم کن |
۵. پیشنهاد: اسکریپت ساده برای مانیتور و ریاستارت خودکار
این اسکریپت ساده وضعیت سرویس MariaDB را چک و در صورت توقف آن را ریاستارت کرده و لاگ میگیرد. (قبل از استفاده آن را بررسی کن)
#!/bin/bash
LOG="/var/log/db-monitor.log"
DATE="$(date '+%F %T')"
if systemctl is-active --quiet mariadb; then
echo "$DATE - mariadb active" >> "$LOG"
else
echo "$DATE - mariadb inactive, restarting..." >> "$LOG"
sudo systemctl restart mariadb
sleep 3
if systemctl is-active --quiet mariadb; then
echo "$DATE - mariadb restarted successfully" >> "$LOG"
else
echo "$DATE - FAILED to restart mariadb" >> "$LOG"
fi
fi
میتوانی این را با کرون هر 1–5 دقیقه اجرا کنی. اما هشدار: ریاستارت خودکار فقط یک راهحل موقت است — باید علت اصلی را پیدا و رفع کنی.
۶. خلاصه سریع
- ابتدا سرویس دیتابیس را چک و اجرا کن.
- مقادیر در
wp-config.php
را مطمئن شو صحیحند. - تست دستی اتصال با
mysql -u ... -p
. - درصورت نیاز مجوزها را با
GRANT
تنظیم کن. - اگر جداول خراباند از
WP_ALLOW_REPAIR
استفاده کن و پس از تعمیر آن را حذف کن. - منابع سرور را بررسی کن و لاگها را بخوان.