Karena saya menghabiskan cukup banyak waktu untuk mencoba menyelesaikan ini dan selalu kembali ke halaman ini ketika mencari kesalahan ini, saya akan meninggalkan solusi saya di sini dengan harapan seseorang menghemat waktu saya yang hilang. Meskipun dalam kasus saya, saya menggunakan mariadb daripada MySql, Anda mungkin masih dapat menyesuaikan solusi ini dengan kebutuhan Anda.
Masalahku
sama, tetapi penyiapan saya sedikit berbeda (mariadb, bukan mysql):
Memasang mariadb dengan homebrew
$ brew install mariadb
Memulai daemon
$ brew services start mariadb
Mencoba menyambungkan dan mendapatkan kesalahan yang disebutkan di atas
$ mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Solusi saya
cari tahu my.cnf
file mana yang digunakan oleh mysql
(seperti yang disarankan dalam komentar ini ):
$ mysql --verbose --help | grep my.cnf
/usr/local/etc/my.cnf ~/.my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
periksa di mana file socket Unix berjalan (hampir seperti yang dijelaskan di sini ):
$ netstat -ln | grep mariadb
.... /usr/local/mariadb/data/mariadb.sock
(Anda mungkin ingin grep mysql
daripada mariadb)
Tambahkan file soket yang Anda temukan ~/.my.cnf
(buat file jika perlu) (dengan asumsi ~/.my.cnf
terdaftar saat menjalankan mysql --verbose ...
perintah-dari atas):
[client]
socket = /usr/local/mariadb/data/mariadb.sock
Mulai ulang mariadb Anda:
$ brew services restart mariadb
Setelah ini saya bisa menjalankan mysql dan mendapatkan:
$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Jadi saya menjalankan perintah dengan hak superuser sebagai gantinya dan setelah memasukkan kata sandi saya, saya mendapat:
$ sudo mysql -uroot
MariaDB [(none)]>
Catatan:
Saya tidak begitu yakin tentang grup di mana Anda harus menambahkan soket, pertama saya memilikinya [client-server] tetapi kemudian saya pikir [klien] sudah cukup. Jadi saya mengubahnya dan masih berfungsi.
Saat menjalankan mariadb_config | grep socket
saya mendapatkan:
--socket [/tmp/mysql.sock]
yang agak membingungkan karena tampaknya itu /usr/local/mariadb/data/mariadb.sock
adalah tempat sebenarnya (setidaknya di mesin saya)
Saya bertanya-tanya di mana saya dapat mengonfigurasi /usr/local/mariadb/data/mariadb.sock
agar benar-benar menjadi /tmp/mysql.sock
sehingga saya dapat menggunakan pengaturan default daripada harus mengedit saya .my.cnf
(tetapi saya terlalu lelah sekarang untuk mengetahuinya ...)
Pada titik tertentu saya juga melakukan hal-hal yang disebutkan dalam jawaban lain sebelum mengajukan ini.