Mysqld.sock nên chứa cái gì, tại sao tôi không có nó?


22

Có ai biết tại sao /var/run/mysqld/mysqld.socktệp socket của tôi không có trên máy tính của tôi khi tôi cài đặt (hoặc cài đặt lại) MySQL 5.1 không?

Ngay bây giờ, khi tôi cố gắng khởi động một máy chủ với mysqld, tôi gặp lỗi như thế Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) when trying to connect, nhưng việc tạo một tệp trống có tên đó (như được đề xuất trên các diễn đàn ubfox) đã không thành công.

Tôi đã có cả mysql và postgres phục vụ tốt cho đến khi tôi nâng cấp lên natty một chút trước đây; Tôi đã dành hàng giờ đi bộ qua cả hai cơ sở dữ liệu để cố gắng tìm hiểu những gì đang xảy ra. Tôi có thể từ bỏ postgres, nhưng tôi không thể làm việc mà không có bản sao của mysql.

Phần kỳ lạ nhất: Tôi sử dụng Kubfox và hiểu biết của tôi là KDE sử dụng mysql để lưu trữ quyền của người dùng, v.v. Tôi không gặp phải bất kỳ vấn đề quyền lạ nào; Tôi có thể hiểu điều này có nghĩa là (bằng cách nào đó?) MySQL đang thực sự hoạt động?

Có lẽ các tập tin ổ cắm này sống ở một nơi khác trong natty? Nó sẽ dễ dàng hơn để chỉ cần cài đặt lại os tươi? Tại thời điểm này, tôi cởi mở với bất kỳ đề xuất nào sẽ ngừng lãng phí thời gian của tôi.


Bạn cần khởi động máy chủ mysql trước và sau đó tệp đó /var/run/mysqld/mysqld.socksẽ được tạo. Như những gì @Paul đã nói, bạn phải xóa bất kỳ tệp nào bạn đặt ở vị trí đó.
Evan Hu

Câu trả lời:


18

Một tệp ổ cắm không thực sự chứa dữ liệu, nó vận chuyển nó .. Đây là một loại tệp đặc biệt, bất thường được tạo bằng các lệnh / lệnh hệ thống đặc biệt. Nó không phải là một tập tin bình thường.

Nó giống như một đường ống mà máy chủ và khách hàng có thể sử dụng để kết nối và trao đổi các yêu cầu và dữ liệu. Ngoài ra, nó chỉ được sử dụng tại địa phương. Tầm quan trọng của nó chỉ đơn thuần là một vị trí điểm hẹn đã thỏa thuận trong hệ thống tập tin.

Tạo một tệp cũ đơn giản và đặt nó vào vị trí đó thực sự có thể can thiệp vào máy chủ tạo nó ... và do đó ngăn các máy khách cục bộ kết nối với máy chủ.

Đề nghị của tôi là xóa bất kỳ tập tin bạn đặt vào vị trí. Các tập tin ổ cắm đặc biệt được tạo bởi máy chủ.


1
Cảm ơn bạn đã giải thích về các tệp ổ cắm và xin lỗi về câu hỏi khó hiểu: vấn đề ban đầu của tôi là tệp ổ cắm bị thiếu - lỗi mysql tiếp tục ném làCan't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) when trying to connect
egbutter

nhưng nó được tạo ra như thế nào? bởi vì tôi vẫn không có nó ..: - có ý kiến ​​gì không?
jpganz18

Bạn có thể có một máy khách mysql hy vọng ổ cắm ở vị trí đó, nhưng máy chủ không tạo ra nó ở đó (hoặc máy chủ không chạy) Nếu máy chủ đang chạy, hãy tìm trong / tmp hoặc sử dụng find hoặc định vị để tìm tệp ổ cắm, sau đó khởi động máy khách mysql với -S <đường dẫn đến tệp ổ cắm>
sed_and_done

20

Khi bạn chỉ định host=localhost, máy khách mysql sẽ cố gắng đăng nhập vào máy chủ mysql bằng cách sử dụng đường ống có tên unix yêu cầu một .socktệp.

Điều này có thể được bỏ qua bằng cách chỉ định máy chủ = 127.0.0.1. Điều này sẽ làm cho máy khách mysql sử dụng TCP để kết nối với máy chủ.

