MySQL服务启动脚本完全解析
2012-02-11 10:01
393 查看
http://ourmysql.com/archives/779
概述
如何启动mysql服务器?相信很多人的第一反应是 service mysql start(根据启动脚本的名称而异,有些可能是mysqld)。
那这句命令到底做了什么?“调用了/etc/init.d/mysql 这么一个脚本!”SA和DBA们异口同声的回答。
那这个脚本到底做了什么?相信大多数人很难给出一个很详细的回答。本文就将为你详细解释这一条命令背后所隐藏的秘密。
mysql启动脚本(后称mysql_server)是一个位于/etc/init.d下的用于mysql服务器启动,关闭,重启操作的shell脚本。由官方提供。
整个脚本共162行。包含5个函数,调用2个外部shell。属于一个轻量级的启动脚本。
脚本初始化部分
1个函数声明,2个外部shell调用,4个变量初始化
外部shell的调用:
/etc/rc.d/init.d/functions:linux提供的启动服务的一些函数
/etc/sysconfig/network:主机的网络配置
函数get_mysql_option()(line25-44):
用途:
获取VARNAME相应变量的设定值
接受参数:
FILE my.cnf的路径
VARNAME 需要获得的变量名
DEFAULT 变量的默认值
返回参数:
VARNAME对应的值
行为:
line26:调用sed命令,搜索出现”var=xxx”的行,返回最后一个VARNAME的值,
line27-30:如果cnf中没有设定,则返回DEFAUL值。
line32-42:去除包裹在值外面的双引号,单引号,行尾的注释
变量初始化:
行为:
line46-47:调用函数get_mysql_option获得datadir变量的值,默认值为/var/lib/mysql
line48-49:调用函数get_mysql_option获得socket变量的值,默认值为$datadir/mysql.sock
line50-51:调用函数get_mysql_option获得log-error变量的值,默认值为/var/log/mysqld.log
line52-53:调用函数get_mysql_option获得pid-file变量的值,默认值为/var/run/mysqld/mysqld.pid
start部分
用于启动mysql服务器
line56-69:初始化error-log
line74: 用mysqld_safe
启动/usr/bin/mysqld_safe –defaults-file=/etc/my.cnf –pid-file=”$mypidfile” –log-error=”$errlogfile” >/dev/null 2>&1 &
line79-95:循环30次,每秒一次,使用一个不存在用户调用mysqladmin ping,判断返回值是否是“Access denied”,是则说明服务器正常启动,用/bin/true通知用户启动成功。30次(30秒)尝试后仍不成功,则用/bin/false通知用户启动不成功。
line96: 如果启动成功,创建一个/var/lock/subsys/mysqld锁文件。
stop部分
用于关闭mysql服务器
line101:通过cat “$mypidfile”获得mysql-server的进程号。
line102:如果正确得到进程号,跳转到line103,如果得不到调到函数结尾。
line103:使用以下命令关闭服务器/bin/kill “$MYSQLPID” >/dev/null 2>&1
line105:循环60次,每秒一次,每次使用/bin/kill -0 “$MYSQLPID” >/dev/null 2>&1 命令再次尝试关闭。如果关闭成功,删除/var/lock/subsys/mysqld文件,socket文件,用/bin/true通知用户启动成功。60次(60秒)尝试后仍不成功,则用/bin/false通知用户启动不成功。
restart部分
重启mysql服务器
line131-134:依次调用stop和start函数
condrestart部分
存在文件锁才进行重启,先判断是否存在/var/lock/subsys/mysqld,如果存在,重启mysql服务器
概述
如何启动mysql服务器?相信很多人的第一反应是 service mysql start(根据启动脚本的名称而异,有些可能是mysqld)。
那这句命令到底做了什么?“调用了/etc/init.d/mysql 这么一个脚本!”SA和DBA们异口同声的回答。
那这个脚本到底做了什么?相信大多数人很难给出一个很详细的回答。本文就将为你详细解释这一条命令背后所隐藏的秘密。
mysql启动脚本(后称mysql_server)是一个位于/etc/init.d下的用于mysql服务器启动,关闭,重启操作的shell脚本。由官方提供。
整个脚本共162行。包含5个函数,调用2个外部shell。属于一个轻量级的启动脚本。
脚本初始化部分
1个函数声明,2个外部shell调用,4个变量初始化
外部shell的调用:
/etc/rc.d/init.d/functions:linux提供的启动服务的一些函数
/etc/sysconfig/network:主机的网络配置
函数get_mysql_option()(line25-44):
用途:
获取VARNAME相应变量的设定值
接受参数:
FILE my.cnf的路径
VARNAME 需要获得的变量名
DEFAULT 变量的默认值
返回参数:
VARNAME对应的值
行为:
line26:调用sed命令,搜索出现”var=xxx”的行,返回最后一个VARNAME的值,
line27-30:如果cnf中没有设定,则返回DEFAUL值。
line32-42:去除包裹在值外面的双引号,单引号,行尾的注释
变量初始化:
行为:
line46-47:调用函数get_mysql_option获得datadir变量的值,默认值为/var/lib/mysql
line48-49:调用函数get_mysql_option获得socket变量的值,默认值为$datadir/mysql.sock
line50-51:调用函数get_mysql_option获得log-error变量的值,默认值为/var/log/mysqld.log
line52-53:调用函数get_mysql_option获得pid-file变量的值,默认值为/var/run/mysqld/mysqld.pid
start部分
用于启动mysql服务器
line56-69:初始化error-log
line74: 用mysqld_safe
启动/usr/bin/mysqld_safe –defaults-file=/etc/my.cnf –pid-file=”$mypidfile” –log-error=”$errlogfile” >/dev/null 2>&1 &
line79-95:循环30次,每秒一次,使用一个不存在用户调用mysqladmin ping,判断返回值是否是“Access denied”,是则说明服务器正常启动,用/bin/true通知用户启动成功。30次(30秒)尝试后仍不成功,则用/bin/false通知用户启动不成功。
line96: 如果启动成功,创建一个/var/lock/subsys/mysqld锁文件。
stop部分
用于关闭mysql服务器
line101:通过cat “$mypidfile”获得mysql-server的进程号。
line102:如果正确得到进程号,跳转到line103,如果得不到调到函数结尾。
line103:使用以下命令关闭服务器/bin/kill “$MYSQLPID” >/dev/null 2>&1
line105:循环60次,每秒一次,每次使用/bin/kill -0 “$MYSQLPID” >/dev/null 2>&1 命令再次尝试关闭。如果关闭成功,删除/var/lock/subsys/mysqld文件,socket文件,用/bin/true通知用户启动成功。60次(60秒)尝试后仍不成功,则用/bin/false通知用户启动不成功。
restart部分
重启mysql服务器
line131-134:依次调用stop和start函数
condrestart部分
存在文件锁才进行重启,先判断是否存在/var/lock/subsys/mysqld,如果存在,重启mysql服务器
相关文章推荐
- 通过Shell开发企业级专业服务启动脚本案例(MySQL)
- windows下mysql启动停止服务示例脚本
- windows下制作mysql服务启动、关闭脚本
- windows下,将MySQL做成服务/脚本启动
- 破解windows下MySQL服务启动不了的情况下不能对其进行完全卸载的解决方案
- MySQL服务启动脚本
- 一个简单的mysql服务检测启动脚本
- Mysql服务启动脚本制作(win)
- 脚本启动MySql服务
- mysql服务启动不了 不能完全卸载 解决办法
- MySQL服务启动脚本
- MYSQL 服务无法启动 服务没有报告任何错误
- mysql服务无法启动 服务没有报告任何错误 请键入 NET HELPMSG 3534 以获得更多的帮助。
- orcle启动服务执行脚本
- mysql服务的启动
- 以Windows服务方式启动MySQL,并将其默认编码设置为UTF-8
- Android--Service完全解析,关于服务你所需知道的一切(下)
- Mongodb定制启动服务bootup的脚本
- 本地计算机 上的 MySQL 服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。
- mysql服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止