简述
使用service方式启停mysqld服务,就是命令操作比较简便,例如:
##Linux 7以下版本
service mysqld startservice mysqld stop
##Linux7或以上版本(使用systemd)
systemctl start mysqldsystemctl stop mysqld
这种方式,实际也是调用mysqld程序或者mysqld_safe程序进行启动mysqld服务,例如:
/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/etc/my.cnf --daemonize --pid-file=/data/mysql/run/mysqld.pid

service文件内容
那下面可以看看systemctl管理工具调用mysqld.service文件,具体有哪些内容呢。
cat >mysqld.service[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlType=forkingPIDFile=/data/mysql/run/mysqld.pid# Disable service start and stop timeout logic of systemd for mysqld service.TimeoutSec=0# Execute pre and post scripts as rootPermissionsStartOnly=true# Needed to create system tables#ExecStartPre=/usr/bin/mysqld_pre_systemd# Start main serviceExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/etc/my.cnf --daemonize --pid-file=/data/mysql/run/mysqld.pid $MYSQLD_OPTS# Use this to switch malloc implementationEnvironmentFile=-/etc/sysconfig/mysql# Sets open_files_limitLimitNOFILE = 65535Restart=on-failureRestartPreventExitStatus=1PrivateTmp=false
Unit文件内容说明:
[Unit]:主要是对这个服务的说明,内容, 文档介绍以及对一些依赖服务定义 Description : 服务的简单描述 Documentation :服务文档 Requires:当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败 Wants:与当前 Unit 需要的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败 BindsTo与当前 Unit 绑定的其他 Unit,如果它们退出,会导致当前 Unit 停止运行 Before:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后启动 After:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之前启动 Conflicts:这里指定的 Unit 不能与当前 Unit 同时运行 Condition…:当前 Unit 运行必须满足的条件,否则不会运行 Assert…:当前 Unit 运行必须满足的条件,否则会报启动失败 [service]:服务本体,在定义完了 Systemd 用来识别服务的单元后,我们来定义服务本体。基本的用法如下: Type:服务的类型,各种类型的区别如下所示 simple:默认,这是最简单的服务类型。意思就是说启动的程序就是主体程序,这个程序要是退出那么一切皆休。 forking:标准 Unix Daemon 使用的启动方式。启动程序后会调用 fork() 函数,把必要的通信频道都设置好之后父进程退出,留下守护精灵的子进程。(以 fork 方式从父进程创建子进程,创建后父进程会立即退出) oneshot:systemd中的Type=oneshot服务描述了这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。 dbus:这个程序启动时需要获取一块 DBus 空间,所以需要和 BusName= 一起用。只有它成功获得了 DBus 空间,依赖它的程序才会被启动。 notify:这个程序在启动完成后会通过 sd_notify 发送一个通知消息。所以还需要配合 NotifyAccess 来让 Systemd 接收消息,后者有三个级别:none,所有消息都忽略掉; main,只接受我们程序的主进程发过去的消息; all,我们程序的所有进程发过去的消息都算。NotifyAccess 要是不写的话默认是 main。(当前服务启动完毕,会通知Systemd,再继续往下执行) ExecStart:启动当前服务的命令 ExecStartPre:启动当前服务之前执行的命令 ExecStartPost:启动当前服务之后执行的命令 ExecReload:重启当前服务时执行的命令 ExecStop:停止当前服务时执行的命令 ExecStopPost:停止当其服务之后执行的命令 RestartSec:自动重启当前服务间隔的秒数 Restart:定义何种情况 Systemd 会自动重启当前服务,可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog no(默认值):退出后不会重启; always:不管是什么退出原因,总是重启; on-success:只有正常退出时(退出状态码为0),才会重启; on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启; on-abnormal:只有被信号终止和超时,才会重启; on-abort:只有在收到没有捕捉到的信号终止时,才会重启; on-watchdog:超时退出,才会重启,如ssh服务设置为on-failure,表示任何意外的失败,就将重启sshd。如果sshd正常停止(比如执行systemctl stop命令),它就不会重启。 TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数 RemainAfterExit:值为yes或no,表示进程退出以后,服务仍然保持执行。这样的话,一旦使用systemctl stop命令停止服务,ExecStop指定的命令就会执行通常和type=oneshot配合使用 Environment:指定环境变量 EnvironmentFile:指定当前服务的环境参数文件,该文件的key=value键值对,可以用$key的形式,在当前配置文件中获取 User:指定用户运行 Group:指定用户组运行 WorkingDirectory:进程工作目录,也就是说在执行前会先切换到这个目录 [Install]:服务安装的相关设置,一般可设置为多用户的 WantedBy:它的值是一个或多个 Target,当前 Unit 激活时(enable)符号链接会放入/etc/systemd/system目录下面以 Target 名 + .wants后缀构成的子目录中 RequiredBy:它的值是一个或多个 Target,当前 Unit 激活时,符号链接会放入/etc/systemd/system目录下面以 Target 名 + .required后缀构成的子目录中 Alias:当前 Unit 可用于启动的别名(比如Master.service文件名字,正常 systemctl status Master.service,设置别名叫Alias=nm,那你就可以systemctl status nm.service 查看实际是Master.service的服务了) Also:当前 Unit 激活(enable)时,会被同时激活的其他 Unit Linux 缓和的执行进程关闭,然后重启。在对配置文件修改后需要重启进程时可发送此信号。
这个mysqld.service文件可以放在/etc/systemd/system目录或者/usr/lib/systemd/system目录下面,前面的目录优先级高一些。
配置这种方式启动mysqld服务,当操作系统重启的时候,默认情况下,系统会自动将mysqld服务进程启动。
在同一台机器,只有一个单实例的情况之下,一般在/etc/systemd/system目录下创建mysqld.service一个Unit就可以了,当然可以命名为其他文件名,但是文件后缀就是.servic。如果同一台机器有多个MySQL实例,同时配置这种启动方式,实例间可以用端口加以区分,创建启动不同Unit服务调用的文件名则也可以用端口加以区分,比如mysqld3307.service、mysqld3308.service、mysqld3309.service等等,那么启动执行的命令也会以服务名加以区分,如下:
systemctl start mysqld3307systemctl start mysqld3308systemctl start mysqld3309
文章转载自skylines,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




