MySQL ล้มเหลวใน: mysql“ ERROR 1524 (HY000): ไม่ได้โหลดปลั๊กอิน 'auth_socket'”


128

สภาพแวดล้อมในพื้นที่ของฉันคือ:

  • Ubuntu 16.04 ใหม่
  • ด้วย PHP 7
  • ด้วยการติดตั้ง MySQL 5.7

    sudo apt-get install mysql-common mysql-server

เมื่อฉันพยายามเข้าสู่ระบบ MySQL (ผ่าน CLI):

mysql -u root -p

ฉันเจอปัญหาแบบวนรอบ 3 ขั้นตอน

1) ประการแรกคือปัญหาเกี่ยวกับซ็อกเก็ต

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

วิธีแก้ไข: รีสตาร์ทพีซี

ซึ่งนำไปสู่ข้อผิดพลาดอื่น:

2) ด้วยการเข้าถึงถูกปฏิเสธ

ERROR 1698 (28000): Access denied for user 'root'@'localhost'.

ปัญหาที่เป็นไปได้? รหัสผ่านสำหรับผู้ใช้ "root" ไม่ถูกต้อง!

วิธีแก้ไข: รีเซ็ตรหัสผ่านรูทด้วยบทช่วยสอนนี้

ด้วยรหัสผ่านที่ถูกต้องและซ็อกเก็ตที่ใช้งานได้มีข้อผิดพลาดล่าสุด

3) ปลั๊กอินการตรวจสอบสิทธิ์ไม่ถูกต้อง

mysql "ERROR 1524 (HY000): Plugin 'unix_socket' is not loaded"

ที่นี่ฉันหยุดหรือไปที่ 1) อีกครั้ง


1
ดีใจที่ได้ผลดี :) ขอบคุณที่ติดต่อมา!
Tomáš Votruba

คำตอบ:


375

ฉันมีทางออก!

เมื่อรีเซ็ตรหัสผ่าน root ในขั้นตอนที่ 2) ให้เปลี่ยนปลั๊กอิน auth เป็นmysql_native_password:

use mysql;
update user set authentication_string=PASSWORD("") where User='root';
update user set plugin="mysql_native_password" where User='root';  # THIS LINE

flush privileges;
quit;

สิ่งนี้ทำให้ฉันสามารถเข้าสู่ระบบได้สำเร็จ!


โซลูชันรหัสเต็ม

1. เรียกใช้คำสั่ง bash

1. ก่อนอื่นให้เรียกใช้คำสั่งทุบตีเหล่านี้

sudo /etc/init.d/mysql stop # stop mysql service
sudo mysqld_safe --skip-grant-tables & # start mysql without password
# enter -> go
mysql -uroot # connect to mysql

2. จากนั้นเรียกใช้คำสั่ง mysql => คัดลอกวางสิ่งนี้ลงใน cli ด้วยตนเอง

use mysql; # use mysql table
update user set authentication_string=PASSWORD("") where User='root'; # update password to nothing
update user set plugin="mysql_native_password" where User='root'; # set password resolving to default mechanism for root user

flush privileges;
quit;

3. เรียกใช้คำสั่ง bash เพิ่มเติม

sudo /etc/init.d/mysql stop 
sudo /etc/init.d/mysql start # reset mysql
# try login to database, just press enter at password prompt because your password is now blank
mysql -u root -p 

4. ปัญหาซ็อกเก็ต (จากความคิดเห็นของคุณ)

เมื่อคุณเห็นข้อผิดพลาดของซ็อกเก็ตชุมชนจะมาพร้อมกับ 2 วิธีแก้ปัญหาที่เป็นไปได้:

sudo mkdir -p /var/run/mysqld; sudo chown mysql /var/run/mysqld
sudo mysqld_safe --skip-grant-tables &

(ขอบคุณ @Cerin)

หรือ

mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqld  

(ขอบคุณ @Peter Dvukhrechensky)


เส้นทางตาบอดและข้อผิดพลาดขอบที่อาจเกิดขึ้น

ใช้ 127.0.0.1 แทน localhost

mysql -uroot # "-hlocalhost" is default

อาจทำให้เกิด "ไฟล์หาย" หรือข้อผิดพลาด slt

mysql -uroot -h127.0.0.1

ทำงานได้ดีขึ้น

ข้ามปัญหาซ็อกเก็ต

ฉันพบหลายวิธีในการสร้างmysqld.sockไฟล์เปลี่ยนสิทธิ์การเข้าถึงหรือเชื่อมโยงสัญลักษณ์ มันไม่ใช่ปัญหาหลังจากทั้งหมด

ข้ามmy.cnfไฟล์

ปัญหาก็ไม่ได้อยู่ที่นั่น หากคุณไม่แน่ใจสิ่งนี้อาจช่วยคุณได้


3
ขอบคุณสำหรับสิ่งนี้. นี่เป็นคำตอบที่ยอดเยี่ยมเกี่ยวกับวิธีรีเซ็ต mysql root pass ดังนั้นคุณอาจต้องการแก้ไขชื่อเล็กน้อยเพื่อช่วยให้เกิดขึ้นก่อนที่เราจะพบปัญหาซ็อกเก็ต
Wtower

