Vì tôi đã dành khá nhiều thời gian để giải quyết vấn đề này và luôn quay lại trang này khi tìm kiếm lỗi này, tôi sẽ để lại giải pháp của mình ở đây với hy vọng rằng ai đó sẽ tiết kiệm thời gian mà tôi đã mất. Mặc dù trong trường hợp của tôi, tôi đang sử dụng mariadb thay vì MySql, bạn vẫn có thể điều chỉnh giải pháp này theo nhu cầu của mình.
Vấn đề của tôi
giống nhau, nhưng thiết lập của tôi hơi khác một chút (mariadb thay vì mysql):
Đã cài đặt mariadb bằng homebrew
$ brew install mariadb
Khởi động daemon
$ brew services start mariadb
Đã cố gắng kết nối và gặp lỗi được đề cập ở trên
$ mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Giải pháp của tôi
tìm ra my.cnf
tệp nào được sử dụng bởi mysql
(như được đề xuất trong nhận xét này ):
$ mysql --verbose --help | grep my.cnf
/usr/local/etc/my.cnf ~/.my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
kiểm tra xem tệp ổ cắm Unix đang chạy ở đâu (gần như được mô tả ở đây ):
$ netstat -ln | grep mariadb
.... /usr/local/mariadb/data/mariadb.sock
(bạn có thể muốn grep mysql
thay vì mariadb)
Thêm tệp socket mà bạn tìm thấy vào ~/.my.cnf
(tạo tệp nếu cần) (giả sử ~/.my.cnf
đã được liệt kê khi chạy mysql --verbose ...
-command từ phía trên):
[client]
socket = /usr/local/mariadb/data/mariadb.sock
Khởi động lại mariadb của bạn:
$ brew services restart mariadb
Sau đó, tôi có thể chạy mysql và nhận được:
$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Vì vậy, tôi chạy lệnh với các đặc quyền của người dùng siêu thay thế và sau khi nhập mật khẩu của mình, tôi nhận được:
$ sudo mysql -uroot
MariaDB [(none)]>
Ghi chú:
Tôi không chắc lắm về các nhóm mà bạn phải thêm socket, đầu tiên tôi có nó [client-server] nhưng sau đó tôi nhận ra [client] là đủ. Vì vậy, tôi đã thay đổi nó và nó vẫn hoạt động.
Khi chạy, mariadb_config | grep socket
tôi nhận được:
--socket [/tmp/mysql.sock]
điều này hơi khó hiểu vì có vẻ như đó /usr/local/mariadb/data/mariadb.sock
là nơi thực tế (ít nhất là trên máy của tôi)
Tôi tự hỏi tôi có thể định cấu hình /usr/local/mariadb/data/mariadb.sock
thực sự ở đâu /tmp/mysql.sock
để tôi có thể sử dụng cài đặt mặc định thay vì phải chỉnh sửa .my.cnf
(nhưng giờ tôi quá mệt mỏi để tìm ra điều đó ...)
Tại một số điểm, tôi cũng đã làm những điều được đề cập trong các câu trả lời khác trước khi đưa ra điều này.