در این مطلب آموزشی، نحوه تنظیم، تغییر و بازگردانی کلمه عبور روت MySQL یا MariaDB را بررسی خواهیم کرد. شاید شما هم با این پیغام خطا روبرو شده باشید که میگوید:
[php]
mysqladmin: connect to server at ‘localhost’ failed error: ‘Access denied for user ‘root’@’localhost’ (using password: YES)’
[/php]
ولی وقت آن است که مشکلات مربوط به کلمه عبور MySQL را حل کنیم. با ما همراه باشید. این آموزش برای تمام توزیعهای عمده لینوکس از جمله CentOS، دبیان، فدورا و اوبونتو مفید خواهد بود.
استفاده از فرمان mysqladmin برای تغییر کلمه عبور روت MySQL
روش یک – تنظیم پسورد روت برای اولین بار
اگر تا به حال کلمه عبور روت MySQL را تنظیم نکرده باشید، در هنگام ارتباط به صورت روت، سرور از شما درخواست پسورد نخواهد کرد. برای تنظیم پسورد روت برای اولین بار، از فرمان mysqladmin به صورت زیر در shell استفاده کنید.
[php]
mysqladmin -u root password newpass
[/php]
به عنوان مثال، اگر قصد دارید که کلمه عبور جدیدی به صورت ‘newpass’ انتخاب کنید، فرمان زیر را تایپ نمایید.
[php]
mysqladmin -u root -p password newpass
[/php]
پسورد را وارد کنید. اگر با پیغام زیر روبرو شدید…
[php]
mysqladmin: connect to server at ‘localhost’ failed
error: ‘Access denied for user ‘root’@’localhost’ (using password: YES)’
[/php]
دستورالعملهای زیر را برای نحوه بازیابی کلمه عبور روت MySQL دنبال کنید.
کلمه ‘password’ در نمونه بالا جزئی از فرمان محسوب میشود و نباید آن را با چیز دیگری جایگزین کنید. در عین حال، ‘newpass’ پسورد جدید شماست.

یکی از جایگزینهای فرمان mysqladmin در هنگام تنظیم ابتدایی کلمه عبور روت MySQL یا MariaDB، استفاده از فرمان mysql_secure_installation است. این فرمان نهتنها پسورد قدیمی و جدید روت MySQL را درخواست میکند، بلکه سایر ملاحظات امنیتی مانند غیرفعالسازی پایگاه داده آزمایشی را نیز درنظر میگیرد.
نحوه استفاده از این فرمان به صورت زیر است.
[php]
mysql_secure_installation
[/php]
مطابق زیر، پاسخ سؤالها را وارد کنید.
[php]
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
[/php]
البته پاسخها بالا به صورت پیشنهاد هستند و شما میتوانید تنظیمات موردنظر خود را وارد کنید. مثلاً شما ممکن است ترجیح دهید که پایگاه داده آزمایشی را حفظ نمایید و یا اینکه به دسترسی ریموت کاربر روت نیاز داشته باشید. البته قطعاْ نیازی به دسترسی ریموت به استفاده از PHPMyAdmin نخواهید داشت.

تغییر پسورد MySQL برای کاربران دیگر
برای تغییر کلمه عبور یک کاربر عادی نیاز به فرمان زیر دارید.
[php]
mysqladmin -u user-name -p password newpass
[/php]
متغیرهای این فرمان عبارتند از:
user-name: نام کاربری که میخواهید تغییر پسورد را انجام دهید.
newpass: پسورد جدید
کلمه ‘password’ یک متغیر نیست و بنابراین، نباید آن را با چیز دیگری جایگزین کنید. این فرمان از شما درخواست پسورد قدیمی را میکند.

روش ۲ – بروزرسانی یا تغییر کلمه عبور
MySQL نامهای کاربری و کلمههای عبور را در جدول user درون پایگاه داده MySQL ذخیره میکند. شما میتوانید با استفاده از روش زیر، مستقیماً پسوردها را بروزرسانی کرده و یا تغییر دهید.
۱) به سرور MySQL وارد شوید و فرمان زیر را در shell وارد کنید.
[php]
mysql -u root -p
[/php]
۲) از پایگاه داده mysql به صورت زیر استفاده کنید.
[php]
mysql> use mysql;
[/php]
۳) پسورد را برای یک کاربر خاص تغییر دهید.
نسخه MySQL 5.7.5 و نسخههای قدیمیتر
[php]
mysql> update user set password=PASSWORD("newpass") where User=’ENTER-USER-NAME-HERE’;
[/php]
نسخه MySQL 5.7.6 و جدیدتر
[php]
mysql> SET PASSWORD FOR ‘ENTER-USER-NAME-HERE’@’localhost’ = PASSWORD("newpass");
[/php]
۴) بارگذاری دسترسیها
[php]
mysql> flush privileges;
mysql> quit
[/php]
در هنگام اسکریپتنویسی php یا Perl باید از این روش استفاده کنید.
بازیابی کلمه عبور روت MySQL
با دنبال کردن پنج مرحله ساده زیر میتوانید پسورد یک سرور پایگاه داده MySQL را بازیابی کنید.
گام ۱) توقف اجرای سرور MySQL
گام ۲) اجرای دوباره سرور MySQL (mysqld) با گزینه –skip-grant-tables. در این حالت، دیگر نیازی به ارائه پسورد نخواهید داشت.
گام ۳) اتصال به سرور MySQL به صورت کاربر روت.
گام ۴) تنظیم یک کلمه عبور روت MySQL جدید
گام ۵) خروج و راهاندازی دوباره سرور MySQL
در اینجا فرمانهای موردنیاز برای هر مرحله را ملاحظه میکنید.
گام ۱) توقف اجرای سرور MySQL
[php]
service mysql stop
[/php]
خروجی
[php]
Stopping MySQL database server: mysqld.
[/php]
۲) اجرای دوباره سرور MySQL بدون نیاز به پسورد
[php]
mysqld_safe –skip-grant-tables &
[/php]
خروجی
[php]
[1] 5988
Starting mysqld daemon with databases from /var/lib/mysql
mysqld_safe[6025]: started
[/php]
گام ۳) اتصال به سرور MySQL با استفاده از کلاینت MySQL
[php]
mysql -u root
[/php]
خروجی
[php]
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>
[/php]
گام ۴) تنظیم یک کلمه عبور روت MySQL جدید
نسخه MySQL 5.7.5 و نسخههای قدیمیتر
[php]
mysql> use mysql;
mysql> update user set password=PASSWORD(“NEW-ROOT-PASSWORD”) where User=’root’;
mysql> flush privileges;
mysql> quit
[/php]
نسخه MySQL 5.7.6 و جدیدتر
[php]
mysql> use mysql;
mysql> SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(“newpass”);
mysql> flush privileges;
mysql> quit
[/php]
گام ۵) توقف سرور MySQL
[php]
service mysql stop
[/php]
خروجی
[php]
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
[/php]
در صورتی که فرمان بالا نتواند MySQL را متوقف کند، از فرمان زیر استفاده کنید.
[php]
killall mysqld
[/php]
خروجی ممکن است بسته به توزیع لینوکس متفاوت باشد. تا زمانی که پیغام خطا برایتان ظاهر نشود، جای نگرانی نخواهد بود. حالا سرور MySQL را راهاندازی کرده و تست کنید.
[php]
service mysql start
mysql -u root -p
[/php]