
راهنمای جامع رفع خطاهای دیتابیس پس از ارتقا (با تمرکز بر MariaDB 11.4 و مشکل unix_socket)
انتشار نسخههای جدید سیستمعاملهای لینوکسی (مانند Ubuntu, Debian, AlmaLinux) یا بهروزرسانیهای اصلی هسته دیتابیس (مانند MariaDB و MySQL)، همواره با وعده بهبود عملکرد و امنیت همراه است. اما واقعیت این است که این ارتقاها اغلب با “Breaking Changes” یا تغییرات ساختاری همراه هستند که میتوانند منجر به قطعی سرویس و نمایش خطاهای عجیب دیتابیس شوند.
اگر پس از ارتقای سیستمعامل سرور یا آپدیت دیتابیس با خطاهای اتصال روبرو شدهاید، این راهنمای تخصصی از وبلاگ نگارنوین برای شماست. ما در این مقاله، اصول عیبیابی عمومی را بررسی کرده و سپس به صورت خاص، به حل مشکل رایج و کلافهکننده لود نشدن پلاگین unix_socket در MariaDB 11.4 میپردازیم.

چرا ارتقا دیتابیس منجر به خطا میشود؟
سیستمهای مدیریت دیتابیس (DBMS) نرمافزارهای پیچیدهای هستند. هنگام ارتقا، چندین اتفاق ممکن است رخ دهد:
تغییرات کانفیگ فایل (Configuration changes): نسخههای جدید ممکن است پارامترهای قدیمی را حذف کنند یا ساختار فایل
/etc/my.cnfیا/etc/mysql/mariadb.conf.d/را تغییر دهند.پلاگینهای منسوخ شده (Deprecated Plugins): برخی پلاگینها که در نسخههای قبلی پیشفرض بودند، ممکن است در نسخه جدید حذف یا با پلاگینهای دیگر جایگزین شوند.
تغییرات امنیتی (Security hardening): نسخههای جدید اغلب سختگیرانهتر میشوند. روشهای احراز هویت قدیمی یا ساده ممکن است دیگر کار نکنند.
ناسازگاری کتابخانهها (Library mismatch): ارتقای سیستمعامل ممکن است کتابخانههای سیستم (
libc,openssl) را تغییر دهد که دیتابیس به آنها وابسته است.
گامهای طلایی پیش از هرگونه ارتقا
کارشناسان نگارنوین همواره تأکید میکنند که هرگز بدون انجام مراحل زیر، دیتابیس خود را در محیط عملیاتی ارتقا ندهید:
بکاپ کامل و تست شده (Full Backup): نه تنها از دیتابیسها (
mysqldumpیاmariabackup) بلکه از فایلهای کانفیگ (/etc/mysql/) هم بکاپ بگیرید.مطالعه Release Notes: یادداشتهای انتشار نسخه جدید را دقیق بخوانید. به دنبال بخشهای “Breaking Changes” یا “Deprecated Features” بگردید.
تست در محیط Staging: اگر امکان دارد، ابتدا ارتقا را روی یک سرور کپی (Staging) تست کنید.
عیبیابی عمومی دیتابیس پس از ارتقا (General Troubleshooting)
اگر پس از آپدیت، سرویس دیتابیس استارت نمیشود یا کلاینتها نمیتوانند متصل شوند، این مراحل را دنبال کنید:
۱. بررسی وضعیت سرویس
اولین قدم، بررسی وضعیت سرویس است:
# برای MariaDB
systemctl status mariadb
# برای MySQL
systemctl status mysql
اگر سرویس “failed” است، باید دلیل آن را پیدا کنیم.
۲. خواندن لاگهای خطا (The Error Log)
این مهمترین بخش است. سیستمعامل ممکن است فقط بگوید سرویس استارت نشد، اما دلیل اصلی در لاگ دیتابیس است.
# مشاهده آخرین خطاهای دیتابیس (معمولاً در مسیرهای زیر)
tail -f /var/log/mysql/error.log
tail -f /var/log/mariadb/mariadb.log
# یا استفاده از journald اگر لاگ فایل تنظیم نشده است
journalctl -u mariadb --since "۱ hour ago"
به دنبال عباراتی مانند [ERROR], [FATAL] و کدهای خطای عددی بگردید. رفع خطای دیتابیس پس از ارتقا
۳. اجرای mysql_upgrade (در نسخههای قدیمیتر)
در نسخههای قدیمیتر MariaDB (قبل از ۱۰.۴) و MySQL، پس از هر آپدیت باینری، باید دستور زیر را اجرا میکردید تا ساختار تیبلهای سیستمی (مثل mysql.user) را با نسخه جدید هماهنگ کند:
mysql_upgrade -u root -p
نکته مهم: در نسخههای جدید MariaDB (مانند ۱۱.۴)، این فرآیند اغلب به صورت خودکار توسط پکیج منیجر (apt یا yum) انجام میشود، اما در صورت لزوم میتوانید آن را به صورت دستی هم اجرا کنید (گاهی اوقات با فلگ --force).
راهنمای عملی رفع خطای خاص: پلاگین unix_socket در MariaDB 11.4
این یکی از رایجترین مشکلات پس از ارتقای MariaDB به نسخههای اخیر (مانند ۱۱.۴) است. این مشکل معمولاً به این صورت ظاهر میشود که اگر بخواهید به عنوان کاربر root سیستم و بدون رمز عبور به MariaDB متصل شوید، خطای زیر را دریافت میکنید:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
یا در لاگها خطایی مشابه این میبینید:
[ERROR] Plugin 'unix_socket' is not loaded
چرا این اتفاق میافتد؟
در MariaDB، پلاگین unix_socket اجازه میدهد که کاربر لینوکس (مثلاً root) بتواند مستقیماً و بدون نیاز به وارد کردن پسورد، به عنوان کاربر متناظر دیتابیس (root) متصل شود (احراز هویت بر اساس سوکت سیستمعامل).
در ارتقا به MariaDB 11.4، دو دلیل اصلی برای این خطا وجود دارد:
پلاگین به طور پیشفرض دیگر فعال نیست: در برخی کانفیگهای جدید، این پلاگین به صورت خودکار لود نمیشود.
کاربر root به صورت اشتباه تنظیم شده است: ممکن است کاربر root دیتابیس طوری تنظیم شده باشد که انتظار پسورد داشته باشد، در حالی که شما میخواهید از سوکت استفاده کنید.
راهحلهای عملی
راهحل اول: فعالسازی پلاگین در کانفیگ و اصلاح کاربر (توصیه شده)
این روش امنترین و استانداردترین راهحل است.
۱. فایل کانفیگ را ویرایش کنید. فایل تنظیمات سرور را پیدا کنید (معمولاً در /etc/mysql/mariadb.conf.d/50-server.cnf در دبیان/ابونتو یا /etc/my.cnf.d/mariadb-server.cnf در ردهت/آلما لینوکس).
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
۲. لود شدن پلاگین را اجبار کنید. در بخش [mariadb] (یا [mysqld]) این خط را اضافه کنید:
[mariadb]
plugin_load_add = auth_socket
۳. سرویس را ریاستارت کنید.
sudo systemctl restart mariadb
۴. (اگر همچنان خطا داشتید) احراز هویت کاربر root را اصلاح کنید. شاید کاربر root به اشتباه برای استفاده از پسورد تنظیم شده باشد. با استفاده از کاربری که دسترسی دارد (مثلاً اگر میتوانید با پسورد متصل شوید) یا با روشهای ریکاوری پسورد (در ادامه توضیح داده شده)، متصل شوید و این دستور SQL را اجرا کنید:
-- برای MariaDB
ALTER USER 'root'@'localhost' IDENTIFIED VIA unix_socket;
-- برای MySQL (اگر نسخه جدید است)
-- ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket;
راهحل دوم: غیرفعالسازی unix_socket و استفاده از پسورد
اگر ترجیح میدهید کاربر root سیستم برای اتصال پسورد وارد کند، این روش را دنبال کنید.
۱. با دسترسی root سیستم متصل شوید.
۲. احراز هویت را تغییر دهید. دستور SQL زیر را اجرا کنید تا کاربر root به جای سوکت، از پسورد استاندارد استفاده کند:
-- این دستور هم unix_socket را غیرفعال میکند و هم پسورد جدید ست میکند
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD 'رمز_عبور_بسیار_قوی';
FLUSH PRIVILEGES;
بدترین سناریو: دسترسی root دیتابیس را ندارم
اگر پس از ارتقا، هیچ پسوردی کار نمیکند و unix_socket هم غیرفعال است، باید دیتابیس را بدون لود کردن تیبلهای دسترسی استارت کنید:
۱. سرویس را استاپ کنید:
sudo systemctl stop mariadb
۲. سرویس را به صورت دستی و بدون امنیت استارت کنید:
sudo mysqld_safe --skip-grant-tables --skip-networking &
۳. بدون رمز متصل شوید:
mysql -u root
۴. اکنون یکی از دستورات ALTER USER در بخش قبلی را اجرا کنید تا احراز هویت root را اصلاح کنید (توصیه میشود از IDENTIFIED VIA unix_socket استفاده کنید).
۵. فرآیندهای پسزمینه را بکشید و سرویس اصلی را ریاستارت کنید:
# پیدا کردن PID فرآیند mysqld_safe
ps aux | grep mysqld
# کشتن فرآیند (جایگزین کردن PID واقعی)
sudo kill [PID]
# استارت عادی سرویس
sudo systemctl start mariadb
در نهایت می توان گفت که برای راهنمای جامع رفع خطاهای دیتابیس پس از ارتقا
ارتقای دیتابیس همیشه با ریسک همراه است، اما با آمادگی (بکاپ) و دانش عیبیابی، میتوانید هر مشکلی را حل کنید. خطای unix_socket در MariaDB 11.4 یک تغییر ساختاری است که با اصلاح فایل کانفیگ و یا اصلاح احراز هویت کاربر root به سادگی قابل حل است.
اگر مدیریت سرور و دیتابیس برای شما پیچیده است یا وقت کافی برای کانفیگهای تخصصی ندارید، ما در نگارنوین با ارائه خدمات سرور مجازی (VPS) و سرور اختصاصی با کانفیگ حرفهای و همچنین خدمات مدیریت سرور، در کنار شما هستیم. تیم فنی ما تمام امور مانیتورینگ، آپدیت و عیبیابی زیرساخت شما را بر عهده میگیرد تا شما بر روی کسبوکار خود تمرکز کنید.
همین امروز با کارشناسان نگارنوین تماس بگیرید تا بهترین راهکار ابری و زیرساختی را برای شما طراحی کنند.
