技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> MySQL --> MySQL服务启动脚本完全解析

MySQL服务启动脚本完全解析

浏览:2567次  出处信息

    概述

    如何启动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服务器

建议继续学习:

  1. 配置Nginx+uwsgi更方便地部署python应用    (阅读:105399)
  2. Linux 下 PHP 5.2.x 连接 SQL Server 数据库 FreeTDS 配置笔记    (阅读:10102)
  3. nginx的配置文件    (阅读:8821)
  4. Emacs安装配置    (阅读:7304)
  5. 如何查看Linux 硬件配置信息    (阅读:5863)
  6. Centos yum 安装nginx+PHP-FPM+eAccelerator+mysql    (阅读:5611)
  7. Apache2中俩种设置PHP的异同    (阅读:5293)
  8. Linux(Ubuntu 10.04)上安装配置apache+php+mysql+phpmyadmin    (阅读:5003)
  9. 在FreeNAS/BSD搭建基于Nginx+FastCGI+MySQL+PHP的WebServer    (阅读:4754)
  10. Nginx启动初始化过程(一)    (阅读:4484)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1