MySQL không thành công trên: mysql “ERROR 1524 (HY000): Plugin 'auth_socket' không được tải”


128

Môi trường địa phương của tôi là:

  • Ubuntu 16.04 mới
  • với PHP 7
  • với MySQL 5.7 đã cài đặt

    sudo apt-get install mysql-common mysql-server

Khi tôi cố gắng đăng nhập vào MySQL (thông qua CLI):

mysql -u root -p

Tôi đã gặp phải một vấn đề theo chu kỳ với 3 bước.

1) Đầu tiên là một số vấn đề về ổ cắm

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

Giải pháp: khởi động lại PC.

Dẫn đến một lỗi khác:

2) Với quyền truy cập bị từ chối

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

Sự cố có thể xảy ra? Mật khẩu sai cho người dùng "root"!

Giải pháp: đặt lại mật khẩu gốc với hướng dẫn này .

Với mật khẩu chính xác và ổ cắm hoạt động, có lỗi cuối cùng.

3) Plugin xác thực không chính xác

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

Ở đây tôi đã dừng lại hoặc bằng cách nào đó đã đến 1) một lần nữa.


1
Rất vui vì nó hoạt động tốt cho bạn :) cảm ơn bạn đã liên hệ!
Tomáš Votruba

Câu trả lời:


374

Tôi có một giải pháp!

Khi đặt lại mật khẩu gốc ở bước 2), cũng thay đổi plugin auth thành 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;

Điều này cho phép tôi đăng nhập thành công!


Giải pháp toàn mã

1. chạy lệnh bash

1. trước tiên, hãy chạy các lệnh bash này

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. sau đó chạy lệnh mysql => copy paste cái này cli thủ công

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. chạy nhiều lệnh bash hơn

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. Vấn đề ổ cắm (từ nhận xét của bạn)

Khi bạn gặp lỗi ổ cắm , một cộng đồng đã đưa ra 2 giải pháp khả thi:

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

(cảm ơn @Cerin)

Hoặc là

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

(cảm ơn @Peter Dvukhrechensky)


Đường mù và lỗi cạnh có thể xảy ra

Sử dụng 127.0.0.1 thay vì localhost

mysql -uroot # "-hlocalhost" is default

Có thể dẫn đến "thiếu tệp" hoặc lỗi slt.

mysql -uroot -h127.0.0.1

Hoạt động tốt hơn.

Bỏ qua vấn đề ổ cắm

Tôi đã tìm nhiều cách để tạo mysqld.socktệp, thay đổi quyền truy cập hoặc liên kết biểu tượng nó. Rốt cuộc nó không phải là vấn đề.

Bỏ qua my.cnftệp

Vấn đề cũng không có ở đó. Nếu bạn không chắc chắn, điều này có thể giúp bạn .


3
Cảm ơn vì điều này. Đây cũng là một câu trả lời tuyệt vời về cách đặt lại pass root mysql, vì vậy bạn có thể muốn chỉnh sửa một chút tiêu đề để giúp nó xuất hiện trước khi chúng ta gặp phải sự cố socket.
Wtower

1
Tôi rất vui vì nó đã giúp. Bạn sẽ chỉnh sửa tiêu đề như thế nào để giữ nguyên thông điệp gốc? Tôi hiểu giải pháp yêu cầu đặt lại mật khẩu, nhưng nó không giải quyết được vấn đề trong tiêu đề. Đây là sự thất bại phức tạp hơn của nhiều điểm hơn. Đối với thiết lập lại mật khẩu gốc, tôi muốn đi ở đây: stackoverflow.com/a/6401963/1348344
Tomáš Votruba

1
@matanster Không thực sự, đây là một thử nghiệm thuần túy từng bước được xây dựng thất bại. Bạn sử dụng hệ điều hành nào?
Tomáš Votruba

8
Cuộc gọi mysqld_safe của bạn không chính xác. Thay vào đó, bạn cần chạy:sudo mkdir -p /var/run/mysqld; sudo chown mysql /var/run/mysqld; sudo mysqld_safe --skip-grant-tables &
Cerin

3
Vui lòng thêm một giải pháp khả thi về vấn đề ổ cắm vào câu trả lời. Như thế này mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqldNó có thể tiết kiệm thời gian của một ai đó
Peter Dvukhrechensky

41

Bạn có thể thử như sau nó phù hợp với tôi.

Khởi động máy chủ:

sudo service mysql start

Bây giờ, vào thư mục sock:

cd /var/run

Sao lưu chiếc tất:

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

Dừng máy chủ:

sudo service mysql stop

Khôi phục chiếc tất:

sudo mv ./mysqld.bak ./mysqld

Khởi động mysqld_safe:

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

Init shell mysql:

 mysql -u root

Đổi mật khẩu:

Do đó, trước tiên hãy chọn cơ sở dữ liệu

mysql> use mysql;

Bây giờ hãy nhập hai truy vấn dưới đây:

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

Bây giờ, mọi thứ sẽ ổn.

mysql> flush privileges;
mysql> quit;

Để kiểm tra:

mysql -u root -p

làm xong!

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

Kiểm tra bây giờ hostname/phpmyadmin

Username: root

