در این مطلب آموزشی، نحوه تنظیم، تغییر و بازگردانی کلمه عبور روت MySQL یا MariaDB را بررسی خواهیم کرد. شاید شما هم با این پیغام خطا روبرو شده باشید که می‌گوید:


mysqladmin:  connect to server at 'localhost' failed error: 'Access denied for user 'root'@'localhost' (using password: YES)’

ولی وقت آن است که مشکلات مربوط به کلمه عبور MySQL را حل کنیم. با ما همراه باشید. این آموزش برای تمام توزیع‌های عمده لینوکس از جمله CentOS، دبیان، فدورا و اوبونتو مفید خواهد بود.

استفاده از فرمان mysqladmin برای تغییر کلمه  عبور روت MySQL

روش یک – تنظیم پسورد روت برای اولین بار

اگر تا به حال کلمه عبور روت MySQL را تنظیم نکرده باشید، در هنگام ارتباط به صورت روت، سرور از شما درخواست پسورد نخواهد کرد. برای تنظیم پسورد روت برای اولین بار، از فرمان mysqladmin به صورت زیر در shell استفاده کنید.


mysqladmin -u root password newpass

به عنوان مثال، اگر قصد دارید که کلمه عبور جدیدی به صورت ‘newpass’ انتخاب کنید، فرمان زیر را تایپ نمایید.


mysqladmin -u root -p password newpass

پسورد را وارد کنید. اگر با پیغام زیر روبرو شدید…


mysqladmin: connect to server at 'localhost' failed

error: 'Access denied for user 'root'@'localhost' (using password: YES)'

دستورالعمل‌های زیر را برای نحوه بازیابی کلمه عبور روت MySQL دنبال کنید.

کلمه ‘password’ در نمونه بالا جزئی از فرمان محسوب می‌شود و نباید آن را با چیز دیگری جایگزین کنید. در عین حال، ‘newpass’ پسورد جدید شماست.

تغییر کلمه عبور روت MySQL یا MariaDB

یکی از جایگزین‌های فرمان mysqladmin در هنگام تنظیم ابتدایی کلمه عبور روت MySQL یا MariaDB، استفاده از فرمان mysql_secure_installation است. این فرمان نه‌تنها پسورد قدیمی و جدید روت MySQL را درخواست می‌کند، بلکه سایر ملاحظات امنیتی مانند غیرفعال‌سازی پایگاه داده آزمایشی را نیز درنظر می‌گیرد.

نحوه استفاده از این فرمان به صورت زیر است.


mysql_secure_installation

مطابق زیر، پاسخ سؤال‌ها را وارد کنید.


Change the root password? [Y/n] <-- y

New password: <-- Enter a new MySQL root password

Re-enter new password: <-- Repeat the MySQL root password

Remove anonymous users? [Y/n] <-- y

Disallow root login remotely? [Y/n] <-- y

Remove test database and access to it? [Y/n] <-- y

Reload privilege tables now? [Y/n] <-- y

البته پاسخ‌ها بالا به صورت پیشنهاد هستند و شما می‌توانید تنظیمات موردنظر خود را وارد کنید. مثلاً شما ممکن است ترجیح دهید که پایگاه داده آزمایشی را حفظ نمایید و یا اینکه به دسترسی ریموت کاربر روت نیاز داشته باشید. البته قطعاْ نیازی به دسترسی ریموت به استفاده از PHPMyAdmin نخواهید داشت.

استفاده از mysql_secure_installation  برای تغییر کلمه عبور روت MySQL

تغییر پسورد MySQL برای کاربران دیگر

برای تغییر کلمه عبور یک کاربر عادی نیاز به فرمان زیر دارید.


mysqladmin -u user-name -p password newpass

متغیرهای این فرمان عبارتند از:

user-name: نام کاربری که می‌خواهید تغییر پسورد را انجام دهید.

newpass: پسورد جدید

