در این مطلب آموزشی، نحوه تنظیم، تغییر و بازگردانی کلمه عبور روت 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’ پسورد جدید شماست.
یکی از جایگزینهای فرمان 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 برای کاربران دیگر
برای تغییر کلمه عبور یک کاربر عادی نیاز به فرمان زیر دارید.
mysqladmin -u user-name -p password newpass
متغیرهای این فرمان عبارتند از:
user-name: نام کاربری که میخواهید تغییر پسورد را انجام دهید.
newpass: پسورد جدید
کلمه ‘password’ یک متغیر نیست و بنابراین، نباید آن را با چیز دیگری جایگزین کنید. این فرمان از شما درخواست پسورد قدیمی را میکند.
روش ۲ – بروزرسانی یا تغییر کلمه عبور
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