详解MySQL中的pid与socket


Posted in MySQL onJune 15, 2021
  • socket文件:当用Unix域套接字方式进行连接时需要的文件。
  • pid文件:MySQL实例的进程ID文件。

1.pid-file介绍

MySQL 中的 pid 文件记录的是当前 mysqld 进程的 pid ,pid 亦即 Process ID 。可以通过 pid-file 参数来配置 pid 文件路径及文件名,如果未指定此变量,则 pid 文件默认名为 host_name.pid ,存放的路径默认放在 MySQL 的数据目录。

建议指定 pid 文件名及路径,pid 目录权限要对 mysql 系统用户放开,具体配置可参考如下:

# my.cnf 配置文件
[mysqld]
pid-file  = /data/mysql/tmp/mysqld.pid

# 查看mysqld进程
[root@localhost ~]# ps -ef|grep mysqld
root       8670      1  0 Jun09 ?        00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql/data --pid-file=/data/mysql/tmp/mysqld.pid
mysql      9353   8670  0 Jun09 ?        00:01:23 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/logs/error.log --pid-file=/data/mysql/tmp/mysqld.pid --socket=/data/mysql/tmp/mysql.sock

# 查看pid文件内容 
[root@localhost ~]# cat /data/mysql/tmp/mysqld.pid
9353

可以看到 pid 文件内容只有一行,记录了 mysqld 进程的 ID 。mysqld 进程启动后会通过 create_pid_file 函数新建 pid 文件,通过 getpid() 获取当前进程号并将进程 ID 写入 pid 文件。进程运行后会给 pid 文件加一个文件锁,只有获得 pid 文件写入权限的进程才能正常启动并把自身的 PID 写入该文件中,其它同一个程序的多余进程则自动退出。因此 pid 文件的作用是防止启动多个进程副本。

有时候可能会遇到因 pid 文件问题而启动失败的情况,这几类报错你可能遇到过:

Can‘t start server: can‘t create PID file: No such file or directory

ERROR! MySQL server PID file could not be found

ERROR! The server quit without updating PID file

上面几类 pid 相关报错解决方法其实都是类似的,首先要看下 error log 找到具体报错,然后查看配置文件,确保 pid 文件目录路径正确且有权限有空间,之后可以看下 mysqld 进程是否存在,若存在可手动 kill 掉,若有残留的 pid 文件也可以先删掉,一切排查就绪后,再次重新启动,一般即可成功。

2.socket文件介绍

socket 即 Unix 套接字文件,在类 unix 平台,客户端连接 MySQL 服务端的方式有两种,分别是 TCP/IP 方式与 socket 套接字文件方式。Unix 套接字文件连接的速度比 TCP/IP 快,但是只能连接到同一台计算机上的服务器使用。

通过设置 socket 变量可配置套接字文件路径及名称,默认值为 /tmp/mysql.sock (对于某些发行格式,目录可能有所不同)。参考配置如下:

# my.cnf 配置文件
[mysqld]
socket = /data/mysql/tmp/mysql.sock
[client]
socket = /data/mysql/tmp/mysql.sock

# 查看对应目录下的socket文件
root@localhost tmp]# ls -lh
total 8.0K
srwxrwxrwx 1 mysql mysql 0 Jun 10 15:19 mysql.sock
-rw------- 1 mysql mysql 6 Jun 10 15:19 mysql.sock.lock

# 通过 -S 命令指定socket登录
[root@localhost ~]# mysql -uroot -pxxxx -S /data/mysql/tmp/mysql.sock
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.22 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> status
--------------
mysql  Ver 8.0.22 for Linux on x86_64 (MySQL Community Server - GPL)

Connection id:          12
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         8.0.22 MySQL Community Server - GPL
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
UNIX socket:            /data/mysql/tmp/mysql.sock
Binary data as:         Hexadecimal
Uptime:                 1 hour 27 min 31 sec

Threads: 3  Questions: 27  Slow queries: 0  Opens: 135  Flush tables: 3  Open tables: 56  Queries per second avg: 0.005