کلمه ‘password’ یک متغیر نیست و بنابراین، نباید آن را با چیز دیگری جایگزین کنید. این فرمان از شما درخواست پسورد قدیمی را می‌کند.

تغییر کلمه عبور با mysqladmin

روش ۲ – بروزرسانی یا تغییر کلمه عبور

MySQL نام‌های کاربری و کلمه‌های عبور را در جدول user درون پایگاه داده MySQL ذخیره می‌کند. شما می‌توانید با استفاده از روش زیر، مستقیماً پسوردها را بروزرسانی کرده و یا تغییر دهید.

۱) به سرور MySQL وارد شوید و فرمان زیر را در shell وارد کنید.


mysql -u root -p

۲) از پایگاه داده mysql به صورت زیر استفاده کنید.


mysql> use mysql;

۳) پسورد را برای یک کاربر خاص تغییر دهید.

نسخه MySQL 5.7.5 و نسخه‌های قدیمی‌تر


mysql> update user set password=PASSWORD("newpass") where User='ENTER-USER-NAME-HERE';

نسخه MySQL 5.7.6 و جدیدتر


mysql> SET PASSWORD FOR 'ENTER-USER-NAME-HERE'@'localhost' = PASSWORD("newpass");

۴) بارگذاری دسترسی‌ها


mysql> flush privileges;

mysql> quit

در هنگام اسکریپت‌نویسی php یا Perl باید از این روش استفاده کنید.

بازیابی کلمه عبور روت MySQL

با دنبال کردن پنج مرحله ساده زیر می‌توانید پسورد یک سرور پایگاه داده MySQL را بازیابی کنید.

گام ۱) توقف اجرای سرور MySQL

گام ۲) اجرای دوباره سرور MySQL (mysqld) با گزینه –skip-grant-tables. در این حالت، دیگر نیازی به ارائه پسورد نخواهید داشت.

گام ۳) اتصال به سرور MySQL به صورت کاربر روت.

گام ۴) تنظیم یک کلمه عبور روت MySQL جدید

گام ۵) خروج و راه‌اندازی دوباره سرور MySQL

در اینجا فرمان‌های موردنیاز برای هر مرحله را ملاحظه می‌کنید.

گام ۱) توقف اجرای سرور MySQL


service mysql stop

خروجی


Stopping MySQL database server: mysqld.

۲) اجرای دوباره سرور MySQL بدون نیاز به پسورد


mysqld_safe --skip-grant-tables &

خروجی


[1] 5988

Starting mysqld daemon with databases from /var/lib/mysql

mysqld_safe[6025]: started

گام ۳) اتصال به سرور MySQL با استفاده از کلاینت MySQL


mysql -u root

خروجی


Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 56299

Server version: 5.6.34-1 (Debian)

Copyright © 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql>

گام ۴) تنظیم یک کلمه عبور روت MySQL جدید

نسخه MySQL 5.7.5 و نسخه‌های قدیمی‌تر


mysql> use mysql;

mysql> update user set password=PASSWORD(“NEW-ROOT-PASSWORD”) where User=’root’;

mysql> flush privileges;

mysql> quit

نسخه MySQL 5.7.6 و جدیدتر


mysql> use mysql;

mysql> SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(“newpass”);

mysql> flush privileges;

mysql> quit

گام ۵) توقف سرور MySQL


service mysql stop

خروجی


Stopping MySQL database server: mysqld

STOPPING server from pid file /var/run/mysqld/mysqld.pid

mysqld_safe[6186]: ended

[1]+  Done                    mysqld_safe --skip-grant-tables

در صورتی که فرمان بالا نتواند MySQL را متوقف کند، از فرمان زیر استفاده کنید.


killall mysqld

خروجی ممکن است بسته به توزیع لینوکس متفاوت باشد. تا زمانی که پیغام خطا برایتان ظاهر نشود، جای نگرانی نخواهد بود. حالا سرور MySQL را راه‌اندازی کرده و تست کنید.


service mysql start

mysql -u root -p