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


255

Tôi gặp lỗi sau khi thử kết nối với mysql:

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Có một giải pháp cho lỗi này? Điều gì có thể là lý do đằng sau nó?


Tôi đã trả lời điều này ở đây, vui lòng kiểm tra liên kết dưới đây: stackoverflow.com/a/35577309/4773290
Pratik Patil

Câu trả lời:


222

Bạn đang kết nối với "localhost" hay "127.0.0.1"? Tôi nhận thấy rằng khi bạn kết nối với "localhost", đầu nối ổ cắm được sử dụng, nhưng khi bạn kết nối với "127.0.0.1" thì đầu nối TCP / IP được sử dụng. Bạn có thể thử sử dụng "127.0.0.1" nếu đầu nối ổ cắm không được bật / hoạt động.


27
Trong trường hợp đó, có lẽ bạn nên kiểm tra xem máy chủ MYSQL của bạn có thực sự đang chạy hay không.
Jan Thomä

3
Bạn cũng có thể buộc sử dụng một ổ cắm với tham số ổ cắm (-S với / usr / bin / mysql) và buộc TCP / IP bằng cách cung cấp một cổng (-P với / usr / bin / mysql.)
Kaoru

Sử dụng một tên mạng đủ điều kiện khác với localhost làm việc cho tôi. Chỉ cần đảm bảo rằng nó được khai báo trong tệp 'máy chủ' phía máy khách.
Fabien Haddadi

2
Lưu ý đối với người dùng cygwin: nếu máy khách mysg của cygwin cố gắng kết nối với máy chủ WAMP mysql cục bộ, hãy sử dụng -h <tên máy chủ khác với localhost>. Đừng cố tạo một tệp mysql.sock và khai báo nó trong bất kỳ tệp my.cnf nào, nó sẽ không hoạt động.
Fabien Haddadi

Một tên máy chủ sai đã cho tôi cùng một lỗi chính xác. Nhìn vào /etc/hoststệp trong thùng chứa docker của tôi cho tôi thấy tên máy chủ MySql mysql. Sử dụng cùng tên máy chủ trong cấu hình kết nối của tôi đã giải quyết vấn đề.
Stephane

188

Đảm bảo rằng dịch vụ mysql của bạn đang chạy

service mysqld start

Sau đó, thử một trong các cách sau:

(nếu bạn chưa đặt mật khẩu cho mysql)

mysql -u root

nếu bạn đã đặt mật khẩu

mysql -u root -p

5
trên các bản phát hành mới hơn của debian: service mariadb startbởi vì mariadb.org/debian-9-release-mariadb-mysql-variant
Zahra

2
Đưa cho anh chàng đó một huy chương.
Siraj Alam

Đây là câu trả lời cho tôi. Vì tôi đang sử dụng mariadb, giải pháp là chạy như sau: "sudo systemctl start mariadb". Tất cả đều ổn sau đó.
mohsen

Trao huy chương cho @Zahra
Ahmed C

28

Nếu tập tin của tôi my.cnf (thường trong thư mục vv) được cấu hình đúng với

socket=/var/lib/mysql/mysql.sock

bạn có thể kiểm tra xem mysql có chạy bằng lệnh sau không:

mysqladmin -u root -p status

hãy thử thay đổi sự cho phép của bạn vào thư mục mysql. Nếu bạn đang làm việc tại địa phương, bạn có thể thử:

sudo chmod -R 777 /var/lib/mysql/

nó đã giải quyết nó cho tôi


Nó cũng hoạt động với tôi, nhưng sau khi tôi nâng cấp lên phiên bản mới nhất thì xuất hiện vấn đề này, tôi có thể biết tại sao điều này xảy ra không?
Ben

sudo chmod -R 777 / var / lib / mysql / Đã giải quyết cho tôi một vấn đề tôi gặp phải khi bắt đầu một
docker

23

Máy chủ MySQL không chạy hoặc đó không phải là vị trí của tệp ổ cắm của nó (kiểm tra my.cnf).


Tôi đã có vấn đề được mô tả ở trên và đây là vấn đề. Cảm ơn.
oshirowanen

3
Nơi nào sẽ được cài đặt Homebrew?
pal4life

19

Nhiều khả năng mysql.sockkhông tồn tại trong /var/lib/mysql/.

Nếu bạn tìm thấy cùng một tệp ở một vị trí khác thì hãy liên kết nó:

Ví dụ: tôi có nó trong /data/mysql_datadir/mysql.sock

Chuyển người dùng sang mysql và thực hiện như được đề cập dưới đây:

su mysql

ln -s /data/mysql_datadir/mysql.sock /var/lib/mysql/mysql.sock

Điều đó đã giải quyết vấn đề của tôi


