سؤال mysql كيفية إصلاح رفض الوصول للمستخدم 'الجذر' @ 'localhost'


قبل أن أفسد شيئًا ، عندما أقوم بتسجيل الدخول باستخدام $ mysql -u root -pوإظهار قواعد البيانات:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| game_data          |
| test               |
+--------------------+

ثم حاولت إنشاء مستخدم جديد ولاحظت وجود خطأ ما في الامتيازات.

لذا قمت بحذف المستخدمين الجدد ، وأعتقد أنني أزلت "الجذر" و "المسؤول" بطريق الخطأ.

ثم أحاول إنشاء "root" مرة أخرى ، ولكن احرص على رفض الوصول عند منح كل الامتيازات.

mysql> CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
mysql> grant all privileges on *.* to 'root'@'localhost' identified by 'password' with grant option;
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

إذا قمت بتسجيل الدخول إلى MySQL مرة أخرى باستخدام $ mysql -u root -pوعرض قواعد البيانات

+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+

اختفت جميع قواعد البيانات الأخرى.

كيف أقوم بإصلاح MySQL الآن؟

لا أستطيع العثور على قاعدة البيانات 'mysql' ، لا يمكن إنشاء قاعدة بيانات ، إنشاء مستخدم ، أي شيء أحاول القيام به سوف تحصل على خطأ.

ERROR 1045 (28000): تم رفض الوصول للمستخدم 'root' @ 'localhost' (باستخدام كلمة المرور: YES).

هل يجب إعادة تثبيت MySQL باستخدام MacPorts؟ إذا قمت بإعادة التثبيت ، فسأفقد قاعدة البيانات game_data، حق؟


108
2018-06-03 07:32


الأصل


جرب الاتصال بالخادم باستخدام 'root'@'127.0.0.1' والذي يختلف عن 'root' @ 'localhost'. ثم قم بإصدار أمر لإنشاء المستخدم 'root' @ 'localhost' ومنح جميع الامتيازات إليه. - Gimmy
انظر أيضا كيف يكون MySQL مخولاً للمستخدم الجذر؟ على مستخدم سوبر. يحاول تجنب إعادة تعيين كلمات المرور. - jww
كان لدي فضاء بين -p وكلمة المرور. أنا أعلم سخيفة ولكن قد يساعد شخص ما. - Vinay Wadhwa


الأجوبة:


اتبع الخطوات التالية.

  1. بدء تشغيل مثيل خادم MySQL أو البرنامج الخفي مع --skip-grant-tables الخيار (إعداد الأمان).

    $ mysqld --skip-grant-tables
    
  2. تنفيذ هذه العبارات.

    $ mysql -u root mysql
    $mysql> UPDATE user SET Password=PASSWORD('my_password') where USER='root';
    $mysql> FLUSH PRIVILEGES;
    

إذا واجهت الحقل غير معروف خطأ كلمة مرور أعلاه استخدام:

update user set authentication_string=password('my_password') where user='root';
  1. وأخيرًا ، أعد تشغيل المثيل / الخفي بدون --skip-grant-tables اختيار.

    $ /etc/init.d/mysql restart
    

يجب أن تكون الآن قادرًا على الاتصال بكلمة المرور الجديدة.

$ mysql -u root -p

أدخل كلمة المرور: my_password

إصلاح الخطأ MySQL “Unable to lock ibdata1”

sudo mv /usr/local/mysql/data/ibdata1 /usr/local/mysql/data/ibdata1.bak
sudo mv /usr/local/mysql/data/ib_logfile0 /usr/local/mysql/data/ib_logfile0.bak
sudo mv /usr/local/mysql/data/ib_logfile1 /usr/local/mysql/data/ib_logfile1.bak
sudo cp -a /usr/local/mysql/data/ibdata1.bak /usr/local/mysql/data/ibdata1
sudo cp -a /usr/local/mysql/data/ib_logfile0.bak /usr/local/mysql/data/ib_logfile0
sudo cp -a /usr/local/mysql/data/ib_logfile1.bak /usr/local/mysql/data/ib_logfile1
sudo /etc/init.d/mysql restart

116
2018-06-03 07:35



