بسیاری از کاربران سایت پس از اتمام فرآیند انتقال سایت به سرور جدید و یا حتی در شرایطی که ظاهرا همه چیز نرمال است با پیامهای ناخوشایندی مثل “Error establishing a database connection” در وردپرس یا خطاهای مشابه در سیستمهای اختصاصی مواجه میشوند.
چرا خطای دیتابیس رخ میدهد؟
در این مقاله، بررسی میکنیم که چرا خطای Error establishing a database connection رخ میدهد و چگونه میتوانید با چند گام فنی، سایت خود را دوباره آنلاین کنید.
دیتابیس (پایگاه داده) قلب تپنده سایت شماست. هنگام انتقال سایت، این “قلب” از سرور قدیمی جدا و به سرور جدید متصل میشود. اگر این اتصال به درستی برقرار نشود، سایت شما نمیتواند محتوا را فراخوانی کند. دلایل اصلی عبارتند از:
- عدم تطابق اطلاعات اتصال (Credentials): نام دیتابیس، نام کاربری یا رمز عبور تغییر کرده است.
- تغییر در میزبان (Hostname): در بسیاری از سرورها آدرس دیتابیس `localhost` است، اما برخی سرویسهای ابری از آدرسهای اختصاصی استفاده میکنند.
- عدم import کامل دیتابیس: بخشی از جداول یا دادهها در حین انتقال ناقص کپی شدهاند.
- مشکلات دسترسی (Permissions): کاربر دیتابیس در سرور جدید به دیتابیس مذکور دسترسی ندارد.
رفع خطای establishing a database connection در سایت های وردپرسی
وردپرس برای اتصال به دیتابیس از فایلی به نام wp-config.php استفاده میکند. پس از انتقال، باید این فایل را بررسی کنید:
- بررسی فایل wp-config.php: با استفاده از File Manager در پنل هاست خود، این فایل را در مسیر اصلی (Root) ویرایش کنید.
تطبیق مقادیر زیر:
DB_NAME: نام دیتابیس جدید.
DB_USER: نام کاربری دیتابیس جدید.
DB_PASSWORD: رمز عبور کاربر دیتابیس.
DB_HOST: در ۹۰٪ موارد همان `localhost` است، مگر اینکه شرکت خدمات ابری شما آدرس دیگری داده باشد.
۲. بررسی اتصال کاربر به دیتابیس در پنل هاست
بسیاری از کاربران دیتابیس را Import میکنند و فایل `wp-config.php` را هم اصلاح میکنند، اما فراموش میکنند کاربر را به دیتابیس متصل کنند:
* به بخش MySQL Databases در پنل هاست خود بروید.
* پایین صفحه، بخشی به نام Add User To Database وجود دارد.
* کاربر و دیتابیسِ مربوطه را انتخاب کرده و دکمه Add را بزنید.
* در صفحه بعد، تیک گزینه ALL PRIVILEGES (همه دسترسیها) را بزنید و تغییرات را ذخیره کنید.
۳. بررسی پسوند جداول (Table Prefix)
اگر هنگام انتقال، پیشوند جداول دیتابیس (مثلاً `wp_`) را تغییر دادهاید، باید این تغییر را در فایل wp-config.php اعمال کنید:
* در فایل wp-config.php به دنبال خطی بگردید که با `$table_prefix` شروع میشود.
* اطمینان حاصل کنید که پیشوند موجود در آنجا دقیقاً با پیشوند جداولی که در phpMyAdmin مشاهده میکنید، مطابقت دارد.
۴.استفاده از ابزار تعمیر دیتابیس وردپرس
اگر همه چیز درست است اما سایت همچنان خطا میدهد، ممکن است در حین انتقال، دیتابیس آسیب دیده باشد. وردپرس یک ابزار تعمیر داخلی دارد:
* فایل wp-config.php را باز کنید.
* خط زیر را به انتهای فایل (قبل از جایی که نوشته شده “That’s all, stop editing!”) اضافه کنید:
`define(‘WP_ALLOW_REPAIR’, true);`
* فایل را ذخیره کنید.
* حالا به آدرس `yourdomain.com/wp-admin/maint/repair.php` بروید.
* روی دکمه Repair and Optimize Database کلیک کنید.
* نکته امنیتی: پس از پایان کار، حتماً آن خط را از `wp-config.php` پاک کنید تا سایت شما در معرض دسترسی دیگران قرار نگیرد.
توجه کنید که این خطای دیتابیس error establishing a database connection را باید قدم به قدم رفع کنید.
۵. بررسی نسخهی PHP و سازگاری دیتابیس
وردپرسهای جدید به نسخههای PHP بالا (مثل ۸.۱ یا ۸.۲) نیاز دارند.
* اگر نسخه PHP سرور جدید با سرور قدیم متفاوت است، ممکن است باعث شود افزونههای مرتبط با دیتابیس کرش کنند.
* از بخش MultiPHP Manager یا Select PHP Version در پنل هاست، نسخه PHP را روی نسخه پیشنهادی وردپرس (ترجیحاً ۸.۱ یا بالاتر) تنظیم کنید.
نکته حیاتی که یک وب مستر باید بداند
در هاست اشتراکی، محدودیت اتصال همزمان MySQL وجود دارد (مثلا ۱۰ اتصال) و مشکل اصلی اینجاست که ووکامرس و برخی افزونهها ( مثل افزونه کش لایت اسپیدو یا JetPack) ، اتصالات را میگیرند و تا چند دقیقه بیکار (Idle) نگه میدارند تا زمانی که تایماوت (Timeout) بخورند و وقتی تعداد اتصال به حدآستانه برسد، اتصال بعدی (در این مثال اتصال یازدهم) با خطای “Error establishing a database connection” روبرو میشود.
ووکامرس (Woocomerce) به شدت از دیتابیس استفاده میکند. این کارها را یک وبمستر باید انجام دهد:
غیرفعال کردن گزارشهای پیشفرض ووکامرس:
ووکامرس → وضعیت → ابزارها گزینههای Clear WooCommerce transients و Clear expired transients را اجرا کنید.غیرفعال کردن Action Scheduler در زمان بازدید: افزونه WP Control را نصب کنید و کرون جابهای ووکامرس را بررسی کنید. اگر تعداد زیادی pending یا in-progress وجود دارد، آنها را پاک کنید.
استفاده از CRON واقعی سرور به جای WP-Cron که با تنظیماتی در فایل wp-config.php قابل انجام است.
رفع مشکل establishing a database connection در سایتهای غیر وردپرسی (کدنویسی اختصاصی)
در سایتهای اختصاصی (مانند سایتهای PHP خالص، لاراول، نودجیاس و…)، فایل تنظیمات معمولاً متفاوت است. دلیل رخداد خطای establishing a database connection را در بررسی موارد زیر پیدا کنید:
۱. بازبینی فایلهای پیکربندی (Environment Variables)
برخلاف وردپرس که همه چیز در wp-config.php است، در پروژههای مدرن تنظیمات دیتابیس معمولاً در یک فایل محیطی قرار دارند:
* فایل .env: در اکثر فریمورکهای مدرن (مثل لاراول)، تمام اطلاعات اتصال در فایلی به نام .env در روت اصلی پروژه است. مطمئن شوید مقادیر DB_HOST ،DB_DATABASE ،DB_USERNAME و DB_PASSWORD دقیقاً با آنچه در پنل هاست جدید ساختهاید یکی باشد.
* فایلهای config: برخی پروژهها فایلهایی مثل config.php یا database.php در پوشههای config یا inc دارند. حتماً چک کنید که آدرس دیتابیس در آنها `localhost` باشد (یا اگر از دیتابیس ابری جداگانه استفاده میکنید، IP سرور دیتابیس وارد شده باشد).
۲. بررسی کاربر دیتابیس و سطح دسترسی (Privileges)
شایعترین دلیل خطا در سایتهای غیروردپرسی، عدم تخصیص کاربر به دیتابیس است:
حتی اگر نام دیتابیس و رمز عبور درست باشد، اگر کاربر (User) را به دیتابیس (Database) در پنل هاست “Add” نکرده باشید، اتصال برقرار نمیشود.
مطمئن شوید کاربر مورد نظر، دسترسیهای `ALL PRIVILEGES` (شامل SELECT, INSERT, UPDATE, DELETE) را روی دیتابیس دارد.
۳. تفاوت در نسخه و موتور دیتابیس (Engine/Version)
سایتهای غیروردپرسی ممکن است به قابلیتهای خاصی از دیتابیس وابسته باشند:
نسخه MySQL: اگر سایت قدیمی دارید (مثلاً با کدهای قدیمی PHP)، ممکن است روی نسخه جدید MySQL (مثل 8.0) به دلیل تغییرات در روش احراز هویت (`caching_sha2_password`) دچار خطای دیتابیس شود. گاهی نیاز است کاربر دیتابیس را با روش `mysql_native_password` بسازید.
موتور دیتابیس: مطمئن شوید اگر دیتابیس را دستی Import کردید، موتور جداول (مثل InnoDB یا MyISAM) مشابه سرور قبلی باشد.
۴. بررسی فایلهای اتصال (Connection Strings)
در کدهای اختصاصی، ممکن است برنامه نویس از IP یا Hostname خاصی در کد استفاده کرده باشد:
اگر در کد (در فایلهایی مثل db_connect.php) به جای `localhost` از یک IP خاص استفاده شده، باید آن را به آدرس جدید سرور ابری تغییر دهید.
اگر سایت شما روی Docker اجرا میشود، باید مطمئن شوید نام سرویس دیتابیس (Service Name) که در فایل docker-compose.yml تعریف شده، با نام کانتینر دیتابیس در سرور جدید یکی است.
مطمئن باشید خطای establishing a database connection از یکی از این رخنه ها وارد شده است.
۵. تست اتصال با یک اسکریپت ساده (تکنیک طلایی)
برای اینکه بفهمید مشکل از کد سایت است یا سرور، یک فایل ساده با نام `test_db.php` در روت سایت بسازید و کد زیر را در آن قرار دهید:
سپس آدرس yourdomain.com/test_db.php را در مرورگر باز کنید.
اگر پیام موفقیت دیدید: یعنی مشکل از دیتابیس نیست و ایراد در تنظیمات یا کدهای خودِ سایت است.
اگر خطا دیدید: مشکل دقیقاً از سمت سرور یا اطلاعات وارد شده است.
$conn = mysqli_connect("localhost", "DB_USER", "DB_PASSWORD", "DB_NAME");
if (!$conn) {
die("خطای اتصال: " . mysqli_connect_error());
}
echo "اتصال با موفقیت برقرار شد!";
۶.بررسی لاگهای خطا (Error Logs)
سایتهای غیروردپرسی معمولاً پیام خطای واضحی به کاربر نشان نمیدهند (برای امنیت بیشتر). برای دیدن دلیل اصلی خطا:
* اگر از Apache/Nginx استفاده میکنید، فایل error_log را در مدیریت فایل چک کنید.
* اگر فریمورک دارید (مثل لاراول)، به پوشه storage/logs/laravel.log بروید. در آنجا دقیقاً نوشته شده که کدام بخش کد به دیتابیس متصل نمیشود.
راهکارهای عمومی برای همه سایتها
اگر اطلاعات اتصال درست است اما همچنان خطا دارید:
* کاربر دیتابیس را دوباره متصل کنید: در پنل هاست، به بخش MySQL Users بروید و مطمئن شوید که کاربر (User) به دیتابیس (Database) اضافه شده و تمامی دسترسیها (All Privileges) به او داده شده است.
* کش سرور یا CDN را پاک کنید: گاهی اوقات خطای قدیمی در حافظه کش باقی میماند. اگر از CDN استفاده میکنید، آن را موقتاً غیرفعال کنید.
* بررسی سلامت دیتابیس: از ابزار `Repair Database` در پنل هاست استفاده کنید تا اگر در حین انتقال جدولی آسیب دیده، تعمیر شود.
سخن آخر
همانطور که بررسی کردیم، برای رفع خطای دیتابیس (error establishing a database connection) در سایتهای وردپرسی، تمرکز اصلی بر تنظیمات فایل wp-config.php و دسترسیهای کاربر است، در حالی که در سایتهای اختصاصی، باید دقت بیشتری بر فایلهای پیکربندی محیطی (.env)، سازگاری نسخههای دیتابیس و لاگهای سرور داشت.
اما چرا این مسیر گاهی پیچیده میشود؟
در بسیاری از مواقع، مشکل فراتر از یک تغییر ساده در فایلهاست؛ مسائلی مانند عدم بهینهسازی دیتابیس برای سرور جدید، ناسازگاری ورژنهای MySQL، یا حتی محدودیتهای دسترسی در سرورهای ابری، میتوانند ساعتها وقت تیم فنی شما را بگیرند.
راهکار هوشمندانه چیست؟
اگر دغدغه شما پایداری سایت و سرعت انتقال بدون قطعی است، سپردن این مسئولیت به متخصصین مدیریت سرور نه تنها هزینهها را کاهش میدهد، بلکه خیالتان را از بابت امنیت و عملکرد فنی راحت میکند. ما در [نام برند/سایت شما] با تکیه بر تجربه در حوزه راهکارهای ابری و خدمات تخصصی مدیریت سرور، در کنار شما هستیم تا بدون دغدغههای فنی، بر رشد کسبوکار خود تمرکز کنید.
آیا برای انتقال سایت خود نیاز به کمک دارید؟
همین حالا میتوانید برای دریافت مشاوره فنی با تیم ما تماس بگیرید یا از سرویسهای مدیریت سرور ما دیدن کنید تا انتقال سایت شما را با تضمین پایداری و امنیت انجام دهیم.