网站首页 > 技术文章 正文
背景
CentOS7 下的 service 命令都被重定向到 systemctl 了,PerconaMySQL 安装完成后,会自动添加开机启动服务,它的服务脚本文件为 mysql.service,如果需要对该服务脚本进行改造,添加 numa 控制,该怎么办呢?本文来探讨这个问题。
问题
搜索 MySQL 开机启动服务文件,得到结果如下:
find / -name mysql.service
/etc/systemd/system/mysql.service
我希望修改该文件,于是进入目录,准备下载到本机,但是每次都下载失败,仔细观察发现它的文件名称前面有一个回形针图标,说明它是一个软链接。
分析
事实上,mysql.service 它真正的文件路径为 /usr/lib/systemd/system/mysqld.service。
内容如下:
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
Alias=mysql.service
[Service]
User=mysql
Group=mysql
Type=forking
PIDFile=/var/run/mysqld/mysqld.pid
# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0
# Execute pre and post scripts as root
PermissionsStartOnly=true
# Needed to create system tables
ExecStartPre=/usr/bin/mysqld_pre_systemd
# Start main service
ExecStart=/usr/bin/numactl --cpubind=0 --membind=0 /usr/sbin/mysqld --daemonize --pid-file=
/var/run/mysqld/mysqld.pid $MYSQLD_OPTS
# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql
# Sets open_files_limit
LimitNOFILE = 5000
Restart=on-failure
RestartPreventExitStatus=1
PrivateTmp=false
这是 systemd 统一的 service 配置,install 标签的 Alias=mysql.service 说明了我们常用的 service mysql 就是这个服务,它真正的服务名称是mysqld,这就可以解释为什么有些MySQL的服务名称为 mysqld 了。
第一步, 编辑 /etc/systemd/system/mysql.service,修改 ExecStart 配置,添加内核绑定逻辑:
ExecStart=/usr/bin/numactl --cpubind=0 --membind=0 /usr/sbin/mysqld
–daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS
由于这里是配置,而不是直接执行的命令,所以命令名称都需要全路经,不能直接用 numactl 命令,否则会报错导致启动失败。
这个链接文件修改之后,它真正的文件mysqld.service也自动修改了。
其次, 修改开机启动服务文件后,需要执行reload命令,才能生效。
systemctl daemon-reload
service mysql restart
启示录
顺便看了一下 systemd 的知识,它的目录为 /usr/lib/systemd/system,其下有大量以 service 为后缀的文件,就是所有的开机启动服务文件。内容都有相同的模版,大概就明白了mysql 的开机启动服务是怎么回事儿了。
猜你喜欢
- 2024-10-20 MySQL日志篇(mysql的日志文件在哪里)
- 2024-10-20 如何快速定位MySQL 的错误日志(Error Log)?
- 2024-10-20 小白自学MySQL笔记(一):Mac环境的安装和启动
- 2024-10-20 MySQL执行计划主要通过EXPLAIN命令来查看
- 2024-10-20 MySQL service启动脚本浅析(r12笔记第59天)
- 2024-10-20 借助shell脚本,解决MySQL服务自动停止的问题
- 2024-10-20 MySQL 还在跑任务时,突然断电,数据库崩了又好像没崩……
- 2024-10-20 超详细的mysql数据库查询缓存总结,值得收藏
- 2024-10-20 一文看懂mysql数据库本质及存储引擎innodb+myisam
- 2024-10-20 MySQL慢查询开启与跟踪(mysql查询缓慢原因和解决方案)
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)