استارت نشدن سرویس MySQL در سرور لینوکس
سرویس پایگاه داده و دیتابیس MySQL یکی از بزرگ ترین و محبوب ترین سرویس های متن باز (نسخه Enterprise هم ارائه میکند) و رایگان تحت لینوکس ، یونیکس ، انواع BSD ها ، ویندوز و … است . تقریبا تمام کنترل پنل های هاستینگ معروف و حتی شناخته نشده تحت لینوکس ، از این سرویس قدرتمند به عنوان سیستم پیش فرض ارائه دیتابیس به یوزر های هاست استفاده میکنند . یکی از بد قلق ترین و سخت ترین ایرادات مشاهده شده در سرویس MySQL در سرور های هاستینگ لینوکس مشکل استارت نشدن سرویس MySQL است .
استارت نشدن سرویس MySQL
مشکل استارت نشدن سرویس MySQL در تمام سرور های هاستینگ لینوکس و به خصوص در سرور های مبتنی بر کنترل پنل های معروف سی پنل و دایرکت ادمین بسیار شایع است . پیام هایی خطایی که در هنگام اجرای دستور استارت سرویس MySQL در خروجی ترمینال مشاهده میشود متفاوت است و معمولا بسته به نوع کامپایل کردن MySQL ، ورژن MySQL مورد استفاده در لینوکس ، توزیع لینوکس ، کنترل پنل وب هاستینگ و … پیام خطای خروجی در ترمینال نیز متفاوت است .
برخی از خطا ها و ارور های عدم اجرا شدن سرویس MySQL در لینوکس عبارتند از :
Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock
Starting MySQL. ERROR! Manager of pid-file quit without updating file
Starting MySQL.Manager of pid-file quit without updating file FAILED
MySQL Daemon failed to start
Another MySQL daemon already running with the same unix socket
ERROR 2003 (HY000): Can’t connect to MySQL server on 127.0.0.1
MySQL is not running, but lock exists FAILED
MySQL manager or server PID file could not be found
MySQL is running but PID file could not be found FAILED
Starting MySQL../etc/init.d/mysqld: line 159: kill: (9188) – No such process ERROR
استارت نشدن سرویس MySQL در لینوکس یکی از پیچیده ترین و سخت ترین ارور های لینوکس است که تریس کردن و رفع آن گاهی به ساعت ها زمان نیاز دارد . در این مقاله فقط به دلایل کلی بروز این خطا و عدم استارت سرویس MySQL میپردازیم ، چرا که در مواردی هر یک از دلایل خود نیاز مند نوشتن چند صفحه مجزا خواهد بود .
وجود خطا در فایل my.cnf
در اولین قدم ، محتویات مربوط به فایل my.cnf را بررسی کنید . اگر تعداد خط ها و مقادیر وارد شده در این فایل زیاد هستند ، با دستور زیر فایل رو موقتا تغییر نام داده و سرویس MySQL را ریستارت کنید :
mv /etc/my.cnf /etc/my.cnf.dis
service mysqld restart
در سرور های سی پنل برای رییستارت کردن سرویس MySQL دستور زیر را اجرا کنید :
service mysql restart
در توزیع های لینوکس (بدون کنترل پنل وب هاستینگ) اوبونتو و دبیان نیز برای ویرایش فایل my.cnf مطابق زیر عمل کنید :
vi /etc/mysql/my.cnf
در صورتی که بعد از تغییر نام (و خارج کردن این فایل از دسترس سرویس MySQL) سرویس پایگاه داده MySQL بدون مشاهده ارور خاضی استارت شد ، پس مشکل را باید در syntax یا مقدار دهی غلط به پارامتر های تاثیر گذار بر MySQL جستجو کرد .
خراب شدن یا Corrupt شدن جداول
این مشکل بیشتر در جدول های Innodb مشاهده میشود ولی در به طور کلی برای جداول Myisam نیز صادق است . در این وضعیت باید بسته به نوع جدول و دلایل Crash کردن دیتابیس ، به رفع مشکل بپردازید .
استارت همزمان چند سرویس MySQL
در حالت عادی ِ، با اجرای دستور service mysqld start اگر سرویس MySQL از قبل اجرا شده باشد ، با یک پیام خطا مبنی بر run بودن سرویس دریافت خواهید کرد . در شرایط خاص ، پیش می آید که چند نسخه یا Instance از این سرویس در حال اجرا باشد که خود سبب ایجاد اختلال در کار MySQL میگرردد . در این وضعیت ممکن است شما هرگز متوجه اجرای همزمان چند سرویس همزمان نشوید و حتی با اجرای دستور service mysqld start یکی از پیام های خطای مربوط به استارت نشدن سرویس MySQL در سرور لینوکس را دریافت کنید . در این وضعیت بهترین کار KILL کردن پراسس های مربوط به سرویس MySQL است .
killall -9 mysql
killall -9 mysqld
killall -9 mysql_safe
service mysqld start OR service mysqld start
استفاده یک daemon دیگر از سوکت MySQL
در این حالت کار سختی پیش روی شما نیست . کافی است تا فایل سوکت مربوط به سرویس MySQL را پاک کرده و سپس سرویس MySQL را استارت کنید :
rm /var/lib/mysql/mysql.sock
service mysqld start OR service mysqld start
قفل شدن MySQL در لینوکس
در مواقع خاص و نادر ، سرویس MySQL استاپ میشود ولی فایل مربوط به Lock یا قفل شدن سرویس MySQL از دایرکتوری مربوطه در لینوکس حذف نمیگردد . در این حالت پیام خطای روی خروجی ترمینال شبیه این خواهد بود :
mysql is dead but subsys locked
برای حل این مشکل کافی است تا فایل مربوط به lock شدن mysql را حذف کنید و مجددا اقدام به استارت کردن سرویس MySQL کنید :
rm /var/lock/subsys/mysqld
service mysqld start OR service mysql start
همانطور که بالاتر نیز به آن اشاره کردیم ، عدم استارت سرویس MySQL در برخی موارد بسیار پیچیده و گیج کننده خواهد بود و رفع آن همیشه به استناد به موارد آموزش داده شده امکان پذیر نیست . عوامل بسیار زیاد دیگری نیز میتوانند سبب استارت نشدن سرویس MySQL روی سرور لینوکس شوند که فقط با Trace کردن کامل و حرفه ای سرور لینوکس امکان رفع این ایراد میسر خواهد بود . در صورت بروز این مشکل در سرور های لینوکس خود ، حتما حل مشکل را به دست یک فرد با تجربه بسپارید ، چرا که در صورت انجام یک اشتباه ساده ، امکان آسیب دیدن جدی جدول های دیتابیس وجود خواهد داشت .