Không thể kết nối với máy chủ MySQL cục bộ thông qua socket homebrew


109

Gần đây tôi đã thử cài đặt MySQL bằng homebrew ( brew install mysql) và khi tôi cố gắng chạy nó, tôi gặp lỗi sau:

LỖI 2002 (HY000): Không thể kết nối với máy chủ MySQL cục bộ thông qua socket '/tmp/mysql.sock' (2)

Không có /tmp/mysql.sockcũng không có /var/lib/mysql.sock.

Tôi đã tìm kiếm và không tìm thấy bất kỳ mysql.socktệp nào .

Làm thế nào tôi có thể sửa lỗi này?


Bạn có thể xem liên kết này câu trả lời của GeekHades. stackoverflow.com/questions/4847069/…
GeekHades

Tôi đã cài đặt mysql và gặp sự cố tương tự sau khi pin máy tính xách tay của tôi bị chết và buộc phải tắt hoàn toàn. Nó đáng để chạy mysqldđể kiểm tra mọi thứ và đảm bảo MySQL tắt đúng cách lần trước. Nếu nó bị tắt 'bẩn' (ví dụ: nếu pin máy tính xách tay buộc hệ thống tắt), điều này sẽ làm sạch nó. Sau đó, bạn có thể khởi động máy chủ MySQL lần nữa: mysql.server start.
Dave Everitt

1
Câu trả lời này phù hợp với tôi: stackoverflow.com/a/6378429/2641861
ArnoHolo

Điều này xảy ra với tôi sau khi khôi phục Mac Mini mới từ bản sao lưu Time Machine. Tôi đã phải gỡ cài đặt mysql@5.7 và cài đặt lại nó để nó bắt đầu hoạt động. Bắn một cái búa nhưng tương đối không đau vì tất cả các cấu hình của tôi đã được giữ lại.
Joshua Pinter,

Câu trả lời:


93

Khi bạn có máy chủ chạy qua

mysql.server start

bạn sẽ thấy ổ cắm trong /tmp/mysql.sock . Tuy nhiên, hệ thống có vẻ mong đợi nó trong /var/mysql/mysql.sock . Để khắc phục điều này, bạn phải tạo một liên kết biểu tượng trong / var / mysql :

sudo mkdir /var/mysql

sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock

Điều này đã giải quyết nó cho tôi. Bây giờ phpMyAdmin của tôi hoạt động vui vẻ với localhost 127.0.0.1 .

Tín dụng được chuyển đến Henry


1
Điều này cũng giải quyết vấn đề của tôi với việc Wordpress không kết nối được với mySQL. Cảm ơn một lần nữa
Ayoub

20
Khi tôi cố gắng mysql.server starttôi nhận được ERROR! The server quit without updating PID file (/usr/local/var/mysql/lyahdav-C02R32HCG8WM.pid). Tôi cần một phiên bản MySQL cũ hơn, được cài đặt qua brew install mysql@5.6.
Liron Yahdav

3
đang chạy. mysql.server startđã sửa nó cho tôi
ivange94

@Liron, bạn đã khắc phục được sự cố mà bạn đang gặp phải chưa? Tôi đang đối mặt với vấn đề tương tự mà không có sự giúp đỡ.
Buddy

@EB đã lâu kể từ khi tôi gặp sự cố này nhưng nhìn lại nhận xét của tôi, bạn đã thử giải pháp thay thế để cài đặt phiên bản MySQL cũ hơn chưa? Ngoài ra, tôi không có ý tưởng rất tiếc.
Liron Yahdav

61

Có vẻ như máy chủ mysql của bạn chưa khởi động. Tôi thường chạy lệnh dừng và sau đó bắt đầu lại:

mysqld stop
mysql.server start

Cùng một lỗi, và điều này phù hợp với tôi.


89
. LỖI! Máy chủ thoát mà không cập nhật tệp PID (/usr/local/var/mysql/myHostName.pid). ?
Pesulap

Tôi đã thực hiện một mysqld &nhận xét ở trên, nhưng tôi nghĩ rằng nó có thể sẽ làm điều tương tự như mysqld stop tôi khá chắc chắn trong trường hợp của tôi là do tắt máy không đúng cách.
Mitch VanDuyn

54

Tôi còn lại một số thư mục từ một cài đặt mysql (8.0) khác, chưa được gỡ bỏ.

Tôi đã giải quyết vấn đề này bằng cách làm như sau:

Lần đầu tiên gỡ cài đặt mysql

brew uninstall mysql@5.6

Xóa các thư mục / tệp chưa được xóa

rm -rf /usr/local/var/mysql
rm /usr/local/etc/my.cnf

Cài đặt lại mysql và liên kết nó

