详解MySQL中的pid与socket

不知道你有没有注意过,MySQL 启动时需要配置 pid 及 socket 文件路径。偶尔还会出现因 pid 文件找不到而启动失败的现象,那么 pid 与 socket 文件究竟是干什么用的呢?我们一起来看下本篇文章。

  • 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 系统用户放开,具体配置可参考如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

#my.cnf配置文件

[mysqld]

pid-file=/data/mysql/tmp/mysqld.pid

#查看mysqld进程

[root@localhost~]#ps-ef|grepmysqld

root867010Jun09?00:00:00/bin/sh/usr/local/mysql/bin/mysqld_safe–datadir=/data/mysql/data–pid-file=/data/mysql/tmp/mysqld.pid

mysql935386700Jun09?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 (对于某些发行格式,目录可能有所不同)。参考配置如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

#my.cnf配置文件

[mysqld]

socket=/data/mysql/tmp/mysql.sock

[client]

socket=/data/mysql/tmp/mysql.sock

#查看对应目录下的socket文件

root@localhosttmp]#ls-lh

total8.0K

srwxrwxrwx1mysqlmysql0Jun1015:19mysql.sock

-rw——-1mysqlmysql6Jun1015:19mysql.sock.lock

#通过-S命令指定socket登录

[root@localhost~]#mysql-uroot-pxxxx-S/data/mysql/tmp/mysql.sock

mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.

WelcometotheMySQLmonitor.Commandsendwith;or\\g.

YourMySQLconnectionidis12

Serverversion:8.0.22MySQLCommunityServer-GPL

Copyright(c)2000,2020,Oracleand/oritsaffiliates.Allrightsreserved.

OracleisaregisteredtrademarkofOracleCorporationand/orits

affiliates.Othernamesmaybetrademarksoftheirrespective

owners.

Type'help;'or'\\h'forhelp.Type'\\c'toclearthecurrentinputstatement.

mysql>status

————–

mysqlVer8.0.22forLinuxonx86_64(MySQLCommunityServer-GPL)

Connectionid:12

Currentdatabase:

Currentuser:root@localhost

SSL:Notinuse

Currentpager:stdout

Usingoutfile:''

Usingdelimiter:;

Serverversion:8.0.22MySQLCommunityServer-GPL

Protocolversion:10

Connection:LocalhostviaUNIXsocket

Servercharacterset:utf8mb4

Dbcharacterset:utf8mb4

Clientcharacterset:utf8mb4

Conn.characterset:utf8mb4

UNIXsocket:/data/mysql/tmp/mysql.sock

Binarydataas:Hexadecimal

Uptime:1hour27min31sec

Threads:3Questions:27Slowqueries:0Opens:135Flushtables:3Opentables:56Queriespersecondavg: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的资料请关注钦钦技术栈其它相关文章!

原文链接:https://mp.weixin.qq.com/s/UDf08YdCu6BGevMdSRSfxw

版权声明:本文(即:原文链接:https://www.qin1qin.com/catagory/6972/)内容由互联网用户自发投稿贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630367839@qq.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年 7月 31日 3:29:55
下一篇 2022年 7月 31日 3:30:12

软件定制开发公司

相关阅读

发表回复

登录后才能评论
通知:禁止投稿所有关于虚拟货币,币圈类相关文章,发现立即永久封锁账户ID!