IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

MySQL服务启动脚本完全解析

SQL部落 2009-11-29 21:57:50 累计浏览 3,307 次
本机暂存

    概述

    如何启动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. 第七章 事务 (2026-04-07 08:00:00)
  2. 第六章:分区 (2026-03-29 08:00:00)
  3. Neko Master: 从 0 到 1K+ Star 的 Vibe Coding 实践 (2026-03-01 08:00:00)

查看更多 数据库 文章 →

建议继续学习

  1. 用Hyer来进行网站的抓取 (累计阅读 158,173)
  2. MySQL数据库在实际应用一些方面的介绍 (累计阅读 36,332)
  3. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,092)
  4. Bash的模式和配置文件加载 (累计阅读 24,350)
  5. Mysql监控指南 (累计阅读 21,228)
  6. Linux如何统计进程的CPU利用率 (累计阅读 16,211)
  7. 由浅入深探究mysql索引结构原理、性能分析与优化 (累计阅读 16,204)
  8. 我的 RHCA 之路 (累计阅读 13,930)
  9. Linux内存点滴 用户进程内存空间 (累计阅读 13,059)
  10. 给程序员新手的一些建议 (累计阅读 13,026)