"$ mysqld - skip-grant-tables" و "InnoDB: غير قادر على تأمين ./ibdata1 ، خطأ: 35 InnoDB: تحقق من أنك لا تملك بالفعل عملية mysqld أخرى InnoDB: باستخدام نفس بيانات InnoDB أو ملفات السجل."؟
انظر تحديثي أعلاه - Yogus
لقد وجدت أن إيقاف mysql قبل إصدار الأمر الأول يوقف الخطأ قفل من الحدوث - توقف خدمة الخلية - Frank Tzanabetis
يبدو أن عمود "كلمة المرور" لم يعد موجودًا ... فقد تم استبداله بـ "authentication_string". إذن سلسلة تحديث كلمة المرور هي الآن: UPDATE user SET authentication_string = PASSWORD ('my_password') حيث USER = 'root'؛ - jdmcnair
شكرا لكم! والآن أشعر بالفضول: ما الذي يمكن أن يسبب هذا؟ على ويندوز؟ - Ilia Andrienko


لم يكن أي مما سبق مفيدا بالنسبة لي. وجدت أنني بحاجة إلى مسح طريقة البرنامج المساعد. في 5.6 ، يمكنني القيام به:

sudo mysql -u root
use mysql;
[mysql] update user set plugin='' where User='root';
[mysql] flush privileges;

في 5.7 ، وجدت أنني بحاجة إلى:

sudo mysql -u root
use mysql;
[mysql] update user set plugin='mysql_native_password' where User='root';
[mysql] flush privileges;

وفقًا للمستندات ، مع تعيين المكون الإضافي على سلسلة فارغة ، يجب أن يكون قد تعطل بشكل فعال إلى mysql_native_password ، ولكن قد يتم الخلط بسبب تجزئة كلمة المرور الفارغة. لمزيد من الفروق الدقيقة ، يمكنك قراءة الوثائق هنا: https://dev.mysql.com/doc/refman/5.7/en/native-authentication-plugin.html 


43
2017-09-28 15:01



هذا حل ذلك بالنسبة لي. عندما نظرت إلى حالة خادم mysql ، رأيت هذا التحذير: "[Warning] 'user' entry 'root @ localhost' به كلمة مرور ومكوّن إضافي للمصادقة محدد. سيتم تجاهل كلمة المرور." أدى تعيين المكوّن الإضافي إلى '' إلى تسجيل الدخول مرة أخرى. شكرًا لك ،Mario Flores - SpacePope
كان المكوّن الإضافي فارغًا. الشيء المضحك هو تغييرها إلى فارغة تلقائيا. يرجى ملاحظة أنني أتحدث عن تثبيت على جهاز الكمبيوتر الشخصي الخاص بي حيث يمكنني استخدام ترقيات distue ، لذلك قد يكون هذا هو السبب في انكسار المستخدم الجذر. - Friend of Kim
set plugin='mysql_native_password' فعلت ذلك بالنسبة لي ، شكرا! كمرجع: dev.mysql.com/doc/refman/5.7/en/... - Koen.
لماذا لا تزال هذه مشكلة في تثبيت عمليات الحزم الأولية في عام 2018؟ - mckenzm
أوبونتو 18 ، وأنها عملت - Rahal Kanishka


تأكد أيضا من السجل المطلوب في الجدول user لديه فارغة plugin المجال (يمكن أن يكون هناك ، على سبيل المثال ، "unix_socket").

منذ الإصدار 5.5.7 mysql لديه العديد من الملحقات الإضافية auth https://dev.mysql.com/doc/refman/5.6/en/authentication-plugins.html

لذلك إذا كان لديك غير فارغ plugin الحقل ثم سيتم تجاهل كلمة المرور وسيكون هناك تحذير في سجل الخطأ mysql (بالنسبة لي هو /var/log/mysql/error.log):

[Warning] 'user' entry 'root@localhost' has both a password and an authentication plugin specified. The password will be ignored.


8
2018-04-28 21:27



بالنسبة لشخص آخر يتم تشغيله عبر هذا ، عند تشغيل خادم mysql 5.7.15 ، يقوم هذا في الواقع بإغلاق المستخدم الخاص بك إذا لم تقدم ملحقًا إضافيًا. ربما ما كنت تبحث عنه هو plugin من mysql_native_password. - Jonathan Cantrell


grep 'temporary password' /var/log/mysqld.log
Sort date (newest date)

قد ترى شيئًا كهذا ؛

