نشرح هنا كيف يمكنك ضبط وتغيير وإعادة تعيين (إذا نسيت كلمة المرور) كلمات مرور المستخدم الـ root في MySQL أو MariaDB.
تحدث مرارًا وتكرارًا مشكلات مثل :
mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'root'@'localhost' (using password: YES)
هذا الشرح متوافق مع جميع توزيعات Linux الرئيسية بما في ذلك. CentOS و Debian و Fedora و Ubuntu.
استخدم الأمر mysqladmin لتغيير كلمة مرور الـ Root.
شاهد خطوات reset root password في Ububntu 20.10
الطريقة الأولى: إعداد كلمة مرور Root لأول مرة
إذا لم تقم أبدًا بتعيين كلمة مرور Root لـ MySQL فلن يتطلب الخادم كلمة مرور على الإطلاق للاتصال كـ Root.
لإعداد كلمة مرور Root لأول مرة ، استخدم الأمر mysqladmin في الـ shell:
mysqladmin -u root password newpass
إذا كنت تريد تغيير (أو تحديث) كلمة مرور root إلى كلمة المرور الجديدة newpass فأنت بحاجة إلى استخدام الأمر التالي:
mysqladmin -u root -p password newpass
Enter password:
إذا حصلت على النتيجة التالية
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: YES)'
فاتبع التعليمات أدناه حول كيفية استرداد كلمة مرور MySQL الخاصة بك.
password في المثال أعلاه جزء من الأمر لا تستبدلها بكلمة المرور الخاصة بك.
كلمة newpass هي كلمة المرور الجديدة.
من البدائل لاستخدام الأمر mysqladmin عند تعيين كلمة مرور root في MySQL أو MariaDB للمرة الأولى استخدام الأمر mysql_secure_installation.
لن يطلب هذا الأمر كلمة مرور root الخاصة بـ MySQL القديمة والجديدة فحسب بل سيفعل أيضًا بعض إعدادات الأمان الأخرى مثل تعطيل test database.
كيفية استخدام هذا الأمر:
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
الإجابات المذكورة أعلاه هي مجرد أمثلة ولك مطلق الحرية في اختيار إعدادات أخرى.
فعلى سبيل المثال عندما تفضل الاحتفاظ بـ test databases أو تحتاج إلى remote access للمستخدم root.
ملاحظة: لا تحتاج إلى remote access لاستخدام PHPMyAdmin عن بُعد.
تغيير كلمة مرور MySQL للمستخدمين الآخرين
لتغيير كلمة مرور مستخدم عادي عليك كتابة:
mysqladmin -u user-name -p password newpass
المتغيرات في هذا المثال هي:
user-name: اسم المستخدم الذي تريد تغيير كلمة المرور الخاصة به.
newpass: كلمة المرور الجديدة.
كلمة password ليست متغيرًا ، فلا تستبدلها.
سيطلب الأمرمنك كلمة المرور القديمة.
الطريقة الثانية - تحديث كلمة المرور أو تغييرها
يخزن MySQL أسماء المستخدمين وكلمات المرور في جدول المستخدم (user table) داخل قاعدة بيانات MySQL.
يمكنك تحديث كلمة المرور مباشرةً باستخدام الطريقة التالية لتحديث كلمات المرور أو تغييرها:
1) قم بتسجيل الدخول إلى خادم MySQL واكتب الأمر التالي في الـ shell :
mysql -u root -p
2) استخدم قاعدة بيانات mysql (اكتب الأوامر في mysql> prompt):
mysql> use mysql;
3) تغيير كلمة المرور للمستخدم:
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");
4) إعادة تحميل الصلاحيات:
mysql> flush privileges;
mysql> quit
هذه الطريقة تحتاج إلى استخدامها أثناء استخدام البرمجة النصية PHP أو Perl.
استعادة كلمة مرور root المفقودة في MySQL
يمكنك استعادة كلمة مرور خادم قاعدة بيانات MySQL باتباع الخطوات الخمس السهلة التالية:
1- أوقف خدمة الخادم (MySQL server process).
2- ابدأ عملية MySQL (mysqld) server/daemon باستخدام الخيار --skip-Grant-Tables حتى لا يطالب بكلمة مرور.
3- اتصل بخادم MySQL باعتبارك المستخدم root .
4- قم بتعيين كلمة مرور root جديدة.
5- اخرج وأعد تشغيل خادم MySQL.
فيما يلي الأوامر التي تحتاج إلى كتابتها لكل خطوة (سجل الدخول باسم المستخدم root):
الخطوة رقم 1: إيقاف خدمة MySQL:
service mysql stop
ستحصل على النتيجة:
Stopping MySQL database server: mysqld.
الخطوة رقم 2: ابدأ تشغيل خادم MySQL بدون كلمة المرور:
mysqld_safe --skip-grant-tables &
ستحصل على النتيجة:
[1] 5988
Starting mysqld daemon with databases from /var/lib/mysql
mysqld_safe[6025]: started
الخطوة رقم 3: اتصل بخادم MySQL باستخدام MySQL client
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 (c) 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>
الخطوة رقم 4: قم بتعيين كلمة مرور جديدة للمستخدم root لـ 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
الخطوة رقم 5: إيقاف خادم 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 إذا فشل الأمر أعلاه في إيقافه (يعتمد الأمر الذي يعمل على إصدار MySQL):
killall mysqld
قد تختلف النتيجة بناءً على Linux.
لا تقلق ما لم يظهر خطأ.
ابدأ تشغيل خادم MySQL واختبره:
service mysql start
mysql -u root -p