1
ฉันดีใจที่ช่วยได้ คุณจะแก้ไขชื่อเพื่อเก็บข้อความต้นทางได้อย่างไร ฉันเข้าใจว่าวิธีแก้ปัญหานี้จำเป็นต้องรีเซ็ตรหัสผ่าน แต่ไม่สามารถแก้ปัญหาในชื่อเรื่องได้ นี่คือความล้มเหลวที่ซับซ้อนมากขึ้นของคะแนนมากขึ้น สำหรับการรีเซ็ตรหัสผ่านรูทฉันจะไปที่นี่: stackoverflow.com/a/6401963/1348344
Tomáš Votruba

1
@matanster ไม่จริงนี่เป็นการสร้างแบบทดสอบทีละขั้นตอนอย่างแท้จริง คุณใช้ OS อะไร?
Tomáš Votruba

8
การโทร mysqld_safe ของคุณไม่ถูกต้อง คุณต้องวิ่งแทน:sudo mkdir -p /var/run/mysqld; sudo chown mysql /var/run/mysqld; sudo mysqld_safe --skip-grant-tables &
Cerin

3
โปรดเพิ่มวิธีแก้ไขปัญหาซ็อกเก็ตที่เป็นไปได้ในคำตอบ เช่นนี้ mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqldอาจช่วยประหยัดเวลาของใครบางคนได้
Peter Dvukhrechensky

41

คุณสามารถลองทำดังต่อไปนี้ได้สำหรับฉัน

เริ่มเซิร์ฟเวอร์:

sudo service mysql start

ตอนนี้ไปที่โฟลเดอร์ถุงเท้า:

cd /var/run

สำรองถุงเท้า:

sudo cp -rp ./mysqld ./mysqld.bak

หยุดเซิร์ฟเวอร์:

sudo service mysql stop

คืนค่าถุงเท้า:

sudo mv ./mysqld.bak ./mysqld

เริ่ม mysqld_safe:

 sudo mysqld_safe --skip-grant-tables --skip-networking &

เริ่มต้น mysql shell:

 mysql -u root

เปลี่ยนรหัสผ่าน:

ดังนั้นก่อนอื่นให้เลือกฐานข้อมูล

mysql> use mysql;

ตอนนี้ป้อนสองคำค้นหาด้านล่าง:

mysql> update user set authentication_string=password('123456') where user='root';
mysql> update user set plugin="mysql_native_password" where User='root'; 

ตอนนี้ทุกอย่างจะโอเค

mysql> flush privileges;
mysql> quit;

สำหรับการตรวจสอบ:

mysql -u root -p

ทำ!

N.B, After login please change the password again from phpmyadmin

ตอนนี้ตรวจสอบ hostname/phpmyadmin

Username: root

Password: 123456

สำหรับรายละเอียดเพิ่มเติมโปรดตรวจสอบวิธีการรีเซ็ตรหัสผ่านที่ลืม phpmyadmin ใน Ubuntu


2
แค่นี้ก็ใช้ได้แล้ว! การสำรองและกู้คืนซ็อกเก็ตค่อนข้างฉลาด
touhid udoy

1
ข้อผิดพลาด 1045 (28000): การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ 'root' @ 'localhost' (โดยใช้รหัสผ่าน: ใช่) ก่อน "เสร็จสิ้น!" ในคำตอบของคุณเมื่อพยายามเข้าสู่ระบบด้วย 123456
trainoasis

ฉันแก้ไขการทำตามขั้นตอนที่อธิบายไว้ใน phpmyadmin (เช่นเปลี่ยนรหัสผ่านเปลี่ยนปลั๊กอิน) ด้วยเหตุผลบางประการ 'set authentication_string = password (... )' ทำให้หยุดทำงาน (ข้อผิดพลาด 1045 (28000): การเข้าถึงถูกปฏิเสธ ... )
Fil

12

mysqlคำสั่งโดยค่าเริ่มต้นใช้ซ็อกเก็ตยูนิกซ์เชื่อมต่อกับ MySQL

หากคุณใช้ MariaDB คุณต้องโหลดUnix Socket Authentication Pluginทางฝั่งเซิร์ฟเวอร์

คุณสามารถทำได้โดยแก้ไขการ[mysqld]กำหนดค่าดังนี้:

[mysqld]
plugin-load-add = auth_socket.so

ขึ้นอยู่กับการแจกจ่ายไฟล์กำหนดค่ามักจะอยู่ที่/etc/mysql/หรือ/usr/local/etc/mysql/


1
อันนี้. คำตอบอื่น ๆ ทั้งหมดอธิบายวิธีการแก้ไขข้อผิดพลาด อันนี้อธิบายถึงวิธีแก้ปัญหา
Envite