查看上述连接状态可知,MySQL 在本地可以通过 socket 方式连接。在本地登录时,如果 my.cnf 配置文件中的 [client] 部分没有指定 socket 文件路径,mysql 默认会去寻找 /tmp/mysql.sock ,所以如果 mysqld 服务启动的时候,生成的 socket 文件不是默认路径的话,登陆可能会报错(ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock')。其实 [mysqld] 部分及 [client] 部分都配置具体路径可避免此问题,也可以在 tmp 路径下建立软连接,如:ln -s /data/mysql/tmp/mysql.sock /tmp/mysql.sock 。同样的,socket 文件目录权限要对 mysql 系统用户放开。

总结:

本篇文章介绍了 MySQL 中的 pid 及 socket 文件的具体配置及作用。其实这两个参数还是比较好维护的,一开始配置好不要去动它就好了,若遇到重启报错的情况,根据错误日志慢慢来排查,细心的操作,总会找到问题的。

以上就是详解MySQL中的pid与socket的详细内容,更多关于MySQL pid与socket的资料请关注三水点靠木其它相关文章!

MySQL 相关文章推荐
Windows10下安装MySQL8
Apr 06 MySQL
MySQL开启事务的方式
Jun 26 MySQL
MyBatis 动态SQL全面详解
Oct 05 MySQL
Mysql数据库手动及定时备份步骤
Nov 07 MySQL
MySQL数据库索引的最左匹配原则
Nov 20 MySQL
全面盘点MySQL中的那些重要日志文件
Nov 27 MySQL
MySQL分区表管理命令汇总
Mar 21 MySQL
详细聊一聊mysql的树形结构存储以及查询
Apr 05 MySQL
MySQL创建管理HASH分区
Apr 13 MySQL
Mysql索引失效 数据库表中有索引还是查询很慢
May 15 MySQL
MySQL中的全表扫描和索引树扫描
May 15 MySQL
MySQL解决Navicat设置默认字符串时的报错问题
Jun 16 MySQL
MySQL 如何设计统计数据表
Jun 15 #MySQL
浅谈MySQL 亿级数据分页的优化
解析MySQL binlog
详细谈谈MYSQL中的COLLATE是什么
Jun 11 #MySQL
探究Mysql模糊查询是否区分大小写
安装配置mysql及Navicat prenium的详细流程
mysql 如何获取两个集合的交集/差集/并集
Jun 08 #MySQL
You might like
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
2014/06/30 PHP
ThinkPHP中的系统常量和预定义常量集合
2014/07/01 PHP
php检查日期函数checkdate用法实例
2015/03/19 PHP
phpcms手机内容页面添加上一篇和下一篇
2015/06/05 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
实例讲解PHP中使用命名空间
2019/01/27 PHP
JQuery获取浏览器窗口内容部分高度的代码
2012/02/24 Javascript
借助script进行Http跨域请求:JSONP实现原理及代码
2013/03/19 Javascript
jQuery div层的放大与缩小简单实现代码
2013/03/28 Javascript
js获取html页面节点方法(递归方式)
2013/12/13 Javascript
JQuery异步获取返回值中文乱码的解决方法
2015/01/29 Javascript
基于Jquery制作图片文字排版预览效果附源码下载
2015/11/18 Javascript
JavaScript如何实现对数字保留两位小数一位自动补零
2015/12/18 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
js代码规范之Eslint安装与配置详解
2018/09/08 Javascript
VUE2.0+ElementUI2.0表格el-table循环动态列渲染的写法详解
2018/11/30 Javascript
[01:14:12]2018DOTA2亚洲邀请赛4.7 总决赛 LGD vs Mineski 第二场
2018/04/09 DOTA
[52:26]完美世界DOTA2联赛决赛 FTD vs Phoenix 第一场 11.08
2020/11/11 DOTA
Python装饰器入门学习教程(九步学习)
2016/01/28 Python
Windows下python3.6.4安装教程
2018/07/31 Python
python os.listdir按文件存取时间顺序列出目录的实例
2018/10/21 Python
Django框架视图层URL映射与反向解析实例分析
2019/07/29 Python
python:动态路由的Flask程序代码
2019/11/22 Python
Python图片的横坐标汉字实例
2019/12/04 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
2020/03/16 Python
网易微博Web App用HTML5开发的过程介绍
2012/06/13 HTML / CSS
巴黎欧莱雅法国官网:L’Oreal Paris
2019/04/30 全球购物
Diptyque英国官方网站:源自法国的知名香氛品牌
2019/08/28 全球购物
公务员试用期满考核材料
2014/05/22 职场文书
最常使用的求职信
2014/05/25 职场文书
关于国庆节的广播稿
2015/08/19 职场文书
MongoDB数据库的安装步骤
2021/06/18 MongoDB
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python
教你使用Jenkins集成Harbor自动发布镜像
2022/04/03 Servers