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配置路径不一样,比如像下面这样的配置
[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执行都会失败(会报change dir…这样的错误)
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql56 -DMYSQL_DATADIR=/data/mysqldb/data -DSYSCONFDIR=/etc/my.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
以上都是实践得出的经验,缺乏理论支撑,如有不对的地方,敬请指出。
- 小程序的新功能你知道吗
- Mapxtreme之活活气死
- 仿淘宝的交易到计时JS
- 继小程序之后“小游戏”也来了,微信为此再次开启神秘入口
- (Head First 设计模式)学习笔记(3) --装饰者模式(StarBuzz咖啡店实例)
- 我的Js代码-按钮按下时判断是否选择了最后一行,给出提示
- (Head First 设计模式)学习笔记(2) --观察者模式(气象站实例)
- Spring Boot使用HandlerInterceptorAdapter和WebMvcConfigurerAdapter实现原始的登录验证
- 一条视频获C+融资 两个域名神助攻
- ExtJs与WCF交互:生成树
- JavaScript大略
- 加点的心得
- Markdown
- 介绍linux下利用编译bash设置root账号共用的权限审计设置
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解