Ubuntu 15.10 ข้อผิดพลาด mysql 1524 - unix_socket


51

ใน Ubuntu 15.10 ณ จุดหนึ่ง (อาจจะหลังจากติดตั้ง & ลบ mariadb) mysql ไม่สามารถใช้งานได้ Tasks ขึ้น แต่เซิร์ฟเวอร์ไม่ทำงาน

ที่คำสั่ง:

mysql -u root -p

ระบบตอบกลับด้วยสิ่งที่ชอบ:

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

ไม่มีวิธีการเข้าสู่ระบบไม่พบปลั๊กอินไม่มีข้อผิดพลาดในไฟล์กำหนดค่า (ทั้งหมดเป็นค่าเริ่มต้น)

จะกลับมาควบคุมได้อย่างไรและทำให้เซิร์ฟเวอร์ mysql ทำงานได้อย่างไร


ฉันไม่คุ้นเคยกับข้อผิดพลาดเฉพาะนี้ แต่เห็นการสนทนานี้: lists.launchpad.net/maria-developers/msg08177.html
Jos

@Jos: การสนทนานั้นอาจจะเป็นในสถานการณ์ที่คล้ายกันไม่ได้มีทางออก ฉันทำมาก แต่ไม่พบวิธีแก้ปัญหาที่สมบูรณ์ อย่างไรก็ตามฉันได้โพสต์คำตอบที่ใช้งานได้
Hydra Starmaster

เกี่ยวกับสาเหตุของข้อความแสดงข้อผิดพลาด: ปลั๊กอิน unix_socket เป็นส่วนหนึ่งของ MariaDB (ไม่ใช่ MySQL) และต้องโหลดเพื่อให้สามารถใช้งานได้: mariadb.com/kb/en/library/authentication-plugin-unix-socket
JonnyJD

คำตอบ:


94

"unix_socket" ถูกเรียกโดยกระบวนการพิสูจน์ตัวตน mysql (อาจเกี่ยวข้องกับการโยกย้ายบางส่วนของฐานข้อมูลไปยัง mariadb ตอนนี้ถูกลบ) เพื่อให้ทุกอย่างกลับมาทำงานได้ su:

sudo su

จากนั้นทำตาม:

/etc/init.d/mysql stop
mysqld_safe --skip-grant-tables &
mysql -uroot

สิ่งนี้จะหยุด mysql โดยสิ้นเชิงรับรองความถูกต้องของผู้ใช้ (ไม่ต้องใช้รหัสผ่าน) และเชื่อมต่อกับ mysql ด้วย "root" ของผู้ใช้

ตอนนี้ในคอนโซล mysql ไปใช้ db บริหาร mysql:

use mysql;

หากต้องการรีเซ็ตรหัสผ่านรูทเป็นmynewpassword (เปลี่ยนตามที่คุณต้องการ) เพียงเพื่อให้แน่ใจว่า:

update user set password=PASSWORD("mynewpassword") where User='root';

และอันนี้จะเขียนทับวิธีการพิสูจน์ตัวตนลบคำขอ unix_socket (และทุกอย่างอื่น) คืนค่าวิธีการรหัสผ่านปกติและการทำงาน:

update user set plugin="mysql_native_password";

ออกจากคอนโซล mysql:

quit;

หยุดและเริ่มทุกสิ่งที่เกี่ยวข้องกับ mysql:

/etc/init.d/mysql stop
kill -9 $(pgrep mysql)
/etc/init.d/mysql start

อย่าลืมไปexitที่โหมด su

ตอนนี้เซิร์ฟเวอร์ mySQL เริ่มทำงานแล้ว คุณสามารถเข้าสู่ระบบด้วยรูท:

mysql -u root -p

หรือสิ่งที่คุณต้องการ การใช้รหัสผ่านเป็นการทำงาน

แค่นั้นแหละ.


ฉันmysqld_safeไม่มีทางเลือกเช่น--skip-grant-tables.. จะให้อะไร
heemayl

ฉันใช้ mysqld 5.6.27-0ubuntu1 คุณควรพบตัวเลือกนั้นดู:mysqld --verbose --help
Hydra Starmaster

2
นี่ทำให้ฉันไป ด้วยความแตกต่างบางอย่างแทนmysqld_safeซึ่งบ่นอาร์กิวเมนต์ --skip mysqldทุนตารางไม่ได้อยู่ที่ผมใช้ อย่างไรก็ตามมันยังคงบ่นว่ามันไม่สามารถสร้างไฟล์ซ็อกเก็ต/var/run/mysqld/ได้ ฉันตรวจสอบการกำหนดค่า apparmor และมีสิทธิ์ที่เหมาะสม ในการแก้ไขปัญหานี้ฉันต้องทำmkdir /var/run/mysqld/แล้วให้สิทธิ์เปิดอย่างสมบูรณ์: chmod -R 777 /var/run/mysqld/. ในที่สุดฉันก็สามารถเริ่ม daemon และเปลี่ยนปลั๊กอินเป็น 'mysql_native_password'
dennmat

1
ตารางผู้ใช้ของฉันไม่มีฟิลด์รหัสผ่าน (Ubuntu 16 mysql 5.7.13) ฉันใช้ SQL นี้: อัพเดท mysql.user SET authentication_string = PASSWORD ('foobar123'), password_expired = 'N' WHERE ผู้ใช้ = 'root' และ Host = 'localhost';
Anthony Scaife

คำแนะนำที่นี่กระชับและช่วยให้ฉันแก้ไขปัญหาได้ ขอขอบคุณ!
Eduardo B.

11

นี่คือขั้นตอนของฉันในการทำสิ่งนี้:

/etc/init.d/mysql stop
sudo killall mysqld_safe
sudo killall mysqld
sudo mysqld_safe --skip-grant-tables &
mysql -u root
use mysql;
update user set password=PASSWORD("mynewpassword") where User='root';
update user set plugin="mysql_native_password";
quit;
/etc/init.d/mysql stop
sudo kill -9 $(pgrep mysql)
/etc/init.d/mysql start

1
ตอนนี้หลังจาก "mysql -u root" ฉันได้รับ: ข้อผิดพลาด 1524 (HY000): ไม่ได้โหลด 'root' ของปลั๊กอิน
dxvargas

ดูเหมือนว่าคุณจะรวมข้อความค้นหา UPDATE สองข้อความ คุณตั้ง plugin = "root" โดยบังเอิญหรือไม่
Adam Plocher
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.