Password: 123456

Để biết thêm chi tiết, vui lòng kiểm tra Cách đặt lại mật khẩu đã quên phpmyadmin trong Ubuntu


2
chỉ điều này làm việc cho tôi! sao lưu và phục hồi ổ cắm là khá thông minh
touhid udoy

1
LỖI 1045 (28000): Quyền truy cập bị từ chối đối với người dùng 'root' @ 'localhost' (sử dụng mật khẩu: CÓ) trước khi "xong!" dòng trong câu trả lời của bạn khi cố gắng đăng nhập bằng 123456.
trainoasis

Tôi đã giải quyết khi thực hiện các bước được mô tả trong phpmyadmin (tức là thay đổi mật khẩu, thay đổi plugin). Vì một số lý do 'sethentic_string = password (...)' đã khiến nó ngừng hoạt động (Lỗi 1045 (28000): Truy cập bị từ chối ...).
Fil

12

Các mysqllệnh theo mặc định sử dụng ổ cắm UNIX để kết nối với MySQL.

Nếu đang sử dụng MariaDB, bạn cần tải Plugin xác thực Unix Socket ở phía máy chủ.

Bạn có thể làm điều đó bằng cách chỉnh sửa [mysqld]cấu hình như sau:

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

Tùy thuộc vào phân phối, tệp cấu hình thường được đặt tại /etc/mysql/hoặc/usr/local/etc/mysql/


1
Cái này. Tất cả các câu trả lời khác giải thích cách khắc phục lỗi. Phần này giải thích cách GIẢI QUYẾT nó.
Envite

Nếu bạn đang sử dụng MariaDB 10.4.3 trở lên, thì plugin unix_socket auth phải được cài đặt theo mặc định, nhưng nếu bạn tham chiếu không chính xác nó là plugin = "auth_socket", thay vì plugin = "unix_socket" khi cập nhật "người dùng", bạn sẽ nhận được thông báo hơi gây hiểu lầm này. Câu trả lời của tôi giải thích cặn kẽ về cách tôi đã làm rối tung chuyện này.
Rohn Adams

9

Bạn có thể thử một số bước sau:

Dừng dịch vụ Mysql lần 1 sudo /etc/init.d/mysql stop

Đăng nhập với quyền root mà không cần mật khẩu sudo mysqld_safe --skip-grant-tables &

Sau khi đăng nhập thiết bị đầu cuối mysql, bạn cần thực hiện các lệnh nhiều hơn:

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

Sau khi bạn khởi động lại máy chủ mysql của mình Nếu bạn vẫn gặp lỗi, bạn phải truy cập: Đặt lại mật khẩu gốc MySQL 5.7 Ubuntu 16.04


8

Đối với Ubuntu 18.04 và mysql 5.7

  • bước 1: sudo mkdir /var/run/mysqld;

    bước 2: sudo chown mysql /var/run/mysqld

    bước 3: sudo mysqld_safe --skip-grant-tables& thoát (sử dụng thoát nếu nó bị kẹt)

đăng nhập vào mysql mà không cần mật khẩu

  • bước 4: sudo mysql --user=root mysql

    bước 5: SELECT user,authentication_string,plugin,host FROM mysql.user;

    bước 6: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'

bây giờ đăng nhập với

  • mysql -u root -p <root>

1
nhưng tôi có thể đặt pass cho root ở bước nào? bởi vì tôi đã thử $ mysql -u root -pnhưng quyền truy cập bị từ chối. Access denied for user 'root'@'localhost' (using password: YES)Tôi đã cố nhập mật khẩu 'CÓ'
AlexNikonov

4

Hãy thử nó: sudo mysql_secure_installation

Làm việc trong Ubuntu 18.04


1

Trong trường hợp ai đó hạ cánh ở đây sau khi mắc lỗi tương tự tôi đã làm:

  1. Đã chuyển sang plugin="mysql_native_password"tạm thời. Đã thực hiện nhiệm vụ của tôi.
  2. Đã cố gắng chuyển trở lại plugin "auth_socket", nhưng đã tham chiếu không chính xác plugin="auth_socket"dẫn đếnmysql "ERROR 1524 (HY000): Plugin 'auth_socket' is not loaded"
  3. Thiếu cách đăng nhập để khắc phục lỗi này, tôi buộc phải dừng mysql và sử dụng mysql_safeđể bỏ qua xác thực để chuyển sang plugin thích hợpplugin="unix_socket"

Hy vọng rằng điều này sẽ giúp ai đó tiết kiệm thời gian nếu họ nhận được thông báo lỗi của người đăng ban đầu, nhưng nguyên nhân thực sự là do tên plugin, không thực sự thiếu sự tồn tại của chính plugin "auth_socket", theo tài liệu MariaDB :

Trong MariaDB 10.4.3 trở lên, plugin xác thực unix_socket được cài đặt theo mặc định và nó được sử dụng bởi tài khoản người dùng 'root' @ 'localhost' theo mặc định.


-7

Bạn có thể thử với các lệnh dưới đây:

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.

Bạn có thể giải thích thêm không? Khởi động lại máy chủ giải quyết thông báo lỗi như thế nào?
Nico Haase,
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.