开发者

mysql登录时报socket找不到的问题及解决

目录
  • mysql登录时报socket找不到
  • 出现socket找不到的问题大致有以下几种情况
    • 1.mysqld和client的socket配置路径不一样
    • 2.在cmake的时候指定了路径
  • 解决方法
    • 总结

      mysql登录时报socket找不到

      mysqld.socket文件是用来给客户端和服务端进行通信的,如果通过源码方式安装,默认情况下这个文件会被放在tmp目录下。

      当然也可以手动指定存放位置,通过修改/etc/my.cnf文件的socket参数来修改mysqld.socket的存放路径。

      例如:

      [mysqld]
      socket=/data/mysqldb/mysqld.sock

      但是这样一来在登录的时候就会出现如下问题

      [root@s186 /data/mysql]#/usr/local/mysql/bin/mysql -uroot -p
      Enter password: 
      ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

      mysql客户端在登录的时候默认会去/tmp/mysql.sock这个目录查找mysqld.socket文件,由于修改了路径自然是找不到的。

      可以通过修改/etc/my.cnf文件给客户端指定位置。

      添加如下配置:

      [client]
      socket=/data/mysqldb/mysqld.sock

      这样客户端在登录时就会去指定的目录查找mysqld.socket文件,

      注意client的socket要和mysqld是一样的,因为客户端和服务端通信靠的就是这个文件,肯定要一致

      通过上面的案例应该明白为何服务端可以启动,但是登录的时候会报socket找不到的问题了。

      出现socket找不到的问题大致有以下几种情况

      1.mysqld和client的socket配置路径不android一样

      比如像下面这样的配置

      [mysqld]
      socket=/data/mysqldb/mysqld.sock
      [client]
      socket=/data/mysqldb/mysql.sock

      路径是一样的,但是文件名不一样,一个是mysqld.socket,一个是mysql.socket

      socket文件是由服务端生成的,而客户端找的就是服务端生成的socket文件,所以client的配置要和mysqld一样

      2.在cmake的时候指定了路径

      比如像下面这一段cmake指令

      在参数DMYSQL_Unix_ADDR=/tmp/mysqld.sock中指定了socket的位置

      那么/etc/my.cnf上mysqld上的socket和client上的socket都需要和这个一致

      因为cmake在执行完之后,mysqld这个执行文件才会生成,并且这个执行文件中会记录你指定的参数

      那么当执行mysqld的时候,它就会在你指定的目录下去查找

      这个时候/etc/my.cnf下的mysqld和client的socket必须和指定的路径保持一致

      否则mysqld执行都会失http://www.devze.com败(会报change dir…这样的错误)

      cmake \-DCMAKE_INSTALL_PREFIX=/usr/local/myandroidsql56 -DMYSQL_DATADIR=/data/mysqldb/data -DSYSCONFDIR=/etc/cWZveNjmy.cnf  -dwITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/data/mysqld.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=utf8 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci

      解决方法

      解决socket的核心就是编程客栈在登录的时候告诉客户端socket文件的位置

      要么通过/etc/my.cnf文件指定位置

      要么就是在登录的时候指定位置

      像下面这样:

      mysql -uroot -p --socket=/data/mysqldb/mysqld.sock

      还有一种方式就是创建软连接,因为客户端默认会到/tmp下找mysqld.socket文件

      我不通过配置文件,在tmp下建一个软连接就可以了

      ln -s /data/mysqldb/mysqld.sock mysql.socket

      总结

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新数据库

      数据库排行榜