đổi tên mysql.sock thành một cái gì đó khác, sau đó khởi động lại mysqld ("khởi động lại dịch vụ mysqld"), sau đó đổi tên một cái gì đó khác thành mysql.sock làm việc cho tôi. Một thay đổi nhỏ về câu trả lời này, vì vậy cảm ơn.
Phân tích mờ

Câu trả lời này có thể giúp định vị mysql.socktệp
Nobita

15

Nếu bạn đang sử dụng một RHEL gần đây, bạn có thể cần phải khởi động mariadb (một db mys db mã nguồn mở) thay vì mysql db:

yum remove mysql
yum -y install mariadb-server mariadb
service mariadb start

Sau đó, bạn có thể truy cập mysql theo cách thông thường:

mysql -u root -p

FYI này cũng hoạt động cho CentOS 8.1. Sau khi cài đặt mariadb-servermariadbđừng quên chạy mysql_secure_installationđể dọn sạch một số cài đặt không an toàn mặc định.
Dio Phụng

13

Trong trường hợp của tôi, tôi đã chuyển file socket khác bên trong vị trí /etc/my.cnf từ /var/lib/mysql/mysql.sockđể/tmp/mysql.sock

Ngay cả sau khi khởi động lại dịch vụ mysqld, tôi vẫn thấy thông báo lỗi khi tôi cố gắng kết nối. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Vấn đề là cách mà máy khách được cấu hình. Chạy chẩn đoán sẽ thực sự hiển thị đường dẫn ổ cắm chính xác. ví dụps aux | grep mysqld

Làm:

mysql -uroot -p -h127.0.0.1
mysql -uroot -p --socket=/tmp/mysql.sock

Không hoạt động:

mysql -uroot -p
mysql -uroot -p -hlocalhost

Bạn có thể khắc phục sự cố này bằng cách thêm cùng một dòng ổ cắm trong [client]phần bên trong cấu hình mysql.


13

Chỉ cần chỉnh sửa /etc/my.cnf Thêm dòng sau vàomy.cnf

[mysqld]

socket=/var/lib/mysql/mysql.sock 

[client]

socket=/var/lib/mysql/mysql.sock

Khởi động lại mysql và kết nối lại

mysql -u người dùng -p cơ sở dữ liệu mật khẩu -h máy chủ;


Câu trả lời đúng duy nhất. Tôi tự hỏi tại sao nó không có đủ phiếu bầu.
CentAu

11

Kiểm tra xem dịch vụ mysqld của bạn có chạy hay không, nếu không chạy, hãy khởi động dịch vụ.

Nếu vấn đề của bạn chưa được giải quyết, hãy tìm /etc/my.cnfvà sửa đổi như sau, nơi bạn thấy một dòng bắt đầu bằng socket. Hãy sao lưu tập tin đó trước khi thực hiện cập nhật này.

socket=/var/lib/mysql/mysql.sock  

Thay đổi thành

socket=/opt/lampp/var/mysql/mysql.sock -u root

1
Xin chào Sekar, tôi đã nhập "find / -name my.cnf" và tôi có hai địa điểm. 1) /opt/lampp/etc/my.cnf 2) /etc/mysql/my.cnf. Vì vậy, cái nào sẽ sử dụng .. Tôi đã đặt câu hỏi ở đây .. stackoverflow.com/questions/32437796/iêu
Nana Partykar

7

MariaDB, một nhánh cộng đồng phát triển của MySQL, đã trở thành triển khai mặc định của MySQL trong nhiều bản phân phối.

Vì vậy, trước tiên bạn nên bắt đầu,

$ sudo systemctl start mariadb

Nếu thất bại thay vì thử,

$ sudo systemctl start mysqld

Sau đó, để bắt đầu mysql,

$ mysql -u root -p

Cho đến hôm nay, ở Fedora, gói được đặt tên mariadb Và trong Ubuntu, nó được gọi mariadb-server.

Vì vậy, bạn có thể phải cài đặt nó nếu nó chưa được cài đặt trong hệ thống của bạn.


7

Hãy chắc chắn rằng bạn có đủ không gian còn lại /var. Nếu con quỷ Mysql không thể ghi thông tin bổ sung vào ổ đĩa thì máy chủ mysql sẽ không khởi động và nó dẫn đến lỗiCan't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Cân nhắc sử dụng

expire_logs_days = 10
max_binlog_size = 100M

Điều này sẽ giúp bạn giảm mức sử dụng đĩa.


Cảm ơn, tôi đang chạy mysql trên orbox virtualbox và khi tôi tạo ra một bd của mình, tôi hết dung lượng và không thể khởi động máy chủ mysql, khi tôi xóa tệp kết xuất, tôi có thể khởi động lại máy chủ mysql.
JayCee

