资讯专栏INFORMATION COLUMN

用service命令管理mysql启停

snifes / 2101人阅读

摘要:系统服务管理命令用于管理系统服务,比如启动,停止,重启,查看状态等。总结服务管理工具,可以帮助我们快速的启停应用程序。参考资料我使用过的命令之系统服务管理安装后设置为服务命令无法重启问题解决和的区别

安装完成mysql之后,每次启动和停止都很麻烦,有时候记不住去网上搜一下,看见大家都用service来进行服务的管理,试了一下,果然好用。推荐大家也要这么用,如果你的服务器版本高于centos7,可以使用systemd命令(取代service命令)来管理。

启动和停止mysql服务
# 启动
/usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/tmp/mysql.sock
# 停止
kill `cat /usr/local/mysql/var/mysqld.pid`

这样启动和停止需要记住mysql的路径和pid的保存位置,因此比较麻烦。

service 系统服务管理

service命令用于管理系统服务,比如启动(start),停止(stop),重启(restart),查看状态(status)等。service命令本身就是一个shell脚本,用于方便的调用该脚本来完成任务,它在/etc/init.d/目录下查找指定的服务脚本。

相关的命令还有:

chkconfig:用于查看、设置服务的运行级别

ntsysv:用于设置服务的自启动

service运行指定服务(称为System V初始脚本),只保留LANGTERM两个环境变量,并设置当前路径为/。如果一个服务脚本想要由service进行管理,至少需要支持startstop命令,并将脚本保存在/etc/init.d/目录下。

service的使用方式
## 命令格式
Usage: service < option > | --status-all | [ service_name [ command | --full-restart ] ]

# 查看指定服务的命令行使用帮助
service 
## mysqld 举例
$ service mysqld
Usage: mysqld  {start|stop|restart|reload|force-reload|status}  [ MySQL server options ]

# 启动、停止、重启指定服务
service  start|stop|restart
## mysqld举例restart,即先执行stop再执行start命令
$ service mysqld restart
Shutting down MySQL..                                      [  OK  ]
Starting MySQL.                                            [  OK  ]

# 显示指定服务的状态
$ service mysqld status
MySQL running (27390)                                      [  OK  ]

# 显示所有服务的状态
service --status-all

# 查看系统服务列表,以及每个服务的运行级别
chkconfig --list

# 设置指定服务开机时是否自动启动
chkconfig  on|off

# 以全屏幕文本界面设置服务开机时是否自动启动
# 必须以root启动,空格切换状态,tab切换按钮,上下鼠标移动光标
ntsysv

除了用mysqld示例外,我们修改了主机名、IP地址等信息时,也要经常重启网络生效,此时可以调用:

service network status|restart
service管理mysqld服务

我们已经了解了基础的知识,现在就可以开始改造了,首先要在你的安装目录里找到mysql.server文件。

$ locate mysql.server
/usr/local/mysql/support-files/mysql.server

这个文件在安装时初始化,其实也就是一个脚本文件,支持输入不同的参数执行不同的功能,我们可以查看它的start函数:

# 根据输入的命令执行不同的脚本,首先判断是否为start
case "$mode" in
  "start")
    # Start daemon

    # Safeguard (relative paths, core dumps..)
    cd $basedir

    echo $echo_n "Starting MySQL"
    # 查看该bin/mysqld_safe命令是否存在,如果不存在,就直接报错:找不到
    if test -x $bindir/mysqld_safe
    then
      # Give extra arguments to mysqld with the my.cnf file. This script
      # may be overwritten at next upgrade.
      # 直接执行mysqld_safe命令,并传入参数,然后创建pid文件
      $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &
      wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?

      # Make lock for RedHat / SuSE
      if test -w "$lockdir"
      then
        touch "$lock_file_path"
      fi

      exit $return_value
    else
      log_failure_msg "Couldn"t find MySQL server ($bindir/mysqld_safe)"
    fi
    ;;

  "stop")

然后将它复制到/tmp/init.d/目录下:

