mysqld_safe 的 PID(进程 ID)=mysqld 的 PPID(父进程 ID),说明 mysqld_safe 是 mysqld 的父进程
kill -9 mysqld_safe (会话首进程),会向该进程组的每一个进程发送 SIGKILL,导致组中的进程被中止
2)、整体流程
- mysqld_safe 是会话首进程,kill -9 mysqld_safe,导致组中所有进程被 kill
- systemd 检测到 mysqld_safe 异常退出,Restart=on-failure 触发重新拉起 mysqld_safe
- mysqld_safe 拉起子进程 mysqld
[greatsql@greatsql-1 ~]$ /greatsql/svr/greatsql/bin/mysqld_safe --defaults-file=/greatsql/conf/greatsql4306.cnf &[1] 18229[greatsql@greatsql-1 ~]$mysqld_safe Adding '/greatsql/svr/GreatSQL-8.0.32-24-Linux-glibc2.17-x86_64/lib/mysql/libjemalloc.so.1' to LD_PRELOAD for mysqld2023-07-19T14:20:19.135297Z mysqld_safe Logging to '/greatsql/logs/error4306.log'.2023-07-19T14:20:19.173594Z mysqld_safe Starting mysqld daemon with databases from /greatsql/dbdata/data4306/data
2)、查看进程信息[greatsql@greatsql-1 ~]$ ps axj |head -1;ps axj |grep 4306 |grep -v grep PPIDPIDPGIDSID TTYTPGID STATUIDTIME COMMAND17360 18229 18229 17206 pts/717360 S9860:00 /bin/sh /greatsql/svr/greatsql/bin/mysqld_safe --defaults-file=/greatsql/conf/greatsql4306.cnf18229 19658 18229 17206 pts/717360 Sl9860:02 /greatsql/svr/greatsql/bin/mysqld --defaults-file=/greatsql/conf/greatsql4306.cnf --basedir=/greatsql/svr/greatsql --datadir=/greatsql/dbdata/data4306/data --plugin-dir=/greatsql/svr/greatsql/lib/plugin --log-error=/greatsql/logs/error4306.log --open-files-limit=65535 --pid-file=/greatsql/dbdata/data4306/data/mysql.pid --socket=/greatsql/dbdata/data4306/data/mysql.sock --port=4306
PID≠SID,不是会话首进程PGID≠TPGID,是后台进程组mysqld_safe 的 PID=mysqld 的 PPID,说明 mysqld_safe 是 mysqld 的父进程3)、kill -9 mysqld_safe 进程,并再次查看进程信息
[greatsql@greatsql-1 ~]$ kill -9 18229[greatsql@greatsql-1 ~]$ ps axj |head -1;ps axj |grep 4306 |grep -v grep PPIDPIDPGIDSID TTYTPGID STATUIDTIME COMMAND1 19658 18229 17206 pts/717360 Sl9860:07 /greatsql/svr/greatsql/bin/mysqld --defaults-file=/greatsql/conf/greatsql4306.cnf --basedir=/greatsql/svr/greatsql --datadir=/greatsql/dbdata/data4306/data --plugin-dir=/greatsql/svr/greatsql/lib/plugin --log-error=/greatsql/logs/error4306.log --open-files-limit=65535 --pid-file=/greatsql/dbdata/data4306/data/mysql.pid --socket=/greatsql/dbdata/data4306/data/mysql.sock --port=4306
kill -9 mysqld_safe (非会话首进程),不影响同组的进程(mysqld),此时 init 进程会自动领养 mysqld 进程4)、重新启动 mysqld_safe 进程,并再次查看进程信息
[greatsql@greatsql-1 ~]$ /greatsql/svr/greatsql/bin/mysqld_safe --defaults-file=/greatsql/conf/greatsql4306.cnf &[1] 31401[greatsql@greatsql-1 ~]$mysqld_safe Adding '/greatsql/svr/GreatSQL-8.0.32-24-Linux-glibc2.17-x86_64/lib/mysql/libjemalloc.so.1' to LD_PRELOAD for mysqld2023-07-19T14:38:42.429733Z mysqld_safe Logging to '/greatsql/logs/error4306.log'.2023-07-19T14:38:42.493870Z mysqld_safe A mysqld process already exists[1]+Exit 1/greatsql/svr/greatsql/bin/mysqld_safe --defaults-file=/greatsql/conf/greatsql4306.cnf [greatsql@greatsql-1 ~]$ ps axj |head -1;ps axj |grep 4306 |grep -v grep PPIDPIDPGIDSID TTYTPGID STATUIDTIME COMMAND1 19658 18229 17206 pts/717360 Sl9860:09 /greatsql/svr/greatsql/bin/mysqld --defaults-file=/greatsql/conf/greatsql4306.cnf --basedir=/greatsql/svr/greatsql --datadir=/greatsql/dbdata/data4306/data --plugin-dir=/greatsql/svr/greatsql/lib/plugin --log-error=/greatsql/logs/error4306.log --open-files-limit=65535 --pid-file=/greatsql/dbdata/data4306/data/mysql.pid --socket=/greatsql/dbdata/data4306/data/mysql.sock --port=4306
mysqld_safe 退出,原因是已存在 mysqld 进程4、总结
- mysqld_safe 进程和 mysqld 进程是父子进程关系
- systemd 服务启动,kill 父进程(会话首进程),会导致子进程也退出
- mysqld_safe 命令启动,kill 父进程(非会话首进程),不会导致子进程退出;重新启动父进程,报错子进程已存在
- 可以使用mysqld_safe命令启动 + 改造mysqld_safe脚本,实现【启、停mysqld_safe进程,不会影响mysqld进程】 。此时不要混合使用systemd启动数据库,需要维护这个特殊的mysqld_safe
推荐阅读
- 从135瘦到85斤,提高代谢是减脂关键,8个方法让你快速掉秤
- 不跑不跳,8个方法让你快速掉秤,我愿称之为脂肪杀手
- 章丘铁锅烤蓝掉了咋办 章丘铁锅烤蓝掉了怎么办
- 白毛衣的油渍怎么去除 白毛衣有油渍洗掉妙招
- 彩笔画到衣服上怎么擦掉 彩笔画在衣服上怎么洗干净
- 白色皮衣染色了怎么去掉 白色皮衣上如果染色了怎么处理
- 不锈钢水痕怎么擦掉 不锈钢台面水痕迹怎么去除
- 十年前老板将我无情裁掉,十年后我再次遇到老板才知道对方用心良苦
- 如何去掉车内的胶水味 如何去掉车内的胶水味儿
- 草酸会洗掉油漆吗 草酸能洗掉油漆吗