brew install mysql@5.6
brew link --force mysql@5.6

Bật và bắt đầu dịch vụ

brew services start mysql@5.6

3
Cảm ơn rất nhiều :) Tất cả các hướng dẫn được thất bại nhưng bạn
Vyacheslav Loginov

1
Cảm ơn bạn - câu trả lời này đã kết thúc 24 giờ của đập đầu vào tường
vladiim

1
Điều này cũng hiệu quả với tôi sau khi thử mọi thứ khác ngoài đó! Cảm ơn bạn!!!! :)
Eric

1
Có vẻ như vấn đề đối với tôi là tôi vẫn có / usr / local / var / mysql sau khi cài đặt trước đó. Xóa đã lừa! Cảm ơn đề nghị của bạn.
themantimes 8

Tôi cần chạy bước "mysql_secure_installation" do homebrew đề cập trước khi lỗi này biến mất.
searaig

27

Cố gắng kết nối bằng "127.0.0.1" thay vì "localhost".


2
@Esteban MySQL sẽ cố gắng kết nối với ổ cắm unix nếu bạn yêu cầu nó kết nối với "localhost". Nếu bạn yêu cầu nó kết nối với 127.0.0.1, bạn đang buộc nó kết nối với ổ cắm mạng. Vì vậy, có thể bạn đã cấu hình MySQL để chỉ lắng nghe ổ cắm mạng chứ không phải ổ cắm hệ thống tệp. (Nguồn: serverfault.com/a/295300/59101 )
Ardee Aram

Điều này đã giúp tôi buộc máy khách mysql sử dụng TCP socket, vì tôi đang chạy một đường hầm SSH trên localhost tới MySQL DB từ xa của mình.
Iow

22

1) Nếu bạn có thể thấy "mysql đã dừng" khi bạn chạy lệnh dưới đây;

brew services list

2) và nếu bạn có thể bắt đầu mysql bằng lệnh dưới đây;

mysql server start

điều này có nghĩa là; mysql có thể khởi động theo cách thủ công, nhưng nó không tự khởi động khi hệ điều hành được khởi động. Thêm mysql vào các dịch vụ sẽ khắc phục sự cố này. Để làm như vậy, bạn có thể chạy lệnh dưới đây;

brew services start mysql

Sau đó, bạn có thể khởi động lại hệ điều hành của mình và thử kết nối với mysql để xem nó có tự động khởi động hay không. Tôi đã làm như vậy và ngừng nhận được lỗi dưới đây;

LỖI 2002 (HY000): Không thể kết nối với máy chủ MySQL cục bộ thông qua socket '/tmp/mysql.sock' (2)

Tôi hi vọng cái này giúp được.


@berk nó giúp trong trường hợp của tôi để get reid của lỗi nhưng nhắc lỗi khác 'ERROR 1045 (28000): Truy cập bị từ chối cho người dùng sử dụng' @' localhost '(sử dụng mật khẩu: NO)'
Pratik Khadka

Xin chào @PratikKhadka, lỗi bạn gặp phải bây giờ có nghĩa là mysql đang chạy và bạn gặp sự cố xác thực. Theo thông báo lỗi bạn đã đăng, bạn đang sử dụng tên người dùng là 'người dùng' và không sử dụng mật khẩu. Bạn nên sử dụng tên người dùng và mật khẩu hợp lệ. Tôi đề nghị bạn kiểm tra liên kết sau đây; " Forum.mysql.com/read.php?34,140320,140324 "
Berk

Không cần khởi động lại hệ điều hành, chỉ cần chạy "dịch vụ bia bắt đầu mysql" phù hợp với tôi. Cảm ơn!
AKS

Xin chào @AKS, bạn nói đúng. Khởi động lại là không cần thiết để làm cho nó hoạt động. Tôi đã chỉnh sửa câu trả lời để giải thích lý do tại sao yêu cầu khởi động lại. Cần phải xem mysql có tự động khởi động khi hệ điều hành được khởi động hay không. Cảm ơn bạn đã phản hồi!
Berk

5

Tệp /tmp/mysql.sockcó thể là một Named-Pipe, vì nó nằm trong một thư mục tạm thời. Đường ống được đặt tên là một Tệp đặc biệt không bao giờ được lưu trữ vĩnh viễn.

Nếu chúng tôi tạo hai chương trình và chúng tôi muốn một chương trình gửi thông báo đến một chương trình khác, chúng tôi có thể tạo một tệp văn bản. Chúng tôi có một chương trình ghi một cái gì đó vào tệp văn bản và chương trình kia đọc những gì chương trình khác của chúng tôi đã viết. Đường ống là vậy, ngoại trừ nó không ghi tệp vào đĩa cứng máy tính của chúng ta, IE không lưu trữ tệp vĩnh viễn (giống như khi chúng ta tạo và lưu tệp đó).

