درحال بارگذاری

برطرف شدن خطای از دست رفتن سرور mysql در لاراول و mysql نسخه 8

تاریخ: شنبه, 16 آذر 1398

نویسنده: مصطفی دربان حسینی... بازیدها: 911 - نظرات : 0 دسته بندی: برنامه نویسی


مطابق پست منتشر شده توسط  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 متصل شوید!

  نظر شما چیست؟ شما می توانید نظرات ،پیشنهادات و اطلاعات خود را در رابطه با این مطلب و موضوعات مربوط از طریق قسمت نظرات با ما و سایر بازدیدکنندگان در میان بگذارید.


نویسنده: مصطفی دربان حسینی... بازیدها: 911 - نظرات : 0 دسته بندی: برنامه نویسی

جستجو
کلاس برتر
ارائه دهنده بهترین و به روز ترین ویدیو های و مقالات آموزشی و همچنین مقالات مختلف در رابطه با تکنولوژی ،معماری ،مدیریت و سایر رشته های کاربردی.ما برای شما بهترین ها را میخواهیم.

سایر خدمات مجموعهخدمات زیر تحت مدیریت برد تخصصی ارائه می شود.
طراحی وب سایت
راه اندازی و پشتیبانی شبکه
هوشمند سازی منازل
افزایش کارایی نیرو انسانی
تعمیرات دستگاه های الکترونیکی
طراحی داخلی
تبلیغات فضای مجازی
برنامه نویسی