cp /usr/local/mysql/support-files/mysql.server /tmp/init.d/mysqld

此时,就可以直接调用service来进行启动了:

service mysqld start
遇到的一些问题

上面的理论很简单,但在启动的过程中还是遇到了一些问题,解决问题最简单的方法就是Google+查看日志文件,这两个方法可以非常快的速度定位并解决。

配置文件被忽略

直接看启动时的报错信息:

$ service mysqld start
Warning: World-writable config file "/etc/my.cnf" is ignored
Starting MySQL.Warning: World-writable config file "/etc/my.cnf" is ignored

直接看报错原因,提示的是全局可写的配置文件被忽略。这个错误是指该配置文件可以被所有用户修改,因此有被恶意篡改的可能,因此不会引入这个文件的配置,忽略。

解决方案就是将该文件改为用户和用户组可读写,其他用户只读不可写:

chmod 664 /etc/my.cnf
PID文件无法创建

直接看报错信息:

$ service mysqld start
Starting MySQL.The server quit without updating PID file (/usr/var/mysql/var/mysqld.pid).

报错原因显示,启动MySQL时意外退出,因为没有更新PID文件。

这个时候,可能有些人看不太懂,没关系,我们直接看错误日志:

2019-03-21 22:29:45 32896 [ERROR] /usr/local/mysql/bin/mysqld: Can"t create/write to file "/usr/var/mysql/var/mysqld.pid" (Errcode: 2 - No such file or directory)
2019-03-21 22:29:45 32896 [ERROR] Can"t start server: can"t create PID file: No such file or directory

这个日志就很清楚的写明了无法创建这个mysqld.pid文件,要么是权限问题,要么是路径不存在的问题,后面看发现是路径写错了,更改为正确的路径即可。

错误日志路径的设置:

$ vim my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
pid-file = /usr/var/mysql/var/mysqld.pid
log-error = /user/local/mysql/log/mysql.err
log指令被废弃

解决了上面的问题,我们继续执行,依然发现同样的报错信息,但是日志文件却不同了:

$ service mysqld start
Starting MySQL.The server quit without updating PID file (/usr/var/mysql/var/mysqld.pid).

# 日志文件
2019-03-21 22:37:33 0 [ERROR] /usr/local/mysql/bin/mysqld: ambiguous option "--log=/usr/local/mysql/log/mysql.log" (log-bin, log_slave_updates)
2019-03-21 22:37:33 0 [ERROR] Aborting

发现日志报错信息提示:模糊的选项--log,这个不太明白,Google一下就能看到原因:--log指令已经被废弃很久了,现在使用--general-log来代替。修改my.cnf配置文件即可:

$ vim my.cnf
[mysqld]
general-log = /user/local/mysql/log/mysql.log
default-character-set指令被废弃

继续执行,依然同样的报错信息,查看日志文件:

2019-03-22 16:17:36 10893 [Note] InnoDB: 5.6.39 started; log sequence number 6572813439
2019-03-22 16:17:36 10893 [ERROR] /usr/local/mysql/bin/mysqld: unknown variable "default-character-set=utf8"
2019-03-22 16:17:36 10893 [ERROR] Aborting

报错提示default-character-set未知指令,查看官方文档 Server Command Options发现,该指令从5.5.3版本被废弃,用character-set-server来取代了。而我们的版本是5.6.39,因此替换掉该指令即可:

[mysqld]
character-set-server=utf8
my_print_defaults命令未找到

因为这个命令未找到,我们首先就是要找到这个命令的路径,然后将它添加到全局命令中:

$ locate my_print_defaults
/home/work/lnmp/mysql/bin/my_print_defaults
$ ln -s /home/work/lnmp/mysql/bin/my_print_defaults /usr/bin/

重新启动,该错误消失。

启动成功

解决了上面这些问题,终于可以成功启动了,这个时候我们可以方便的对mysqld服务进行启停以及restart了。

虽然service支持reload/force-reload参数,但是这个需要相关的服务支持才可以,然而MySQL并不支持配置实时reload,所以,还是需要你restart才能立刻更新配置。

