Ubuntu 15.10 mysql error 1524 - unix_socket

51

Di Ubuntu 15.10, pada suatu titik (mungkin setelah menginstal & menghapus mariadb) mysql tidak dapat beroperasi. Tugas naik, tetapi server sedang down.

Atas perintah:

mysql -u root -p

sistem membalas dengan seperti:

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

Tidak ada cara untuk masuk, tidak ada plugin yang ditemukan, tidak ada kesalahan dalam file konfigurasi (semua ke default).

Bagaimana cara mendapatkan kembali kendali, dan membuat server mysql berjalan?

Starmaster Hydra
sumber
Saya tidak terbiasa dengan kesalahan khusus ini tetapi melihat diskusi ini: lists.launchpad.net/maria-developers/msg08177.html
Yos
@ Jo: diskusi itu, mungkin untuk situasi yang sama, tidak menawarkan solusi. Saya sudah banyak mencari di Google, tetapi saya belum menemukan solusi lengkap yang terbuka. Lagi pula, saya sudah memposting jawaban yang berfungsi.
Hydra Starmaster
Tentang alasan pesan kesalahan: Plugin unix_socket adalah bagian dari MariaDB (bukan MySQL) dan perlu dimuat agar hibah dapat berfungsi: mariadb.com/kb/en/library/authentication-plugin-unix-socket
JonnyJD

Jawaban:

94

"Unix_socket" telah dipanggil oleh proses otentikasi mysql (mungkin terkait dengan migrasi sebagian database ke mariadb, sekarang dihapus). Untuk mengembalikan semuanya, lanjutkan su:

sudo su

kemudian ikuti:

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

Ini sepenuhnya akan menghentikan mysql, memotong otentikasi pengguna (tidak perlu kata sandi) dan terhubung ke mysql dengan "root" pengguna.

Sekarang, di konsol mysql, gunakan db administrasi mysql:

use mysql;

Untuk mengatur ulang kata sandi root ke kata sandi baru (ubah sesuka Anda), hanya untuk memastikannya:

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

Dan yang ini akan menimpa metode otentikasi, menghapus permintaan unix_socket (dan yang lainnya), memulihkan metode kata sandi yang normal dan berfungsi:

update user set plugin="mysql_native_password";

Keluar dari konsol mysql:

quit;

Hentikan dan mulai semua yang terkait dengan mysql:

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

Jangan lupa ke exitmode su.

Sekarang server mySQL aktif dan berjalan. Anda bisa login dengan root:

mysql -u root -p

atau apapun yang kamu inginkan. Penggunaan kata sandi berfungsi.

Itu dia.

Starmaster Hydra
sumber
Saya mysqld_safetidak punya pilihan seperti --skip-grant-tables..apa yang memberi?
heemayl
Saya menggunakan mysqld 5.6.27-0ubuntu1. Anda harus menemukan opsi itu dengan melihat:mysqld --verbose --help
Hydra Starmaster
2
Ini membuat saya pergi. Dengan beberapa perbedaan bukannya mysqld_safeyang mengeluh argumen --skip-grant-tables tidak ada yang saya gunakan mysqld. Namun itu terus mengeluh itu tidak bisa membuat file socket /var/run/mysqld/. Saya memeriksa konfigurasi apparmor dan memiliki izin yang tepat. Untuk memperbaiki ini saya harus mkdir /var/run/mysqld/dan kemudian memberikan izin benar-benar terbuka: chmod -R 777 /var/run/mysqld/. Lalu akhirnya saya bisa memulai daemon dan mengubah plugin menjadi 'mysql_native_password'.
dennmat
1
Tabel pengguna saya tidak memiliki bidang kata sandi (Ubuntu 16 mysql 5.7.13). Saya menggunakan SQL ini: UPDATE mysql.user SET authentication_string = PASSWORD ('foobar123'), password_expired = 'N' WHERE Pengguna = 'root' AND Host = 'localhost';
Anthony Scaife
Instruksi di sini singkat dan membantu saya menyelesaikan masalah. Terima kasih!
Eduardo B.
11

Inilah langkah-langkah saya melakukan ini:

/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
Roy Yan
sumber
1
Sekarang setelah "mysql -u root" saya dapatkan: ERROR 1524 (HY000): Plugin 'root' tidak dimuat
dxvargas
Kedengarannya seperti Anda mencampuradukkan dua permintaan UPDATE. Apakah Anda menyetel plugin = "root" secara tidak sengaja?
Adam Plocher