Ổ cắm giống hệt như Ống. Sự khác biệt là các Sockets thường được sử dụng qua mạng - giữa các máy tính. Một Socket gửi thông tin đến một máy tính khác hoặc nhận thông tin từ một máy tính khác. Cả Pipes và Sockets đều sử dụng một tệp tạm thời để chia sẻ để chúng có thể 'giao tiếp'.

Rất khó để phân biệt MySql nào đang sử dụng trong trường hợp này. Không thành vấn đề.

Lệnh mysql.server startsẽ lấy 'máy chủ' (chương trình) chạy vòng lặp vô hạn của nó sẽ tạo tệp đặc biệt đó và đợi các thay đổi ( listenđể ghi).

Sau đó, một vấn đề phổ biến có thể là chương trình MySql không có quyền tạo tệp trên máy của bạn, vì vậy bạn có thể phải cấp cho nó đặc quyền root

sudo mysql.server start

Điều này làm việc tuyệt vời, cảm ơn. Tôi chỉ chạy mysql.server start, mysql.server stopvà sau đó bắt đầu lại dịch vụ thông qua homebrew với brew services start mysql@5.7và mọi thứ diễn ra suôn sẻ.
taylorthurlow

4

Sau khi cài đặt macos mojave, phải xóa thư mục mysql bên dưới /usr/local/var/mysqlvà sau đó cài đặt lại thông qua brew install mysqlnếu không những thứ liên quan đến quyền sẽ xuất hiện khắp nơi.


Tôi giải quyết vấn đề của tôi với câu trả lời của bạn, tôi đã cài đặt trước đó mysql và sau đó tryied để hạ cấp xuống mysql@5.6
Rodrirokr

Cảm ơn anh bạn. nó cũng giải quyết được vấn đề của tôi. gỡ bỏ / usr / local / var / mysql và cài đặt lại là giải pháp cho tôi.
Oğuz Can Sertel

1
Hãy cẩn thận: xóa /usr/local/var/mysqlbạn cũng sẽ xóa tất cả cơ sở dữ liệu hiện có của bạn!
Leonardo

3

Tôi gặp lỗi tương tự và đây là điều đã giúp tôi:

$ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
$launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
$mysql -uroot
mysql>

3

Chỉ để thêm vào những câu trả lời này, Trong trường hợp của tôi, tôi không có máy chủ mySQL cục bộ, nó đang chạy bên trong vùng chứa docker. Vì vậy, tệp socket không tồn tại và sẽ không thể truy cập được đối với máy khách "mysql".

Tệp sock được tạo bởi mysqld và mysql sử dụng nó để giao tiếp với nó. Tuy nhiên, nếu máy chủ mySql của bạn không chạy cục bộ, nó không yêu cầu tệp sock.

Bằng cách chỉ định tên máy chủ / ip, tệp sock không cần thiết, ví dụ:

mysql --host=127.0.0.1 --port=3306 --user=xyz --password=xyz

3

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.cnftệ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 mysqlthay 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ú:

  1. 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.

  2. Khi chạy, mariadb_config | grep sockettô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.socklà nơi thực tế (ít nhất là trên máy của tôi)

  3. Tôi tự hỏi tôi có thể định cấu hình /usr/local/mariadb/data/mariadb.sockthự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 đó ...)

  4. 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.


2

Bạn sẽ cần chạy mysql_install_db- cách dễ nhất là nếu bạn đang ở trong thư mục cài đặt:

$ cd /usr/local/Cellar/mysql/<version>/ 
$ mysql_install_db

Ngoài ra, bạn có thể cung cấp mysql_install_dbmột basedirtham số như sau:

$ mysql_install_db --basedir="$(brew --prefix mysql)"

2

Tôi đã gặp phải vấn đề tương tự trên máy mac của mình và đã giải quyết nó bằng cách làm theo các hướng dẫn sau

https://mariadb.com/resources/blog/installing-mariadb-10116-mac-os-x-homebrew

Nhưng đừng quên giết hoặc gỡ cài đặt phiên bản cũ trước khi tiếp tục.

Lệnh:

brew uninstall mariadb

xcode-select --install

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" - See more at: https://mariadb.com/resources/blog/installing-mariadb-10116-mac-os-x-homebrew#sthash.XQoxRoJp.dpuf

brew doctor

brew update

brew info mariadb

brew install mariadb

mysql_install_db

mysql.server start

1
Vui lòng giải thích bằng một số ví dụ ngắn gọn về cách liên kết bạn cung cấp đã giúp bạn ra sao. Các liên kết có thể biến mất và do đó đây có thể là lý do khiến câu trả lời của bạn có thể bị xóa.
Kurt Van den Branden

