Can't connect to local MySQL server through socket

mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

这是mysql登陆时找不到套接字的问题。mysql

首先须要明白的是,Linux端的mysql server启动时会开启一个socket,Linux上的MySQL的客户端在不使用IP链接时mysql server时,默认也会经过套接字来连接mysql server。sql

1.mysql server的套接字文件。socket

若是不手动配置my.cnf,那么默认的socket通常是DATADIR/mysql.sock,而DATADIR若是没有手动修改,通常默认是/var/lib/mysql目录。不一样的mysql版本,可能socket的默认路径是/tmp/mysql.sock。命令行

例如我将socket路径修改成/data/mysql.sockcode

2.客户端链接时使用的套接字文件。server

在Linux上的各类mysql类客户端(例如mysql,mysqladmin,mysqldump,mysqlimport等)链接mysql server时,若是指定的主机名是'localhost',则会使用套接字来链接mysql server。所以,必须为这些客户端指定正确的套接字。mysqli

方法一:在链接命令行上使用"-S"选项指定import

mysqladmin -S /data/mysql.sock
mysql -S /data/mysql.sock
mysqldump -S /data/mysql.sock

方法二:在配置文件中指定
例如在my.cnf中:登录

[client]
socket=/data/mysql.sock

client段的配置表示任何客户端链接mysql server时都使用该段配置。所以,这样配置后,不管是mysql、mysqldump、mysqladmin仍是其余的客户端都会使用socket=/data/mysql.sock进行链接。cli

除了使用[client]指定全局客户端的链接参数,还能够为特定的客户端指定链接参数。例以下面为mysql、mysqldump、mysqladmin这3个客户端分别指定socket链接参数。

[mysql]
socket=/data/mysql.sock

[mysqldump]
socket=/data/mysql.sock

[mysqladmin]
socket=/data/mysql.sock

注意:若是使用IP,例如mysql -uroot -h'192.168.100.10'则表示使用TCP/IP协议链接mysql,这时不会使用套接字,就没有套接字找不到的问题。