مطابق پست منتشر شده توسط Ayesh Karunaratne مشکلی در رابطه با mysql در نسخه ی جدید php 7.4 برطرف شده است. در این پست او توضیح داده است که PHP 7.4 در واقع از افزونه ی جدید و پیشفرض رمز ورود در MYSQL پشتیبانی می کند. اگر شما سعی داشته اید تا برنامه ی لاراولی خود را برای استفاده از MySQL 8 به روز کنید ممکن است به خطای زیر برخورده کرده باشید و این خطا باعث درگیری در ذهن شما شده باشد:
SQLSTATE[HY000] [2006] MySQL server has gone away
در توضیحات رسمی PHP در این رابطه توضیح داده شده است:
وقتی از نسخه های PHP قبل از 7.1.16 و یا php 7.2 قبل از نسخه 7.2.4 استفاده می کنید ،می بایست افزونه رمز عبور پیشفرض MySQL (MySQL 8 Server’s default password plugin) را روی mysql_native_password تنظیم کنید در غیر اینصورت خطایی مشابه "The server requested authentication method unknown to the client [caching_sha2_password]" به شما نمایش داده می شود. حتی اگر caching_sha2_password استفاده نشده باشد!.
این خطا به این دلیل رخ می دهد که به صورت پیش فرض caching_sha2_password در MySQL 8 به عنوان یک پلاگین است که در نسخه های قدیمی تر PHP پشتیبانی نمی شود (mysqlnd). در عوض باید در تنظیمات آن را به شکل default_authentication_plugin=mysql_native_password در فایل my.cnf تغییر بدهید.پلاگین caching_sha2_password به شکل پیش فرض در نسخه های جدیدتر php پشتیبانی می شود. ضمنا افزونه ی mysql_xdevap از آن پشتیبانی می کند.
در نسخه php 7.4 از تایید اعتبار caching_sha2_password پشتیبانی می کند ،اما اگر کاربر پایگاه داده شما از افزونه پیشفرض جدید استفاده نمی کند ،ممکن است با خطای فوق مواجه شوید. البته در آدرس زیر می توانید اطلاعات بیشتری در رابطه با حل این خطا را مشاهده کنید.
برای توضیحات بیشتر در رابطه با روش رفع کلیک کنید.
با این وجود اگر شما از نسخه های قدیمی تر PHP استفاده می کنید مراحل زیر را برای کار کردن PDO در MySQL 8 دنبال کنید:
ابتدا باید مسیر های پیکربندی MySQL را پیدا کنیم. ما می توانیم با اجرای دستور –help این کار را انجام بدهید. این دستور اطلاعات زیادی را برمی گرداند ،اما ما به دنبال مواردی مانند زیر هستیم:
mysql --help
...
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
مسیرهای برگشتی از خط فرمان را دنبال کنید و مقادیر زیر را با مسیری که در MySQL دریافت می کنید بررسی کنید:
ls -la \
/etc/my.cnf \
/etc/mysql/my.cnf \
/usr/local/etc/my.cnf \
~/.my.cnf
ls: /etc/my.cnf: No such file or directory
ls: /etc/mysql/my.cnf: No such file or directory
-rw-r--r-- 1 paul staff 61 Dec 5 19:40 /Users/paul/.my.cnf
-rw-r--r-- 1 paul admin 113 Oct 28 2017 /usr/local/etc/my.cnf
حالا می خواهیم فایل را از ~/.my.cnf ویرایش کنیم که اگر قبلا این کار را انجام نداده باشید ممکن این فایل وجود نداشته باشد ،اگر فایل وجود نداشت بایستی آن را ایجاد کنیم.
پیشنهاد می کنیم از مسیر ~/.my.cnf برای ایجاد فایل استفاده کنید. اما اگر هر مسیر دیگری را تعیین می کنید باید موارد زیر را اضافه کنید:
[mysqld]
default_authentication_plugin=mysql_native_password
اگر از Homebrew استفاده می کنید و میخواهید پرونده /usr/local/etc/my.cnf را به روز رسانی کنید باستی موارد زیر را در انتهای پرونده و در زیر گزینه [mysqld] اضافه کنید:
# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
default_authentication_plugin=mysql_native_password
و در انتها شما باید با استفاده از هر روش متناسب با سیستم خود MySQL را مجددا راه اندازی کنید. اگر از Homebrew در مک استفاده می کنید می توانید از دستور زیر استفاده کنید:
brew services restart mysql
اگر از داکر (Docker) استفاده می کنید ،در زیر مثال هایی برای تنظیمات Docker Compose برای کار با MySQL 8 برای کار با لاراول و سایر پروژه های PHP را قرار داده ایم:
services:
# ...
mysql:
image: mysql:8.0
# PDO Doesn't support MySQL 8 caching_sha2_password Authentication
# @see https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password
command: --default-authentication-plugin=mysql_native_password
ports:
- 13306:3306
volumes:
- mysql:/var/lib/mysql
environment:
MYSQL_DATABASE: my_database
MYSQL_ROOT_PASSWORD: root
volumes:
mysql:
driver: "local"
با این تغییرات باید بتوانید از برنامه های PHP به MySQL متصل شوید!
نظر شما چیست؟ شما می توانید نظرات ،پیشنهادات و اطلاعات خود را در رابطه با این مطلب و موضوعات مربوط از طریق قسمت نظرات با ما و سایر بازدیدکنندگان در میان بگذارید.