หากคุณใช้ MariaDB 10.4.3 และใหม่กว่าควรติดตั้งปลั๊กอิน unix_socket auth ตามค่าเริ่มต้น แต่ถ้าคุณอ้างอิงไม่ถูกต้องเป็น plugin = "auth_socket" แทนที่จะเป็น plugin = "unix_socket" เมื่ออัปเดต "ผู้ใช้" คุณ จะได้รับข้อความที่ทำให้เข้าใจผิดนี้ คำตอบของฉันอธิบายอย่างละเอียดว่าฉันทำเรื่องนี้อย่างไร
Rohn Adams

9

คุณสามารถลองทำตามขั้นตอนเหล่านี้:

หยุดบริการ Mysql ครั้งที่ 1 sudo /etc/init.d/mysql stop

เข้าสู่ระบบด้วยรูทโดยไม่ต้องใช้รหัสผ่าน sudo mysqld_safe --skip-grant-tables &

หลังจากเข้าสู่ระบบ mysql terminal คุณควรต้องดำเนินการคำสั่งเพิ่มเติม:

use mysql;

UPDATE mysql.user SET authentication_string=PASSWORD('solutionclub3@*^G'), plugin='mysql_native_password' WHERE User='root';

flush privileges;

sudo mysqladmin -u root -p -S /var/run/mysqld/mysqld.sock shutdown

หลังจากที่คุณรีสตาร์ทเซิร์ฟเวอร์ mysql ของคุณหากคุณยังคงพบข้อผิดพลาดคุณต้องไปที่: รีเซ็ตรหัสผ่านรูท MySQL 5.7 Ubuntu 16.04


8

สำหรับ Ubuntu 18.04 และ mysql 5.7

  • ขั้นตอนที่ 1: sudo mkdir /var/run/mysqld;

    ขั้นตอนที่ 2: sudo chown mysql /var/run/mysqld

    ขั้นตอนที่ 3: sudo mysqld_safe --skip-grant-tables& ออก (ใช้ออกหากติดค้าง)

เข้าสู่ระบบ mysql โดยไม่ต้องใช้รหัสผ่าน

  • ขั้นตอนที่ 4: sudo mysql --user=root mysql

    ขั้นตอนที่ 5: SELECT user,authentication_string,plugin,host FROM mysql.user;

    ขั้นตอนที่ 6: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'

ตอนนี้เข้าสู่ระบบด้วย

  • mysql -u root -p <root>

1
แต่ฉันจะตั้งค่าพาสสำหรับรูทได้ที่ขั้นตอนใด เพราะฉันพยายาม$ mysql -u root -pแต่การเข้าถึงยังถูกปฏิเสธ Access denied for user 'root'@'localhost' (using password: YES)ฉันพยายามป้อนรหัสผ่าน 'YES'
AlexNikonov


1

ในกรณีที่มีคนมาที่นี่หลังจากทำผิดพลาดแบบเดียวกันกับที่ฉันทำ:

  1. เปลี่ยนเป็นplugin="mysql_native_password"ชั่วคราว ทำงานของฉัน
  2. พยายามเปลี่ยนกลับไปใช้ปลั๊กอิน "auth_socket" แต่อ้างถึงไม่ถูกต้องplugin="auth_socket"ซึ่งส่งผลให้mysql "ERROR 1524 (HY000): Plugin 'auth_socket' is not loaded"
  3. ไม่มีวิธีในการเข้าสู่ระบบเพื่อแก้ไขข้อผิดพลาดนี้ฉันถูกบังคับให้ต้องหยุด mysql และใช้mysql_safeเพื่อหลีกเลี่ยงการตรวจสอบสิทธิ์เพื่อเปลี่ยนไปใช้ปลั๊กอินที่เหมาะสมplugin="unix_socket"

หวังว่าสิ่งนี้จะช่วยให้ใครบางคนประหยัดเวลาได้บ้างหากพวกเขาได้รับข้อความแสดงข้อผิดพลาดของผู้โพสต์ต้นฉบับ แต่สาเหตุที่แท้จริงคือการทำให้ชื่อปลั๊กอินไม่สมบูรณ์โดยไม่ได้ขาดการมีอยู่ของปลั๊กอิน "auth_socket" ซึ่งตามเอกสารของ MariaDB :

ใน MariaDB 10.4.3 และใหม่กว่าปลั๊กอินการพิสูจน์ตัวตน unix_socket จะถูกติดตั้งตามค่าเริ่มต้นและจะถูกใช้โดยบัญชีผู้ใช้ 'root' @ 'localhost' ตามค่าเริ่มต้น


-7

คุณสามารถลองใช้คำสั่งด้านล่าง:

hduser@master:~$ sudo /etc/init.d/mysql stop
[ ok ] Stopping mysql (via systemctl): mysql.service.
hduser@master:~$ sudo /etc/init.d/mysql start
[ ok ] Starting mysql (via systemctl): mysql.service.

คุณช่วยอธิบายเพิ่มเติมได้ไหม การรีสตาร์ทเซิร์ฟเวอร์จะแก้ปัญหาข้อความแสดงข้อผิดพลาดได้อย่างไร
Nico Haase
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.