【MySQL】关于MySQL启动后mysqld_safe和mysqld进程

在mysql服务器启动后,有2个进程mysqld_safe和mysqld,这是为啥?


# ps -ef | grep mysqld

root  6488 3324 0 Sep03 pts/0 00:00:00 /bin/sh /mysqlsoft/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql

mysql  7327 6488 0 Sep03 pts/0 00:00:13 /mysqlsoft/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/mysqlsoft/mysql --datadir=/mysqldata/data --plugin-dir=/mysqlsoft/mysql/lib/plugin --user=mysql --log-error=/mysqldata/log/mysql-error.log --open-files-limit=10240 --pid-file=/mysqldata/tmp/mysql.pid --socket=/tmp/mysql.sock


mysqld_safe 进程所有者为 root

mysqld进程所有者为mysql


其中mysqld_safe是mysqld的父进程,/etc/init.d/mysql 中针对start的执行,执行的mysqld_safe,而mysqld_safe是一个脚本。

通过查看mysqld_safe的选项信息以及脚本内容,确定mysqld_safe启动的是mysqld。


根据MySQL官方文档,先看下mysqld_safe的定义:

mysqld_safe is the recommended way to start a mysqld server on Unix. mysqld_safe adds some safety features such as restarting the server when an error occurs and logging runtime information to an error log.

Note

For some Linux platforms, MySQL installation from RPM or Debian packages includes systemd support for managing MySQL server startup and shutdown. On these platforms, mysqld_safe is not installed because it is unnecessary.


这里注意下:

对于一些Linux平台,从RPM或Debian包安装MySQL包括systemd支持管理MySQL服务器的启动和关闭。在这些平台上,没有安装mysqld_safe。


在 Unix 机器上,MySQL 官方推荐使用mysqld_safe启动mysqld服务。

这里先简要说下原因:

mysqld_safe增加了一些安全特性,比如它会在遇到错误时重启mysqld服务,并把运行时信息记录到 error log 中。

以 CentOS和redhat环境为例,使用mysqls_safe启动 mysqld 服务的命令如下:

mysqld_safe --defaults-file=/etc/my.cnf  --user=mysql  > mysqld.log 2>&1 &

其中--defaults-file=my.cnf指定了默认的配置文件为/etc/my.cnf,当然这里的参数文件路径可以任意指定,常规还是放在路径/etc/下。

> mysqld_log指定了将标准输出重定向到msyqld.log,

2>&1表示将标准错误输出重定向到标准输出,

末尾的&表示后台运行。

执行上述命令mysqls_safe,使用 mysqld_safe 和 my.cnf 中的配置,会启动了一个mysqld进程,始终在后台运行,所有的输出(包括错误输出)都将汇集到 mysqld.log 文件中。

回车执行命令后,终端将返回这个任务的编号和进程号,如果后续想要再次查看,可以通过 jobs -l 命令来查看当前 Shell 环境中所有的任务。

# mysqld_safe --defaults-file=/etc/my.cnf --user=mysql  &

[1] 5092


#  jobs -l 命令来查看当前Shell环境中所有的任务

[1]+ 5092 Running mysqld_safe --defaults-file=/etc/my.cnf --user=mysql  &

其中[1]代表任务号,+ 代表这是最近一个任务,5092 代表进程号 PID。

至此,mysqld服务启动成功。

【mysqld】:是mysql的核心程序,用于管理mysql的数据库文件以及用户的请求操作。

首先说一点:直接运行mysqld来启动,可不可以,当然也可以;

只是直接运行mysqld程序来启动MySQL服务的方法在实际生产中很少几乎不使用,且官方刚才也说过:不推荐,mysqld_safe 增加了一些安全特性。


mysqld可以读取配置文件中的[mysqld]中的内容。

mysqld启动命令:

#  bin/mysqld  --defaults-file=/etc/mysql/my.cnf  &

查看mysqld支持的选项:

#  bin/mysqld --verbose --help 


【mysqld_safe】:会在启动MySQL服务器后继续监控其运行情况,并在其死机时重新启动它。

用mysqld_safe脚本来启动MySQL服务器的做法在BSD风格的unix系统上很常见,非BSD风格的UNIX系统中的 mysql.server脚本其实也是调用mysqld_safe脚本去启动MySQL服务器的。


mysqld_safe脚本方式启动mysql server 进程,通常做如下事情:

1.检查系统和选项。

2.检查MyISAM表。

3.保持MySQL服务器窗口。

4.启动并监视mysqld,如果因错误终止则重启。

5.记录mysqld进程运行信息,保存在错误日志中(error.log,通常在my.cnf中指定)

6. mysqld_safe的启动和运行参数与mysqld通用,对mysqld_safe进程施加参数等同于在mysqld进程上施加参数。

mysqld_safe从选项文件的[mysqld]、[server]和 [mysqld_safe]部分读取所有选项。

为了保证向后兼容性,它还读取 [safe_mysqld]部分,尽管在MySQL 5.1安装中你应将这部分重新命名为[mysqld_safe]。

mysqld_safe支持下面的选项:


具体参数解释详见官方文档:

【reference】 https://dev.mysql.com/doc/refman/5.7/en/mysqld-safe.html


执行mysqld_safe时,必须先给出--defaults-file或--defaults-extra-option,或不使用选项文件。该命令将不使用选项文件,因为第一个参数不是选项文件:mysqld_safe --port=3306 --defaults-file=/etc/mysql/my.cnf相反,使用下面的命令,则可以使用选项文件:mysqld_safe --defaults-file=/etc/mysql/my.cnf --port=3306


mysqld_safe脚本位置通常在什么位置?

1. 可以根据调用mysqld_safe的目录找到服务器和数据库。在二进制分发版中,mysqld_safe看上去在bin和data目录的工作目录下。对于源码分发版,为libexec和var目录。如果你从MySQL安装目录执行mysqld_safe应满足该条件(例如,二进制分发版为/usr/local/mysql);

2. 如果不能根据工作目录找到服务器和数据库,mysqld_safe试图通过绝对路径对它们定位。典型位置为/usr/local/libexec和 /usr/local/var。实际位置由构建分发版时配置的值确定如果MySQL安装到配置时指定的位置,它们应该是正确的。

最后,简单总结下:

1. 可以mysqld把mysql server拉起来,但生产环境不建议这么干;

2. mysqld_safe的启动和运行参数与mysqld通用,对mysqld_safe进程施加参数等同于在mysqld进程上施加参数;

3. mysqld_safe相当于多了一个守护进程,mysqld挂了会自动把mysqld进程拉起来 ;

4. mysqld_safe严重错误产生时自动重启mysqld进程;

5. mysqld_safe记录mysqld进程运行信息,保存在错误日志中(error.log,通常在my.cnf中指定);

6.若每秒启动失败5次,mysqld_safe进程为了防止消耗cpu资源,启动进程将会停顿1s。

7.官方推荐在类UNIX系统中使用mysqld_safe脚本来启动mysqld进程。


参考 


https://www.cnblogs.com/benwu/articles/9061345.html

https://dev.mysql.com/doc/refman/5.7/en/mysqld-safe.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容