• 1
  • 2
  • 3
  • 4
  • 5
mysql数据库问题 首 页  »  帮助中心  »  数据库  »  mysql数据库问题
关于MySQL 启动原理的剖析
发布日期:2016-4-16 21:4:41

  关于MySQL 启动原理的剖析

  介绍

  本篇文章主要是通过查看MySQL的启动命令的代码来详细了解MySQL的启动过程,内容多为概念知识;理解MySQL的启动原理对熟悉MySQL至关重要,启动mysql服务有三种方式分别是:mysql.sever,mysqld,mysqld_safe。

  my.cnf

  

  mysql.server

  默认的mysql的服务启动程序是mysql.server,mysql.server程序主要是会用到两个程序和一个函数,分别是my_print_defaults、myslqd_safe与parse_server_arguments

  my_print_defaults:读取my.cnf配置文件,输出参数传递给parse_server_arguments,该程序只读my.cnf中[mysqld]中的参数;

  myslqd_safe:mysqld_safe程序调用mysqld程序来启动mysql服务;

  parse_server_arguments:该函数处理my_print_defaults传递过来的参数赋值给--basedir、--datadir、--pid-file、--server-startup-timeout;

  mysql.server

  

  parse_server_arguments

  

  

  通过查看mysql进程信息可以看到通过mysql.server启动首先会对参数--datedir和--pid-file赋值,这两个参数是从my.cnf文件[mysqld]部分中读取来的,而且这两个参数的值是不会受到mysqld_safe程序中的参数赋值给覆盖。但是在my.cnf中其它的参数值如果[mysqld]与[mysqld_safe]相同的话就以mysqld_safe为主,上图中的--open-files-limit就是说明的例子。

  mysqld_safe

  在以前老的版本mysqld_safe是主要的启动方式,而且参数也非常多;对于多实例的服务器需要用到mysqld_safe来启动。mysqld_safe会调用mysqld程序启动mysql服务,并且mysqld_safe会读取my.cnf中的配置参数值来启动mysql服务。mysqld_safe本身也有一些启动参数并且这些启动参数优先于配置文件中相应的参数。

  mysqld_safe --help

  

  pare_arguments函数

  这个函数是mysqld_safe程序中用来处理参数的一个函数,从下面的代码中可以了解到mysqld_safe主要处理哪些参数。

  

  

  

  通过mysqd_safe启动

  

  查看mysql进程信息可以看到通过mysqld_safe启动mysql服务后,myslqd_safe会对my.cnf配置文件的配置进行读取,如果配置文件中【mysqld】和【mysqld_safe】同时配置了相同的参数以[mysqld_safe]为主,所以会看到--pid-file也是以my.cnfa文件中的[mysqld_safe]中的为主。

  mysqld

  直接运行mysqld程序也是可以启动mysql服务,mysqld会使用默认的配置进行启动,对于多实例的mysql使用这种方法就不好实现。

  总结

  在新版本中不建议在[mysqld_safe]中进行参数的配置,对应多实例的服务器在启动的时候可以通过mysqld_safe来指定不同实例的路径和配置文件进行启动,需要用到----defaults-file、--ledir两个参数进行启动,从启动的代码可以看出mysql的启动要用到的两个关键参数--datadir --pid-file,所以这就是为什么经常会在启动和关闭mysql的时候提示找不到pid了。