1
Điều này đã giải quyết nó cho tôi. Tôi đã cài đặt innodb_buffer_pool_size thành giá trị rất cao cho môi trường sản xuất và nó đã khiến mysql bị sập trên máy ảo của tôi.
Benjamin Brizzi

1
Tôi có vấn đề này khi sử dụng phabricator và Giải pháp là thay đổi innodb_buffer_pool_sizetrong my.cnf. Đặt nó thành một giá trị nhỏ như innodb_buffer_pool_size = 50Mlà một thử nghiệm tốt để loại bỏ giả thuyết này;)
Yercalamarino 7/1/2015

Đó là vấn đề quái đản, kiểm tra mọi thứ trừ không gian đĩa. Giải phóng không gian từ / var, nó đã trở lại!
Nadjib Mami

5

Đây là những gì làm việc cho tôi:

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysqld restart


4

Hãy chắc chắn rằng bạn đã khởi động máy chủ:

mysql.server start

Sau đó kết nối với người dùng root:

mysql -uroot

3

Nếu mysql của bạn trước đây đã hoạt động và đột nhiên dừng lại, hãy "khởi động lại" máy chủ.

Đã phải đối mặt với vấn đề này trên VPS CentOS của tôi .->

Đã liên tục nhận được

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'(2)

Đã thử tất cả các kỹ thuật, cuối cùng khởi động lại máy chủ đã khắc phục sự cố ->

shutdown -r now

Hi vọng điêu nay co ich !!



3

nếu bạn thay đổi tệp trong / var / lib / mysql [như sao chép hoặc thay thế tệp đó], bạn phải đặt chủ sở hữu tệp thành mysql, điều này rất quan trọng nếu mariadb.service khởi động lại không thành công

chown -R mysql: mysql / var / lib / mysql / *

chmod -R 700 / var / lib / mysql / *


2

Đầu tiên nhập "dịch vụ mysqld bắt đầu" và đăng nhập


bạn muốn nói gì? vui lòng đọc faq trước khi đặt câu hỏi tại đây
Freak

Câu hỏi này đã được trả lời thành công ba năm trước. Câu trả lời chính xác này đã được đưa ra hoàn toàn hơn vào năm ngoái.
Cairnarvon

2

Vui lòng đảm bảo rằng bạn đã cài đặt máy chủ MySQL chính xác, tôi đã gặp lỗi này nhiều lần và tôi nghĩ việc gỡ lỗi từ ổ cắm rất phức tạp, ý tôi là có thể dễ dàng cài đặt lại hơn.

Nếu bạn đang sử dụng CentOS 7, đây là cách chính xác để cài đặt nó:

Trước hết, thêm nguồn cộng đồng mysql
yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

Sau đó, bạn có thể cài đặt nó bằng cách yum install mysql-community-server

Bắt đầu với systemctl: systemctl start mysqld


1

Vấn đề của tôi là tôi đã cài đặt mysql thành công và nó hoạt động tốt.

Nhưng một ngày, lỗi tương tự xảy ra.

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

Và không có tập tin mysql.sock tồn tại.

Sự giải quyết này đã giải quyết vấn đề của tôi và mysql đã hoạt động trở lại:

Đăng nhập bằng root:

sudo su -

Chạy:

systemctl stop mysqld.service
systemctl start mysqld.service
systemctl enable mysqld.service

Kiểm tra như root:

mysql -u root -p

mysql nên được chạy và chạy.

Tôi hy vọng điều này có thể giúp đỡ người khác là tốt.


1

Lưu ý rằng trong khi mysql đọc thông tin về vị trí của socketfile từ tệp my.cnf, thì chương trình mysql_secure_installation dường như không thực hiện đúng lúc.

Vì vậy, nếu bạn giống như tôi và xáo trộn mọi thứ xung quanh khi cài đặt, bạn có thể gặp phải tình huống bạn có thể kết nối với cơ sở dữ liệu với mysql, nhưng điều đó không thể được bảo mật (dù sao không sử dụng tập lệnh đó).

Để khắc phục điều này, đề xuất từ ​​sreddy hoạt động tốt: tạo một liên kết mềm từ nơi tập lệnh sẽ mong đợi ổ cắm đến nơi thực sự. Thí dụ:

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

(Tôi sử dụng / tmp / làm vị trí mặc định cho ổ cắm)


1

Nó làm việc với tôi với những thay đổi sau

Bất cứ đường dẫn nào cho socket đều được đề cập trong [mysqld] và tương tự trong [client] trong my.cnf và khởi động lại mysql

[mysqld] ổ cắm = / var / lib / mysql / mysql.sock

[máy khách] ổ cắm = / var / lib / mysql / mysql.sock


1

Một cách để tái tạo lỗi này: Nếu bạn muốn kết nối với máy chủ nước ngoài mà thay vào đó kết nối với máy chủ cục bộ không tồn tại:

eric@dev ~ $ mysql -u dev -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through 
socket '/var/lib/mysql/mysql.sock' (2)
eric@dev ~ $

Vì vậy, bạn phải chỉ định máy chủ như thế này:

eric@dev ~ $ mysql --host=yourdb.yourserver.com -u dev -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 235
Server version: 5.6.19 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+-------------------------+
| Database                |
+-------------------------+
| information_schema      |
| mysql                   |
| performance_schema      |
+-------------------------+
3 rows in set (0.00 sec)

mysql> exit
Bye
eric@dev ~ $

1

Đây có thể là một đề xuất ngu ngốc nhưng đảm bảo 100% DB của bạn vẫn được lưu trữ tại localhost. Ví dụ: nếu Quản trị mạng chọn (hoặc thay đổi thành) lưu trữ Amazon DB, bạn sẽ cần tên máy chủ đó thay thế!


Tôi đang sử dụng nhà cung cấp dịch vụ lưu trữ 1and1 và gặp lỗi này sau khi ssh-ing đến máy chủ. Cách khắc phục chỉ đơn giản là cung cấp tên máy chủ "mysql -u dbo70123521 -p --host db70313321.db.1and1.com db703133520"
cướp

1

Trong trường hợp của tôi, tôi đã nhập một cơ sở dữ liệu mới và tôi không thể kết nối lại sau đó. Cuối cùng tôi nhận ra đó là một vấn đề không gian.

Vì vậy, bạn có thể xóa cơ sở dữ liệu cuối cùng và mở rộng ổ cứng của bạn hoặc những gì tôi đã làm, khôi phục ảnh chụp nhanh của máy ảo của tôi.

Chỉ trong trường hợp ai đó nghĩ rằng nó hữu ích


0

gặp phải vấn đề này trong khi cố gắng kết nối mysql trong máy khách SSH, nhận thấy việc thêm đường dẫn socket vào lệnh hữu ích khi việc chuyển đổi giữa các socket là cần thiết.

> mysql -u user -p --socket=/path/to/mysql5143.sock

0

Đây là một vấn đề nếu bạn đang hết dung lượng đĩa. Giải pháp là giải phóng một số dung lượng từ ổ cứng.

Xin vui lòng đọc thêm để có lời giải thích:

Nếu bạn đang chạy MySQL tại LINUX, hãy kiểm tra dung lượng trống của ổ cứng với đĩa lệnh miễn phí:

 df 

nếu bạn đang nhận được một cái gì đó như thế:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2              5162828   4902260         0 100% /
udev                    156676        84    156592   1% /dev
/dev/sda3              3107124     70844   2878444   3% /home

Sau đó, đây là vấn đề và bây giờ bạn có giải pháp!

Vì mysql.sock muốn được tạo tại thư mục mysql mà hầu như luôn nằm dưới thư mục gốc không thể đạt được vì thiếu không gian.

Nếu bạn định kỳ đưa ra lệnh ls trong thư mục mysql (tại openSUSE 11.1 là tại / var / lib / mysql), bạn sẽ nhận được một cái gì đó như:

hostname:/var/lib/mysql #
.protected  IT     files        ibdata1             mysqld.log  systemtemp
.tmp        NEWS   greekDB      mysql               mysqld.pid  test
ARXEIO      TEMP1  ib_logfile0  mysql.sock          polis
DATING      deisi  ib_logfile1  mysql_upgrade_info  restore

Tệp mysql.sock xuất hiện và biến mất thường xuyên (bạn phải thử phân bổ với ls để đánh một thể hiện với tệp mysql.sock trên thư mục).

Điều này gây ra bởi không đủ không gian đĩa.

Tôi hy vọng rằng tôi sẽ giúp một số người !!!! Cảm ơn!


0

Tôi đã phải vô hiệu hóa explicit_defaults_for_timestamptừ my.cnf.


0

Hãy thử 2, 3 giải pháp đầu tiên. Lỗi là cửa sổ bật lên & Nếu bạn không thể tìm thấy/var/lib/mysql/mysql.sock

find /var/ -name mysql.sock

Kiểm tra không gian có sẵn trong / var /

df

Nếu thư mục đầy, hãy xóa một số tệp / thư mục không hợp lệ

rm /var/cache/*

Có lẽ vấn đề của bạn sẽ được sắp xếp ngay bây giờ.


0

Nếu bạn đang ở trong vỏ của sf.net , hãy thử:

mysql --host=mysql-{LETTER} --user={LETTER}{GROUP ID}admin -p

Thay đổi {LETTER} và {ID ID} như được hiển thị trong Cơ sở dữ liệu MySQL của hồ sơ quản trị viên dự án.

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.