[root@SERVER ~]# grep 'temporary password' /var/log/mysqld.log
2016-01-16T18:07:29.688164Z 1 [Note] A temporary password is generated for root@localhost: O,k5.marHfFu
2016-01-22T13:14:17.974391Z 1 [Note] A temporary password is generated for root@localhost: b5nvIu!jh6ql
2016-01-22T15:35:48.496812Z 1 [Note] A temporary password is generated for root@localhost: (B*=T!uWJ7ws
2016-01-22T15:52:21.088610Z 1 [Note] A temporary password is generated for root@localhost: %tJXK7sytMJV
2016-01-22T16:24:41.384205Z 1 [Note] A temporary password is generated for root@localhost: lslQDvgwr3/S
2016-01-22T22:11:24.772275Z 1 [Note] A temporary password is generated for root@localhost: S4u+J,Rce_0t
[root@SERVER ~]# mysql_secure_installation

تأمين نشر خادم MySQL.

Enter password for user root: 

The existing password for the user account root has expired. Please set a new password.

New password: 

Re-enter new password:

إذا كنت ترى ذلك يقول

... Failed! Error: Your password does not satisfy the current policy requirements
That means your password needs to have a character such as ! . # - etc...
mix characters well, upper case, lower case, ! . , # etc...

New password: 

Re-enter new password: 
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.

Estimated strength of the password: 100 
Change the password for root ? ((Press y|Y for Yes, any other key for No) : Y

New password: 

Re-enter new password: 

Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.

All done! 
[root@SERVER ~]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.10 MySQL Community Server (GPL)

شاهد آخر 10 دقائق من هذا الفيديو، يعلمك كيف تفعل ذلك.


7
2018-01-22 23:08



على الرغم من أن هذا قد يجيب على السؤال ، يجب أن تعطي وصفًا أكثر تفصيلاً للمحتوى المرتبط وتشرح كيفية ارتباطه بالسؤال. سيساعد هذا على ضمان بقاء هذه الإجابة مفيدة في حالة إزالة الصفحة المرتبطة أو عدم الاتصال بالإنترنت. لمزيد من المعلومات، راجع هذه المشاركة في Meta Stack Exchange. - bwDraco
هذه هي حالة الاستخدام التي رأيتها ، فأنا أقوم بتثبيت mysql على RHEL7 في AWS مع Ansible وأحصل على نفس السلوك بعد إعادة تهيئة DB وإعادة تشغيله. هل تعرف لماذا يحدث هذا في المقام الأول ، هو حظر Ansible من الوصول إلى mysqld المحلية وتكوينه. هذا فقط لأغراض الاختبار. - einarc
يبدو أن ذلك يعتمد على كيفية تهيئة الخادم ، انظر إلى الخطوة 4 هنا: dev.mysql.com/doc/refman/5.7/en/... - einarc


جربها:

mysql --no-defaults --force --user=root --host=localhost --database=mysql 
UPDATE user SET Password=PASSWORD('NEWPASSWORD') where USER='root';
FLUSH PRIVILEGES;

3
2018-02-21 17:05



هل يمكنك وصف ما --no-defaults --force مفاتيح تفعل؟ خلاف ذلك ، هو تكرار VLQ من أعلاه ، الإجابة المقبولة. - Canadian Luke
CanadianLuke لا تخطي أي إعدادات افتراضية أي ملفات التكوين التي تتضمنها ، وإلا ستستمر القوة في العمل حتى في حالة فشل أي من أوامر SQL التي تم إصدارها. عندما تكون في شك ، تحقق الدليل - deucalion
يجب أن يتم تحريره في الإجابة - Canadian Luke
انا حصلت ERROR 1054 (42S22): Unknown column 'Password' in 'field list' - Jonathan
JonathanLeaders look: stackoverflow.com/questions/30692812/... - Gustavo Duarte


في حالتي كان لدي فساد قاعدة البيانات ، بعد إعادة تشغيل mysql على ديبيان كان تسجيل الدخول الجذر بدون كلمة مرور. الحل كان هذا:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';

بعض الإجابات الأخرى قد ذكرت أيضا البرنامج المساعد native_password ولكن هذه هي الطريقة التي يمكنك القيام بها دون تلاعب معقدة حولها. هذه هي الطريقة التي من المفترض أن يتم تغييرها.


0
2017-11-10 20:13