خطای دسترسی به دیتابیس در لاراول [Access denied for user]
در این آموزش قصد داریم مواردی که منجر به دریافت خطای
Access denied for user ‘root’@’localhost’ (using password: YES)
در لاراول می شود را بررسی کنیم و راه های رفع این ارور را مرور کنیم .
بعد از اینکه شما لاراول را به درستی روی هاست راه اندازی کردید (آموزش نصب لاراول در هاست) صفحه اول و پیش فرض لاراول برای شما نمایش داده می شود.
باید حتما نمایش فایل های مخفی hidden از قسمت setting فعال باشد تا بتوانید فایل env. رو مشاهده و ویرایش کنید.
در صورتی که فایل env. شما در دسترس نباشد و یا به اشتباه تغییر نام داده باشد و یا حذف شده باشد، ارور 500 Server Error نمایش داده می شود.
اگر احیانا به هر دلیلی فایل env. در فولدر پروژه شما وجود نداشت، می توانید از خود سی پنل فایلی به همین نام ایجاد کنید و محتویات فایل env.example. را که در فولدر پروژه قرار دارد را کپی کنید و در فایل جدید که ساختید paste و ذخیره کنید .
بررسی خطا و راه حل رفع مشکل :
متن ارور :Access denied for user ‘root’@’localhost’ (using password: YES)
فایل env. موجود در فولدر پروژه لاراولی خود را در فایل منیجر سی پنل با کلیک بر روی گزینه edit باز می کنیم.
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=database_name DB_USERNAME=database_user DB_PASSWORD=database_password
* database_name نام دیتابیس شما می باشد.
* database_user نام یورزی که تعریف شده است و به دیتابیس دسترسی داده شده است.
*database_password پسورد دیتابیس می باشد.
اقداماتی که باید انجام شود :
1- آیا یوزر و دیتابیسی که در تنظیمات وارد شده است وجود دارند؟
حتما در بخش دیتابیس سی پنل نام یوزر و نام دیتابیس در هر بار ، کپی و در صفحه تنظیمات با دکمه ctrl+f سرچ شود. ممکن است یک حرف و نام دیتابیس اشتباه تایپ شده باشد و یا غلط املایی وجود داشته باشد.
نام یوزر و دیتابیس به حروف کوچک و بزرگ حساس است و باید به همان صورت که بخش دیتابیس سی پنل تعریف شده است وارد شود.
2- توجه داشته باشید گاهی ممکن است نام دیتابیس و نام یوزر جابجا وارد شده باشد . دقت داشته باشید که هر مقدار در قسمت مربوط به خودش وارد شده باشد.
3-مورد دیگر که در دیتابیس سی پنل باید بررسی شود اد شدن یوزر و دیتابیس به هم و دادن دسترسی ها دیتابیس به یوزر می باشد.
در صورتی که این کار انجام نشود، یوزر تعریف شده در تنظیمات به دیتابیس دسترسی نخواهد داشت.
4- استفاده از کاراکتر های خاص مثل @#$%^%&* در پسورد دیتابیس ممکن است باعث اختلال و عدم اتصال به دیتابیس شود، در صورتی که از این کاراکترها استفاده شده در پسورد حذف و مجدد پسورد را در سی پنل، برای یوزر تعریف شده تغییر می دهیم و ذخیره می کنیم.
5- در فایل env. در حالت پبش فرض، از دابل کوتیشن و یا سینگل کوتیشن استفاده نشده است. برای اینکه بتوانیم از کاراکترهای خاص در پسورد استفاده کنیم باید پسورد را داخل کوتیشن قرار دهیم. به طور مثال اگر پسورد شما توسط خود سی پنل جنریت شده باشد، باید حتما داخل کوتیشن (‘ ‘) وارد کنید .
... DB_PASSWORD='@#$password@#$4r46436' ...
پیش فرض تنظیمات دیتابیس mysql به صورت زیر است که بر روی لوکال به درستی کار می کند یعنی یوزرنیم root می باشد و پسورد خالی هست اما برای استفاده بر روی هاست، باید مقادیر نام دیتابیس، یوزر دیتابیس و پسورد دیتابیس بعد از ساخته شدن در سی پنل در این قسمت وارد شود:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=
اگر هنوز هیچ دیتابیسی روی هاست شما ساخته نشده است می توانید با استفاده از آموزش “ آموزش ساخت دیتابیس mysql” دیتابیس جدیدی بسازید و مقادیر مورد نیاز رو در فایل env. وارد کنید.
بعد از اینکه ارور بالا را رفع کردید ممکن است با ارور زیر رو مواجه شوید :
[PDOException] SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
در آموزش رفع ارور Specified key was too long هنگام migrate لاراول ، دقیقا راه حل رفع این مشکل با تصویر توضیح داده شده است .
ممکن است شما همه موارد رو تصحیح کرده باشید و اطلاعات رو به درستی وارد کرده باشید اما همچنان ارور داشته باشید و ارور شما رفع نشده باشد .
در اینصورت ،لاراول هنوز از تنظیمات کش شده استفاده می کند و باید کش آن پاک شود.
لاراول به صورت اتوماتیک یک فایل به اسم کانفیگ در مسیر زیر ایجاد می کند
bootstrap/cache/config.php
که تمام تنظیمات blade ها ، ارتباط دیتابیس ، مسیر دهی و … را اینحا ذخیره می کند تا خیلی سریعتر به جای اینکه از چند فایل اطلاعات کانفیگ پروژه را دریافت کند از این فایل استفاده کند.
برای همین ممکن است شما تمام تنظیمات و اطلاعات رو در همه قسمت ها اصلاح کرده باشید اما تغییراتی که ایجاد کردید، اعمال نمی شوند.
برای این کار در ترمینال سی پنل با دستور cd به مسیری که پروژه در آن راه اندازی شده است بروید، دستورات زیر را به ترتیب وارد کنید تا کش لاراول حذف شود و تغییرات جدید شما اعمال شود.
php artisan optimize:clear
php artisan cache:clear
php artisan config:clear
با دستورات بالا کش لاراول پاک می شوند و تغییرات جدید اعمال می شوند اما اگر با وجود این موارد ،اطلاعات هنوز از کش خوانده می شوند می توانید این فایل که در مسیر زیر قرار دارد را حذف کنید .
bootstrap/cache/config.php
با انجام راهنمایی های بالا ، ارور دسترسی به دیتابیس در پروژه لاراولی شما رفع خواهد شد ، چنانچه در هر مرحله ای مشکل و یا ابهامی وجود دارد و یا خطای دیگری مشاهده می کنید، می توانید از پنل کاربری خود متن خطا و یا اسکرین شات خطا به همراه نام دامنه و سرویس به بخش پشتیبانی تیکت ارسال کنید (ارسال تیکت)