$ service mysqld start
Starting MySQL.                                            [  OK  ]
centos7: systemd命令
centos7版本中使用了systemd,systemd同时兼容service,对应的命令就是systemctl
Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit 固有的缺点,提高系统的启动速度
使用systemd的目的是获取更快的启动速度。

但是由于我的服务器版本还是centos6,所以没有办法对这一部分做测试介绍,只能还是使用service命令来管理了。

总结

Service服务管理工具,可以帮助我们快速的启停应用程序。如果你的服务器版本在centos7以上,可以使用systemd来进行管理。同时在Mysql启动的过程中,掌握日志文件的查看和Google的搜索,对我们来说是最大的助力。

参考资料

我使用过的Linux命令之service - 系统服务管理:https://codingstandards.iteye...

安装mysql后设置为linux服务:https://blog.csdn.net/qq84545...

service命令:http://man.linuxde.net/service

MySQL无法重启问题解决Warning: World-writable config file ‘/etc/my.cnf’ is ignored:http://www.ttlsa.com/mysql/wa...

my.cnf:https://devilbox.readthedocs....

MySQL Error on Startup: ambiguous option "--log=/var/log/mysqld.log":https://serverfault.com/quest...

init,service和systemctl的区别:https://blog.csdn.net/lineuma...

5.1.6 Server Command Options:https://dev.mysql.com/doc/ref...

10.14 Character Set Configuration:https://dev.mysql.com/doc/ref...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/48620.html

相关文章

  • 实时查看MySQL执行的语句

    摘要:我们在追查问题和性能调优时,有时希望看到当前都有哪些命令正在被执行,让我们迅速找到热点命令。下面我们就来介绍下如何查看当前正在执行的语句。如果不是通过配置文件的方式变更状态,会在重启后失效。参考资料查看实时执行的语句用命令管理启停 我们在追查MySQL问题和性能调优时,有时希望看到当前都有哪些命令正在被执行,让我们迅速找到热点命令。下面我们就来介绍下如何查看当前正在执行的MySQL语句...

    elarity 评论0 收藏0
  • 达梦 DM8 数据库安装详细手册(Windows+Linux+Docker)

    摘要:以下命令设置页大小为,簇大小为,大小写敏感,字符集为,数据库名为,实例名为,端口为。如果可用内存过少,可能导致数据库安装或启动失败。安装数据库上传安装包,解压 目...

    Moxmi 评论0 收藏0
  • VMware Harbor:基于 Docker Distribution 的企业级 Registry

    摘要:架构介绍主要组件在架构上主要由五个组件构成的等服务,通过一个前置的反向代理统一接收浏览器客户端的请求,并将请求转发给后端不同的服务。目前不支持功能已提交。 前言 对于 Harbor 这样一个优秀的 Docker Registry 管理开源项目,以下内容基本上来自前人已有的研究,我只是将其在实践中进行了测试,并整理汇集了相关资料供大家参考,同时针对 Harbor 与 Rancher产品的...

    simon_chen 评论0 收藏0
  • redis-01-安装配置

    摘要:说明本篇文章将介绍在三大主流操作系统上安装。所以此处也介绍在和下的安装。在下安装最简单的方式就是使用来一键搞定了。一路狂点鼠标,安装完成即可。 [TOC] showImg(https://segmentfault.com/img/remote/1460000008941142?w=662&h=598); 说明 本篇文章将介绍在三大主流操作系统(Linux,mac,windows)上安装...

    Coly 评论0 收藏0
  • Linux笔记

    摘要:归纳一些自己常用的笔记一常用命令命令的命令可以查看内存等资源的使用情况。我们要优化的话,也就有针对性了。表示小时,可以是从到之间的任何整数。要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。 归纳一些自己常用的linux笔记 一、常用命令 top命令: linux的top命令可以查看cpu、内存等资源的使用情况。 如下图所示,拿内存来说,一共262144k,也就是256MB,用...

    idealcn 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<