安装完成mysql
以后,每次启动和中止都很麻烦,有时候记不住去网上搜一下,看见你们都用service
来进行服务的管理,试了一下,果真好用。推荐你们也要这么用,若是你的服务器版本高于centos7
,可使用systemd
命令(取代service
命令)来管理。html
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
的保存位置,所以比较麻烦。mysql
service
系统服务管理service
命令用于管理系统服务,好比启动(start)
,中止(stop)
,重启(restart)
,查看状态(status)
等。service
命令自己就是一个shell
脚本,用于方便的调用该脚原本完成任务,它在/etc/init.d/
目录下查找指定的服务脚本。linux
相关的命令还有:sql
chkconfig:
用于查看、设置服务的运行级别ntsysv:
用于设置服务的自启动service
运行指定服务(称为System V
初始脚本),只保留LANG
和TERM
两个环境变量,并设置当前路径为/
。若是一个服务脚本想要由service
进行管理,至少须要支持start
和stop
命令,并将脚本保存在/etc/init.d/
目录下。shell
service
的使用方式## 命令格式 Usage: service < option > | --status-all | [ service_name [ command | --full-restart ] ] # 查看指定服务的命令行使用帮助 service <service> ## mysqld 举例 $ service mysqld Usage: mysqld {start|stop|restart|reload|force-reload|status} [ MySQL server options ] # 启动、中止、重启指定服务 service <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 <service> on|off # 以全屏幕文本界面设置服务开机时是否自动启动 # 必须以root启动,空格切换状态,tab切换按钮,上下鼠标移动光标 ntsysv
除了用mysqld
示例外,咱们修改了主机名、IP
地址等信息时,也要常常重启网络生效,此时能够调用:数据库
service network status|restart
service
管理mysqld
服务咱们已经了解了基础的知识,如今就能够开始改造了,首先要在你的安装目录里找到mysql.server
文件。vim
$ locate mysql.server /usr/local/mysql/support-files/mysql.server
这个文件在安装时初始化,其实也就是一个脚本文件,支持输入不一样的参数执行不一样的功能,咱们能够查看它的start
函数:centos
# 根据输入的命令执行不一样的脚本,首先判断是否为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')
而后将它复制到/etc/init.d/
目录下:服务器
cp /usr/local/mysql/support-files/mysql.server /etc/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
文件,要么是权限问题,要么是路径不存在的问题,后面看发现是路径写错了,更改成正确的路径便可。
有时这个错误的信息指示并不明确,你能够尝试经过chmod 777 -R /path/to/mysql/data
解决问题。
错误日志路径的设置:
$ 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/
从新启动,该错误消失。
/usr/local/mysql: No such file or directory
未找到数据库目录是由于该启动脚本默认数据库在/usr/local
目录进行安装,所以代码中有一段配置,改写便可:
$ vim /etc/init.d/mysqld # If you install MySQL on some other places than /usr/local/mysql, then you # have to do one of the following things for this script to work: # # - Run this script from within the MySQL installation directory # - Create a /etc/my.cnf file with the following information: # [mysqld] # basedir=<path-to-mysql-installation-directory> # - Add the above to any other configuration file (for example ~/.my.ini) # and copy my_print_defaults to /usr/bin # - Add the path to the mysql-installation-directory to the basedir variable # below. # basedir=/home/work/mysql/ datadir=/home/work/mysql/data/
解决了上面这些问题,终于能够成功启动了,这个时候咱们能够方便的对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
的搜索,对咱们来讲是最大的助力。