رفع خطای Error Establishing a Database Connection در وردپرس
اگر تاکنون وبگردی کرده باشید حداقل چندین بار با این خطا برخورد کردهاید. Error Establishing a Database Connection از جمله خطاهایی است که میتواند دلایل زیادی داشته باشد. این خطا ممکن است افرادی که در وردپرس مبتدی هستند را بسیار آشفته بسازد مخصوصا زمانی که این خطا بدون اینکه کاربر تغییری ایجاد کرده باشد اتفاق میافتد. دیروز ما همین مشکل را بر روی سایت خودمان داشتیم. تشخیص و رفع این مشکل کمی بیش از 20 دقیقه به طول انجامید. وقتی برای یافتن دلایل وقوع این خطا به تحقیق پرداختیم متوجه شدیم، مقاله خوبی که همه چیز را در این زمینه پوشش داده باشد وجود ندارد. ما در این مقاله به شما نشان میدهیم که چگونه مشکل Error Establishing a Database Connection را در وردپرس رفع کرده و لیستی از مجموعه راهکارهای مناسب برای مقابله با آن را به شما ارائه میدهیم.
نکته: قبل از ایجاد هر گونه تغییرات در دیتابیس، مطمئن شوید که بکآپ کافی از آن را در اختیار دارید.
چرا این خطا رخ میدهد؟
به طور خلاصه، شما این خطا را دریافت میکنید چون وردپرس قادر به برقراری ارتباط با دیتابیس نیست. این که چرا وردپرس نمیتواند به دیتابیس متصل شود میتواند دلایل بسیاری داشته باشد. ممکن است اعتبارنامه(credential) شما برای ورود به دیتابیس اشتباه بوده یا تغییر کرده باشد. ممکن است اشکال از عدم پاسخگویی سرور دیتابیس شما باشد. ممکن است دیتابیس خراب شده یا با اختلال روبرو باشد. تجربه نشان میدهد اکثر مواقع دلیل بروز این خطا، نوعی خطای سرور است، البته فاکتورهای دیگری نیز ممکن است باعث وقوع آن شده باشند. حال ببینیم چگونه میتوان این مشکل را عیبیابی کنیم.
آیا این مشکل برای / wp-admin / نیز اتفاق میافتد؟
اولین چیزی که باید از آن اطمینان پیدا کنید این است که آیا این خطا در هر دو بخش(wp-admin) back-end و نرمافزار نهایی سایت front-end رخ داده است یا خیر. اگر پیغام خطا در هر دو این صفحات یکسان بوده و ‘Error establishing a database connection’ را نشان میدهد، به مرحله بعدی میرویم. در صورتی که بر روی wp-admin خطای متفاوتی همچون ‘one or more database tables are unavailable. The database may need to be repaired’ اتفاق افتاده باشد باید دیتابیس خود را تعمیر کنید.
شما میتوانید این کار را با اضافه کردن خط زیر در فایل wp-config.php انجام دهید. این کد را درست قبل از خط ‘that’s all, stop editing! Happy blogging’ در فایل wp-config.php اضافه کنید.
define('WP_ALLOW_REPAIR', true);
بعد از انجام این کار، شما میتوانید با مشاهده این صفحه تنظیمات را ببینید: http://www.yoursite.com/tadmin/maint/repair.php
به خاطر داشته باشید که وقتی این تعریف تنظیم شد، کاربر برای دسترسی به این کارکرد نیازی به ورود(login) ندارد. از آنجا که هدف اصلی این صفحه تعمیر دیتابیس خراب است، وقتی دیتابیس خراب باشد؛ اغلب، کاربر نمیتواند وارد بخش مدیریت شود. بنابراین وقتی کار تعمیر و بهینه سازی دیتابیس خود را پایان دادید مطمئن شوید که آن را از فایل wp-config.php خود برداشتهاید.
اگر با این کار مشکل شما رفع نشد، یا در هنگام تعمیر با مشکل مواجه شدید در ادامه این مقاله با ما همراه باشید چرا که ممکن است راه حل دیگری برای رفع مشکلتان یافته و این بار خطا را برطرف کند.
چک کردن فایل wp-config
Wp-config مهمترین فایل در کل روند نصب وردپرس شما است. شما در این فایل جزئیات را برای اتصال وردپرس به دیتابیس مشخص میکنید. اگر شما پسورد root یا پسورد کاربر دیتابیس خود را تغییر دادهاید باید این فایل را نیز تغییر بدهید. اولین موردی که همیشه باید چک کنید این است که آیا در فایل wp-config.php شما همه چیز صحیح است یا خیر.
define('DB_NAME', 'database-name'); define('DB_USER', 'database-username'); define('DB_PASSWORD', 'database-password'); define('DB_HOST', 'localhost');
به یاد داشته باشید که مقدار DB_Host شما ممکن است همیشه localhost نباشد. بلکه این مقدار با توجه به میزبان، متفاوت خواهد بود. در اکثر میزبانهای محبوب این مقدار، localhost است. مقادیر سایر میزبانها را میتوانید از شرکت سرویسدهنده خود بپرسید.
پیشنهاد برخی برای رفع این مشکل، جایگزین کردن localhost با IP است. معمولا در هنگام اجرای وردپرس بر روی یک محیط سرور محلی، چنین مسائلی پیش میآید. برای مثال، بر روی MAMP، تغییر مقدار DB_Host به IP ممکن است باعث رفع مشکل شود.
define('DB_HOST', '127.0.0.1:8889');
ممکن است IPها برای سرویسهای آنلاین میزبانی وب متفاوت باشد.
اگر همه چیز در این فایل صحیح باشد (ورودی ها را نیز چک کنید)، میتوان گفت مشکل سمت سرور است.
چک کردن میزبان وب (سرور MySQL)
اغلب وقتی ترافیک انبوه در سایت شما موجب اشکال در برنامه شود شما خطای error establishing a database connection را مشاهده میکنید. اساسا، سرور میزبان شما نمیتواند این بار را (مخصوصا زمانی که شما هاست اشتراکی دارید) تحمل کند. به این ترتیب سایت شما بسیار کند عمل میکند و حتی برخی کاربران با خطا مواجه میشوند. بنابراین بهترین کاری که شما میتوانید انجام دهید این است که با ارائه دهنده میزبانی خود تلفنی تماس گرفته یا به صورت زنده چت کرده و از آنها بپرسید که آیا سرور MySQL پاسخگو هست یا خیر.
کاربرانی که میخواهند عملکرد سرور MySQL را خود، تست کنند میتوانند چند کار انجام دهند. سایتهای دیگر را بر روی همان سرور تست کنید و ببینید که آیا آنها نیز مشکل دارند یا خیر. اگر آنها نیز همان خطا را نشان دادند، مطمئنا سرور MySQL شما دارای مشکل است. اگر شما هیچ سایت دیگری بر روی همان اکانت میزبانی ندارید، خیلی ساده به cPanel خود رفته، سعی کنید به phpMyAdmin دسترسی پیدا کرده و به دیتابیس متصل شوید. اگر توانستید متصل شوید آنگاه ما باید ببینیم که آیا کاربر دیتابیس شما مجوز کافی را دارد یا خیر. یک فایل جدید با نام testconnection.php ایجاد کنید و کد زیر را در آن paste کنید:
<?php $link = mysql_connect('localhost', 'root', 'password'); if (!$link) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully'; mysql_close($link); ?>
از تعویض یوزرنیم و پسورد مطمئن شوید. اگر با موفقیت اتصال برقرار شد به این معنی است که کاربر شما از مجوز کافی برخوردار است و اشکال کار از جای دیگری است. به فایل wp-config بازگردید و مطمئن شوید که همه چیز در آن صحیح است (دوباره ورودیها را چک کنید).
اگر با رفتن به phpMyAdmin نتوانستید به دیتابیس متصل شوید، آنگاه متوجه میشوید که مشکل از سرور شماست. این امر لزوما به این معنی نیست که سرور MySQL شما کار نمیکند. ممکن است به این معنی باشد که کاربر شما از اختیارات کافی برخوردار نیست.
در مورد سایت ما، سرور MySQL بخوبی در حال اجرا بود. تمامی سایتها به جز سایت ما بر روی سرور کار میکرد. وقتی ما ورود به phpMyAdmin خود را امتحان کردیم این خطا را دریافت کردیم:
#1045 – Access denied for user ‘foo’@’%’ (using password: YES)
ما از طریق تلفن با میزبان تماس گرفتیم و پشتیبانی به سرعت مشکل را فهمید. مجوز کاربری ما دوباره تنظیم شده بود. مطمئن نبودیم که چگونه این اتفاق افتاده است اما اینطور به نظر میرسید که ریشه مشکل از آنجا بوده است. آنها مجوزها را دوباره ذخیره کردند و به این ترتیب ما توانستیم سایت را دوباره زنده کنیم.
بنابراین اگر در هنگام اتصال به phpMyAdmin یا در نتایج testconnection.php خطای عدم دسترسی را دریافت کردید باید با میزبان خود تماس بگیرید تا مشکل را برطرف کنند.
راهکارهایی که برای دیگران مفید بودهاند
توجه داشته باشید که ممکن است این راهکارها برای شما جواب ندهند. در واقع استفاده از این روشها با ریسک همراه بوده و قبل از انجام هر کاری اول مطمئن شوید که بکآپ کافی در اختیار دارید.
– من خطای database needs to be repaired را دریافت کردم. حتی بعد از تعمیر دیتابیس این خطا همچنان پابرجا بود و از بین نرفت. من چیزهای زیادی را امتحان کردم و در نهایت، مشکل از url سایت بود. ظاهرا url تغییر کرده بود و باعث ماندگاری خطا شده بود. من کوئری SQL را با رفتن به phpMyAdmin اجرا کردم:
UPDATE wp_options SET option_value='YOUR_SITE_URL' WHERE option_name='siteurl'
مطمئن شوید که YOUR_SITE_URL را همچون این مثال با URL واقعی تعویض کنید:
اگر پیشوند پیشفرض دیتابیس وردپرس را تغییر دادهاید، wp-options متفاوت خواهد بود.
گویا این روش باعث حل مشکل برخی از کاربران گشته است.
– من میتوانستم با testconnection.php به دیتابیس متصل شوم. بنابراین کاربر wp-config.php را به کاربر root تغییر دادم. وردپرس خیلی عالی شروع به کار کرد. سپس تنظیمات را به وضعیت طبیعی database-user برگرداندم و وردپرس به کار خود ادامه داد. من نتوانستم بفهمم مشکل از کجا بود اما اینطور نتیجه گرفتم که پای یک خطای تایپی در میان بوده است.
کاربر دیگری نیز پیشنهاد کرده که محتوای active-plugins را در جدول wp-options حذف کرده و محتوای recently-edited را ویرایش کنید. به نظر میرسد که این کار مشکل را رفع کند.
ما در منابع بیشماری خواندهایم که کاربران خیلی ساده با آپلود یک کپی تازه از وردپرس توانستهاند این خطا را برطرف کنند.
این خطا واقعا آزاردهنده است. شما از چه روشی برای رفع مشکل خود استفاده کردهاید؟ لطفا ایده خود را با ما در میان بگذارید و به دیگران این امکان را بدهید تا از راه حل شما بهره برده و زمان زیادی را صرف پیدا کردن راهکار برای رفع این خطا نکنند.
با سلام ، ممنون از مطالبتون ، من با این خطا در حین کار مواجه شدم و چند دقیقه بعد درست میشد . ولی از روی حدس و تجربه مشخص بود
از سمت سرور میزبان باشه ،
به هر حال با تشکر
خوشحالیم که مشکل مرتفع شده