راهنمای ریست کردن پسورد root در MySQL و MariaDB
اگر رمز عبور کاربر root در MySQL یا MariaDB را فراموش کردهاید و به سرور لینوکس دسترسی root یا sudo دارید، میتوانید رمز را از طریق اجرای دستور --skip-grant-tables تغییر دهید. قبل از استفاده از این روش، ابتدا بررسی کنید که آیا واقعا به تغییر رمز نیاز هست یا نه. در MariaDB 10.4 و نسخههای جدیدتر، کاربر root@localhost در نصبهای معمول لینوکس میتواند از unix_socket استفاده کند. در این حالت کاربرroot میتواند بدون رمز وارد MariaDB شود.
اگر هنوز برای اجرای MySQL یا MariaDB سرور مناسبی ندارید، میتوانید از یک سرور مجازی لینوکس با دسترسی SSH استفاده کنید.
پیشنیازها
- دسترسی SSH به سرور
- دسترسی با کاربر
rootیا کاربری که بتواند ازsudoاستفاده کند - دسترسی محلی به سرویس MySQL یا MariaDB
در حالت
--skip-grant-tables بررسی مجوزهای دیتابیس غیرفعال میشود. بنابراین این حالت را فقط برای مدت کوتاهی اجرا کنید و بعد از تغییر رمز، سرویس را دوباره به حالت عادی برگردانید.
مرحله 1: تشخیص MySQL یا MariaDB
ابتدا مشخص کنید روی سرور از MySQL استفاده میکنید یا MariaDB:
mysql --versionاگر خروجی شامل کلمه MariaDB بود، مراحل مربوط به MariaDB را دنبال کنید. اگر خروجی شامل MySQL بود، مراحل MySQL را انجام دهید.
اگر MariaDB دارید، ابتدا sudo را امتحان کنید
در MariaDB 10.4 و نسخههای جدیدتر، کاربر root@localhost در نصبهای معمول لینوکس میتواند از احراز هویت unix_socket استفاده کند. در این حالت لازم نیست رمز root دیتابیس را بدانید.
ابتدا این دستور را اجرا کنید:
sudo mariadbدر بعضی نصبها نام کلاینت mysql است:
sudo mysqlاگر وارد محیط MariaDB شدید، نیازی به اجرای حالت --skip-grant-tables ندارید.
تغییر رمز root در MariaDB
اگر میخواهید root بتواند با رمز عبور وارد MariaDB شود، باید روش احراز هویت این حساب را تغییر دهید.
ALTER USER 'root'@'localhost'
IDENTIFIED VIA mysql_native_password USING PASSWORD('NewStrongPassword');به جای NewStrongPassword رمز مورد نظر خود را قرار دهید.
سپس از محیط MariaDB خارج شوید:
EXIT;پس میتوانید با رمز جدید اتصال را بررسی کنید:
mariadb -u root -pاگر ورود با رمز برای برنامه یا اسکریپتی انجام میشود، بهتر است به جای استفاده از حساب root ، یک کاربر اختصاصی با دسترسی مورد نیاز همان برنامه ایجاد کنید و برای امنیت از کاربر root استفاده نکنید.
اگر رمز MariaDB را فراموش کردهاید
اگر sudo mariadb یا sudo mysql کار نمیکند و رمز root را هم در اختیار ندارید، میتوانید MariaDB را موقتا با --skip-grant-tables اجرا کنید.
1. توقف MariaDB
sudo systemctl stop mariadb
2. اجرای MariaDB با skip-grant-tables
MariaDB را به صورت موقت با غیرفعال کردن بررسی دسترسی و شبکه اجرا کنید:
sudo mariadbd --skip-grant-tables --skip-networking &گزینه --skip-grant-tables بررسی مجوزها را غیرفعال میکند و گزینه --skip-networking مانع اتصال از طریق شبکه میشود.
اگر اجرای mariadbd با خطا مواجه شد، ابتدا مسیر فایل اجرایی و تنظیمات سرویس نصبشده را بررسی کنید. در نصبهای مختلف ممکن است مسیر فایلها متفاوت باشد.
3. ورود به MariaDB بدون رمز
sudo mariadbچون MariaDB با --skip-grant-tables اجرا شده است، در این مرحله بررسی رمز و مجوزهای حساب انجام نمیشود.
4. فعال کردن دوباره جداول دسترسی
داخل محیط MariaDB دستور زیر را اجرا کنید:
FLUSH PRIVILEGES;اجرای این دستور لازم است تا دستورات مدیریت حساب مانند ALTER USER دوباره قابل استفاده باشند.
5. تعیین رمز جدید
برای فعال کردن ورود با رمز عبور برای root@localhost از دستور زیر استفاده کنید:
ALTER USER 'root'@'localhost'
IDENTIFIED VIA mysql_native_password USING PASSWORD('NewStrongPassword');مقدار NewStrongPassword را با یک رمز عبور قوی جایگزین کنید.
سپس از MariaDB خارج شوید:
EXIT;
6. توقف MariaDB در حالت موقت
چون MariaDB را به صورت دستی اجرا کردهاید، ابتدا شماره پردازش مربوط به آن را پیدا کنید:
pgrep -a mariadbdPID مربوط به همان پردازشی را که در مرحله قبل اجرا کردهاید پیدا کنید و آن را متوقف کنید:
sudo kill PIDشماره PID مربوطه را پیدا کرده و در دستور بالا قرار دهید.
7. راهاندازی عادی MariaDB
sudo systemctl start mariadb
8. تست رمز جدید
mariadb -u root -pرمز جدید را وارد کنید. اگر وارد محیط MariaDB شدید، تغییر رمز با موفقیت انجام شده است.
ریست رمز MySQL در لینوکس
اگر رمز root@localhost در MySQL را فراموش کردهاید و امکان ورود معمولی به دیتابیس وجود ندارد، میتوانید MySQL را موقتا بدون بررسی جدول دسترسی اجرا کنید و سپس رمز جدید تعیین کنید.
1. توقف MySQL
sudo systemctl stop mysql
2. اجرای MySQL با skip-grant-tables
MySQL را به صورت موقت با گزینههای --skip-grant-tables و --skip-networking اجرا کنید:
sudo mysqld_safe --skip-grant-tables --skip-networking &در این حالت MySQL بررسی حسابها و مجوزها را متوقف میکند و به دلیل --skip-networking اتصالهای شبکه را نمیپذیرد.
3. ورود به MySQL بدون رمز
sudo mysqlدر این مرحله نباید رمز عبور از شما خواسته شود.
4. فعال کردن دوباره سیستم دسترسی
داخل MySQL دستور زیر را اجرا کنید:
FLUSH PRIVILEGES;بعد از اجرای FLUSH PRIVILEGES، دستورات مدیریت حساب مانند ALTER USER دوباره قابل استفاده هستند.
5. تعیین رمز جدید
برای تغییر رمز root@localhost از دستور زیر استفاده کنید:
ALTER USER 'root'@'localhost'
IDENTIFIED BY 'NewStrongPassword';مقدار NewStrongPassword را با رمز جدید جایگزین کنید.
در MySQL نیازی نیست برای تغییر رمز، روش احراز هویت را به صورت دستی روی mysql_native_password تنظیم کنید. استفاده از IDENTIFIED BY باعث میشود رمز حساب تغییر کند و روش احراز هویت پیشفرض نصب حفظ شود.
6. خروج از MySQL
EXIT;
7. توقف MySQL که به صورت دستی اجرا شده است
ابتدا پردازش MySQL را پیدا کنید:
pgrep -a mysqldPID مربوط به نمونهای را که برای ریست رمز اجرا کردهاید پیدا کنید و همان پردازش را متوقف کنید:
sudo kill PIDمقدار PID را با شماره پردازش واقعی جایگزین کنید.
8. راهاندازی عادی MySQL
sudo systemctl start mysql
9. تست رمز جدید
mysql -u root -pرمز جدید را وارد کنید. اگر وارد محیط MySQL شدید، رمز با موفقیت تغییر کرده است.
اگر دستور ALTER USER خطا داد
اگر MySQL یا MariaDB را با --skip-grant-tables اجرا کردهاید و ALTER USER با خطا مواجه میشود، ابتدا مطمئن شوید این دستور را اجرا کردهاید:
FLUSH PRIVILEGES;اگر خطا همچنان وجود دارد، نسخه دیتابیس را بررسی کنید:
SELECT VERSION();سپس حسابهای root موجود را بررسی کنید:
SELECT User, Host
FROM mysql.user
WHERE User = 'root';ممکن است حساب root با host دیگری ایجاد شده باشد. برای مثال اگر خروجی شامل root@127.0.0.1 بود، باید همان host را در دستور ALTER USER استفاده کنید:
ALTER USER 'root'@'127.0.0.1'
IDENTIFIED BY 'NewStrongPassword';
اگر sudo mariadb کار میکند ولی ورود با رمز ممکن نیست
اگر این دستور بدون درخواست رمز وارد MariaDB میشود:
sudo mariadbاما این دستور کار نمیکند:
mariadb -u root -pبه احتمالا بالا root@localhost از unix_socket برای احراز هویت استفاده میکند.
اگر مدیریت دیتابیس را فقط از طریق کاربر root سیستم انجام میدهید، نیازی به تغییر این تنظیم ندارید و میتوانید از همان روش استفاده کنید:
sudo mariadbاگر یک برنامه یا اسکریپت به ورود با نام کاربری و رمز عبور نیاز دارد، بهتر است برای آن یک حساب جداگانه ایجاد کنید و فقط دسترسیهای مورد نیاز برنامه را به آن بدهید.
تغییر رمز کاربر عادی MySQL یا MariaDB
اگر رمز یک کاربر عادی را میخواهید تغییر دهید و با حسابی وارد شدهاید که مجوز مدیریت آن کاربر را دارد، نیازی به --skip-grant-tables نیست.
در MySQL:
ALTER USER 'username'@'localhost'
IDENTIFIED BY 'NewStrongPassword';در MariaDB:
ALTER USER 'username'@'localhost'
IDENTIFIED BY 'NewStrongPassword';اگر host کاربر localhost نیست، مقدار صحیح host را جایگزین کنید.
خطاهای رایج
| خطا یا وضعیت | کاری که باید انجام دهید |
|---|---|
Access denied for user 'root' | اگر رمز root را فراموش کردهاید، سرویس را با --skip-grant-tables اجرا کنید و رمز جدید تعیین کنید. |
ALTER USER در حالت skip-grant-tables اجرا نمیشود | ابتدا داخل MySQL یا MariaDB دستور FLUSH PRIVILEGES; را اجرا کنید. |
sudo mariadb کار میکند ولی mariadb -u root -p کار نمیکند | ممکن است root از unix_socket استفاده کند. اگر همین روش برای مدیریت دیتابیس کافی است، نیازی به تغییر رمز نیست. |
Can't connect to local server | وضعیت سرویس را بررسی کنید و مطمئن شوید MySQL یا MariaDB در حال اجرا است. |
| بعد از تغییر رمز نمیتوانم وارد شوم | بررسی کنید نمونهای که با --skip-grant-tables اجرا شده متوقف شده باشد و سرویس اصلی را با systemctl start اجرا کرده باشید. |
بررسی وضعیت سرویس بعد از تغییر رمز
برای MySQL:
sudo systemctl status mysqlبرای MariaDB:
sudo systemctl status mariadbدر صورتی که سرویس به درستی اجرا شده باشد، وضعیت آن باید active (running) باشد.
اگر برای مدیریت دیتابیس به یک محیط لینوکس با دسترسی SSH نیاز دارید، میتوانید از پلن های vps استفاده کنید یا مستقیما vps لینوکس تهیه کنید. دسترسی root یا sudo به شما اجازه میدهد سرویس MySQL یا MariaDB را مدیریت و در صورت نیاز رمز کاربران دیتابیس را تغییر دهید.
فهرست تیترها
نویسنده: ایرج زاهدی، بنیانگذار و معمار فنی بلوسرور. محتوای این مقالات بر پایه تجربه عملی در طراحی، پیادهسازی و مدیریت پروژههای متنوع میزبانی وب در ایران و خارج از کشور، در طول بیش از یک دهه فعالیت مداوم نوشته شده است. به عنوان متخصص در بهینهسازی عملکرد و عیبیابی سیستمهای هاستینگ (از VPS تا هاست اشتراکی)، هدف من به اشتراکگذاری تجربیات و راهکارهای فنی است؛ همان دانشی که امروز ستون اصلی پایداری و کیفیت در سرویسهای بلوسرور محسوب میشود.
