MySQL gagal di: mysql “ERROR 1524 (HY000): Plugin 'auth_socket' tidak dimuat”

128

Lingkungan lokal saya adalah:

  • Ubuntu 16.04 baru
  • dengan PHP 7
  • dengan menginstal MySQL 5.7

    sudo apt-get install mysql-common mysql-server

Ketika saya mencoba masuk ke MySQL (melalui CLI):

mysql -u root -p

Saya menemukan masalah siklik dengan 3 langkah.

1) Pertama adalah beberapa masalah soket

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

Solusi: Mulai ulang PC.

Yang menyebabkan kesalahan lain:

2) Dengan akses ditolak

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

Masalah yang mungkin terjadi? Kata sandi salah untuk pengguna "root"!

Solusi: setel ulang kata sandi root dengan tutorial ini .

Dengan kata sandi yang benar dan soket yang berfungsi, ada kesalahan terakhir.

3) Plugin auth salah

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

Di sini saya berhenti atau entah bagaimana harus 1) lagi.

Tomáš Votruba
sumber
1
Senang itu berfungsi baik untuk Anda :) terima kasih telah menghubungi!
Tomáš Votruba

Jawaban:

374

Saya punya solusi!

Saat mengatur ulang kata sandi root pada langkah 2), ubah juga plugin auth menjadi 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;

Ini memungkinkan saya untuk berhasil masuk!


Solusi kode lengkap

1. jalankan perintah bash

1. pertama, jalankan perintah bash ini

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. kemudian jalankan perintah mysql => salin tempel ini ke cli secara manual

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. jalankan lebih banyak perintah 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. Masalah soket (dari komentar Anda)

Saat Anda melihat kesalahan soket , komunitas datang dengan 2 kemungkinan solusi:

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

(terima kasih kepada @Cerin)

Atau

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

(terima kasih kepada @Peter Dvukhrechensky)


Jalur buta dan kemungkinan kesalahan tepi

Gunakan 127.0.0.1 sebagai ganti localhost

mysql -uroot # "-hlocalhost" is default

Dapat menyebabkan "file hilang" atau kesalahan slt.

mysql -uroot -h127.0.0.1

Bekerja lebih baik.

Lewati masalah soket

Saya telah menemukan banyak cara untuk membuat mysqld.sockfile, mengubah hak akses atau menghubungkannya. Itu bukan masalahnya.

Lewati my.cnffile

Masalahnya juga tidak ada. Jika Anda tidak yakin, ini mungkin membantu Anda .

Tomáš Votruba
sumber
3
Terima kasih untuk ini. Ini juga merupakan jawaban yang sangat baik tentang cara mengatur ulang root pass mysql sehingga Anda mungkin ingin sedikit mengedit judul untuk membantunya muncul sebelum kami mengalami masalah soket.
Wtower
1
Saya senang ini membantu. Bagaimana Anda mengedit judul untuk menyimpan pesan asli? Saya mengerti solusinya perlu mengatur ulang kata sandi, tetapi itu tidak menyelesaikan masalah dalam judul. Ini adalah kegagalan yang lebih kompleks dari lebih banyak poin. Untuk
pengaturan
1
@matanster Tidak juga, ini murni uji coba langkah demi langkah yang dibuat. OS apa yang Anda gunakan?
Tomáš Votruba
8
Panggilan mysqld_safe Anda salah. Sebagai gantinya Anda harus menjalankan:sudo mkdir -p /var/run/mysqld; sudo chown mysql /var/run/mysqld; sudo mysqld_safe --skip-grant-tables &
Cerin
3
Harap tambahkan solusi yang mungkin dari masalah soket ke jawabannya. Seperti ini mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqldMungkin menghemat waktu seseorang
Peter Dvukhrechensky
41

Anda dapat mencoba sebagai berikut ini berhasil untuk saya.

Mulai server:

sudo service mysql start

Sekarang, Buka folder sock:

cd /var/run

Cadangkan kaus kaki:

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

Hentikan server:

sudo service mysql stop

Kembalikan kaus kaki:

sudo mv ./mysqld.bak ./mysqld

Mulai mysqld_safe:

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

Shell mysql init:

 mysql -u root

Ganti kata sandi:

Oleh karena itu, Pertama pilih database

mysql> use mysql;

Sekarang masukkan di bawah dua kueri:

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

Sekarang, semuanya akan baik-baik saja.

mysql> flush privileges;
mysql> quit;

Untuk mengecek:

mysql -u root -p

selesai!

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

Sekarang periksa hostname/phpmyadmin

Username: root

Password: 123456

Untuk lebih jelasnya silahkan cek Bagaimana mereset password phpmyadmin yang terlupa di Ubuntu

