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 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ó?
Câu trả lời:
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.
/etc/hosts
tệ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 đề.
Đả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
service mariadb start
bởi vì mariadb.org/debian-9-release-mariadb-mysql-variant
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
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).
Nhiều khả năng mysql.sock
khô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
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
mariadb-server
và mariadb
đừ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.
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.
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ủ;
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.cnf
và 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
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.
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.
innodb_buffer_pool_size
trong my.cnf
. Đặt nó thành một giá trị nhỏ như innodb_buffer_pool_size = 50M
là một thử nghiệm tốt để loại bỏ giả thuyết này;)
Đâ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
Vui lòng kiểm tra xem một dịch vụ mysql khác đang chạy.
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
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 !!
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 / *
Đầu tiên nhập "dịch vụ mysqld bắt đầu" và đăng nhập
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
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.
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)
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 ~ $
Đâ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ế!
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
Đâ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!
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ờ.
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.