2

Sau khi khởi động lại, tôi không thể kết nối với mariadb cục bộ, một tìm kiếm cũng đưa tôi đến trang này và tôi muốn chia sẻ giải pháp của mình với bạn.

Tôi nhận thấy rằng thư mục my.cnf.d trong / usr / local / etc / bị thiếu.

Đây là một lỗi đã biết với homebrew được mô tả và giải quyết ở đó. https://github.com/Homebrew/homebrew-core/issues/36801

cách nhanh chóng để khắc phục: mkdir /usr/local/etc/my.cnf.d


Điều này đã làm việc cho tôi. Không thể kết nối với mariadb cục bộ sau khi brew updatevà khởi động lại. brew services listkết quả là hiển thị trạng thái mariadb startedbằng màu vàng. Cảm ơn vì tiền hỗ trợ.
nterms

1

Khi chạy mysql_secure_installation và nhập mật khẩu mới, tôi nhận được:


Lỗi: Không thể kết nối với máy chủ MySQL cục bộ thông qua socket '/tmp/mysql.sock' (2)


Tôi nhận thấy khi thử những điều sau từ câu trả lời này :

netstat -ln | grep mysql

Nó không trả về bất cứ thứ gì và tôi hiểu điều đó có nghĩa là không có tệp .sock.

Vì vậy, tôi đã thêm phần sau vào tệp my.cnf của mình (trong /etc/my.cnf hoặc trong trường hợp của tôi là /usr/local/etc/my.cnf ).

Dưới:

[mysqld]
socket=/tmp/mysql.sock

Dưới:

[client]
socket=/tmp/mysql.sock

Điều này dựa trên bài đăng này .

Sau đó dừng / khởi động lại mysql và thử lại mysql_secure_installation , cuối cùng cho phép tôi nhập mật khẩu gốc mới của mình và tiếp tục với các tùy chọn thiết lập khác.

Tôi hi vọng điêu nay se giup được ai đo. Trời đất, tôi ghét thứ này ...


0

chỉ để hoàn thành chủ đề này. do đó MAMP (PRO) được sử dụng khá thường xuyên

con đường ở đây là

/Applications/MAMP/tmp/mysql/mysql.sock

0

Tôi đã khởi động mysql theo cách thủ công trong ngăn tùy chọn hệ thống bằng cách khởi chạy cơ sở dữ liệu và sau đó khởi động nó. Điều này đã giải quyết vấn đề của tôi.


0

Trong trường hợp của tôi, thủ phạm đã được tìm thấy trong các tệp nhật ký:

$ tail /usr/local/var/mysql/<hostname>.lan.err
2019-09-19  7:32:21 0 [ERROR] InnoDB: redo log file './ib_logfile0' exists. Creating system tablespace with existing redo log files is not recommended. Please delete all redo log files before creating new system tablespace.
2019-09-19  7:32:21 0 [ERROR] InnoDB: Database creation was aborted with error Generic error. You may need to delete the ibdata1 file before trying to start up again.

Vì vậy, tôi đã đổi tên ib_logfile0để loại bỏ lỗi (tôi phải làm tương tự với ib_logfile1sau đó).

mv /usr/local/var/mysql/ib_logfile0 /usr/local/var/mysql/ib_logfile0_bak
mv /usr/local/var/mysql/ib_logfile1 /usr/local/var/mysql/ib_logfile1_bak
brew services restart mariadb

0

Tôi đã có cùng một vấn đề. Sau khi thử tất cả các phương pháp này mà không thành công, tôi đã làm như sau:

tail -f the-mysql-or-maria-db-error-file.err

trong một bảng điều khiển khác:

brew services restart mariadb

Tôi đã thấy lỗi sau:

"MAC HOMEBREW Khôi phục sự cố không thành công. Hãy khắc phục sự cố (ví dụ: nếu đó là lỗi hết bộ nhớ) và khởi động lại hoặc xóa nhật ký tc và khởi động mysqld bằng"

Vì vậy, tôi đã thay đổi tc.logextesion thành tc.log.txtvà khởi động lại mariadb

brew services restart mariadb

và thực hiện!



0

Đối với tôi, tôi đã cài đặt mariadbtừ lâu, sau đó cài đặt mysql@5.7.

Khi tôi thực thi mysql -uroot, tôi gặp lỗi: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Đọc câu trả lời:

  • Tôi đã gỡ cài đặt mariadb
  • Đã xóa thư mục /usr/local/var/mysql
  • Chạy lệnh mysqld --initialize

Sau đó, tôi đã có thể mysql -uroot -p


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.