Lấy từ tài liệu của MySQL :

mysql --host=127.0.0.1 --port=3306 --user=your_uname --password=your_pass

Đây thực sự là một câu trả lời xuất sắc (và rất cần thiết) bởi vì, về mặt lịch sử, tôi đã thấy sự mysql.sockbiến mất không có lý do chính đáng trong mọi phiên bản MySQL mà tôi đã làm việc (trở lại 4.0). Khi điều này xảy ra, tôi đăng nhập như thế này nhưng tôi sử dụng --protocol=tcpthay vì --port. Khi bạn tắt mysql, dịch vụ sẽ tìm tệp ổ cắm. Như vậy, chạy service mysql stopsẽ thất bại. Để giải quyết vấn đề đau đầu về ổ cắm bị thiếu, tôi chạy mysqladmin -h127.0.0.1 --protocol=tcp -uroot -p shutdown. Ôi, BTW, +1 !!!
RolandoMySQLDBA

Cảm ơn bạn. Đây là câu trả lời đầu tiên của tôi ở bất cứ đâu trực tuyến :) Và vâng. Phương pháp thay thế để sử dụng TCP là bằng cách chỉ định --protatio = tcp.
quét

14

Ổ cắm là một tệp giả đặc biệt được sử dụng để truyền dữ liệu bằng cách đọc và ghi, không lưu trữ dữ liệu.

Tệp ổ cắm được tạo khi dịch vụ được khởi động và xóa khi dịch vụ kết thúc. Vị trí của tệp được định nghĩa /etc/my.cnfnhư sau:

[mysqld]
socket=/var/run/mysql/mysql.sock

8

Trong trường hợp của tôi, chạy mysqld_safetạo ra một mysqld.socktập tin mới .

$ cd /etc/init.d/
$ mysqld_safe

Bạn có thể sẽ không nhận được lời nhắc trở lại, nhưng nếu bạn khởi động lại phiên của mình, tệp mysqld.sock sẽ ở đâu đó. Tìm nó với

$ sudo find / -type s | grep mysqld.sock

2

Tôi đã có cùng một vấn đề với mysqld.sock bị thiếu. Tôi đã đi đến thư mục có chứa mysql, cụ thể là /usr/bintrong trường hợp của tôi. Sau đó tôi ra lệnh

mysql mysql --host=localhost --password=whatever --port=3306

Mysql kép không phải là một lỗi đánh máy mà là mysql là một cơ sở dữ liệu sẽ luôn ở đó trong bản cài đặt MySQL mới. Tôi không biết nếu --host, --passwordhoặc --portlà cần thiết nhưng vì nó hoạt động với tôi bằng cách sử dụng các tham số này nên tôi bao gồm chúng. Khi MySQL xuất hiện, tôi đã đi vào bảng người dùng như đặt mật khẩu cho root. Khi MySQL xuất hiện, tệp socket bị thiếu đã được tạo. Tôi hy vọng điều này sẽ giúp được ai đó kể từ khi tôi vật lộn trong nhiều ngày.


1

Nếu bạn đang sử dụng nginx php-fastcgi và bạn gặp lỗi 502 Bad Gateway thì bạn phải xem cấu hình máy chủ ảo của mình trên tệp cấu hình nginx. Bạn phải đặt hoặc sửa fastcgi_passtham số. fastcgi_passĐây là biến để đặt kết nối ổ cắm giữa nginx và php CGI.

Một điểm khác của vấn đề là tập lệnh khởi động nhị phân có thể bỏ lỡ các mục sau (quan trọng) mở bằng: nano /usr/bin/php-fastcgi

SOCKET=/var/run/php-fastcgi/php-fastcgi.socket
PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid

Nội dung đầy đủ của tập lệnh khởi động của tôi / usr / bin / php-fastcgi:

#!/bin/bash

FASTCGI_USER=www-data
FASTCGI_GROUP=www-data
SOCKET=/var/run/php-fastcgi/php-fastcgi.socket
PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid
CHILDREN=6
PHP5=/usr/bin/php5-cgi

/usr/bin/spawn-fcgi -s $SOCKET -P $PIDFILE -C $CHILDREN -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5
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.