Bablu Ahmed
sumber
2
hanya ini yang berhasil untuk saya! backup dan restore socket cukup pintar
touhid udoy
1
ERROR 1045 (28000): Akses ditolak untuk 'root' @ 'localhost' pengguna (menggunakan kata sandi: YES) sebelum "selesai!" baris dalam jawaban Anda saat mencoba masuk dengan 123456.
trainoasis
Saya menyelesaikan melakukan langkah-langkah yang dijelaskan di phpmyadmin (yaitu mengubah kata sandi, mengubah plugin). Untuk beberapa alasan 'set authentication_string = password (...)' membuatnya berhenti berfungsi (Kesalahan 1045 (28000): Akses ditolak ...).
Fil
12

The mysqlperintah secara default menggunakan UNIX soket untuk menghubungkan ke MySQL.

Jika Anda menggunakan MariaDB, Anda perlu memuat Plugin Otentikasi Soket Unix di sisi server.

Anda dapat melakukannya dengan mengedit [mysqld]konfigurasi seperti ini:

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

Bergantung pada distribusinya, file konfigurasi biasanya terletak di /etc/mysql/atau/usr/local/etc/mysql/

rustyx.dll
sumber
1
Yang ini. Semua jawaban lainnya menjelaskan cara mengatasi kesalahan. Yang ini menjelaskan bagaimana MENYELESAIKAN itu.
Envite
Jika Anda menggunakan MariaDB 10.4.3 dan yang lebih baru, plugin auth unix_socket harus diinstal secara default, tetapi jika Anda salah mereferensikannya sebagai plugin = "auth_socket", alih-alih plugin = "unix_socket" saat memperbarui "user", Anda akan menerima pesan yang agak menyesatkan ini. Jawaban saya menjelaskan tentang bagaimana saya mengacaukannya.
Rohn Adams
9

Anda dapat mencoba beberapa langkah ini:

Hentikan Layanan Mysql 1st sudo /etc/init.d/mysql stop

Masuk sebagai root tanpa kata sandi sudo mysqld_safe --skip-grant-tables &

Setelah masuk terminal mysql Anda harus menjalankan perintah lebih lanjut:

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

Setelah Anda me-restart server mysql Anda Jika Anda masih menghadapi kesalahan, Anda harus mengunjungi: Reset MySQL 5.7 kata sandi root Ubuntu 16.04

Inderpal Singh
sumber
8

Untuk Ubuntu 18.04 dan mysql 5.7

  • Langkah 1: sudo mkdir /var/run/mysqld;

    Langkah 2: sudo chown mysql /var/run/mysqld

    langkah 3: sudo mysqld_safe --skip-grant-tables& keluar (gunakan berhenti jika macet)

masuk ke mysql tanpa kata sandi

  • langkah 4: sudo mysql --user=root mysql

    langkah 5: SELECT user,authentication_string,plugin,host FROM mysql.user;

    langkah 6: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'

sekarang login dengan

  • mysql -u root -p <root>
arunava maiti
sumber
1
tetapi pada langkah mana saya dapat mengatur pass untuk root? karena saya mencoba $ mysql -u root -ptetapi akses ditolak. Access denied for user 'root'@'localhost' (using password: YES)Saya mencoba memasukkan kata sandi 'YA'
AlexNikonov
4

Cobalah: sudo mysql_secure_installation

Bekerja di Ubuntu 18.04

Gorcer
sumber
1

Jika seseorang mendarat di sini setelah melakukan kesalahan yang sama dengan yang saya lakukan:

  1. Beralih ke plugin="mysql_native_password"sementara. Melakukan tugas saya.
  2. Mencoba beralih kembali ke plugin "auth_socket", tetapi salah mereferensikannya seperti plugin="auth_socket"yang terjadimysql "ERROR 1524 (HY000): Plugin 'auth_socket' is not loaded"
  3. Karena tidak memiliki cara untuk masuk untuk memperbaiki kesalahan ini, saya terpaksa harus menghentikan mysql dan menggunakan mysql_safeuntuk melewati otentikasi untuk beralih ke plugin yang sesuaiplugin="unix_socket"

Mudah-mudahan ini menghemat waktu seseorang jika mereka menerima pesan kesalahan poster asli, tetapi penyebab sebenarnya adalah kesalahan nama plugin, tidak benar-benar kekurangan keberadaan plugin "auth_socket" itu sendiri, yang menurut dokumentasi MariaDB :

Di MariaDB 10.4.3 dan yang lebih baru, plugin otentikasi unix_socket diinstal secara default, dan digunakan oleh akun pengguna 'root' @ 'localhost' secara default.

Rohn Adams
sumber
-7

Anda dapat mencoba dengan perintah di bawah ini:

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.
genghenggao
sumber
Bisakah Anda menjelaskannya lebih lanjut? Bagaimana memulai ulang server menyelesaikan pesan kesalahan yang diberikan?
Nico Haase