ITPub博客

首页 > 数据库 > MySQL > mysql关于mysql.server的总结

mysql关于mysql.server的总结

原创 MySQL 作者:lusklusklusk 时间:2018-11-23 19:52:29 0 删除 编辑

1、mysql.server服务端工具,主要作用就是为了方便启动和关闭mysql服务,这个脚本中调用mysqld_safe来启动mysqld

2、RPM包安装时,发现/etc/rc.d/init.d/mysql和/usr/share/mysql/mysql.server里面的东西一模一样

3、mysql.server脚本其实也是调用mysqld_safe脚本去启动MySQL服务器的,但此时mysqld_safe不能使用参数选项即不能mysqld_safe --defaults-file这样的模式,此时只能使用默认的/etc/my.cnf配置文件

   相当于mysql.server把参数传递给mysqld_safe,mysqld_safe再传递给mysqld

4、mysql.server传递给mysqld_safe的参数,可以显式看到的都是parse_server_arguments函数指定的参数,如下只能看到--datadir、--pid-file,但是也都是来自my.cnf

   [root@mydb]# ps -ef|grep mysql

   root      6687     1  0 19:38 pts/1    00:00:00 /bin/sh /mysql/mysql57/bin/mysqld_safe --datadir=/mysql/mysql57/data --pid-file=/mysql/mysql57/data/mydb.pid

5、my.cnf会覆盖mysql.server里的basedir和datadir配置

   These may get overwritten by settings in the MySQL configuration files



解压文件安装时mysql.server存放于解压目录的support-files/mysql.server

cp /mysql/mysql-5.5.25-linux2.6-i686/support-files/mysql.server /etc/rc.d/init.d/mysqld

chmod 700 /etc/init.d/mysqld

chkconfig --add mysqld

chkconfig --level 345 mysqld on

service mysqld start


RPM安装方式下,mysql.server存放于/usr/share/mysql/mysql.server

[root@mydb mysql55rpm]# ll /etc/rc.d/init.d/mysql

-rwxr-xr-x 1 root root 10585 Mar 10  2011 /etc/rc.d/init.d/mysql

[root@mydb mysql55rpm]# ll /usr/share/mysql/mysql.server

-rwxr-xr-x 1 root root 10585 Mar  9  2011 /usr/share/mysql/mysql.server

[root@mydb mysql55rpm]# ll /usr/sbin/mysqld

-rwxr-xr-x 1 root root 45012185 Mar 10  2011 /usr/sbin/mysqld


[root@mydb mysql55rpm]# ps -ef|grep mysql

root      4448     1  0 16:57 pts/1    00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/mydb.pid

mysql     4527  4448  1 16:57 pts/1    00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/mydb.err --pid-file=/var/lib/mysql/mydb.pid


[root@mydb mysql55rpm]# diff /etc/rc.d/init.d/mysql /usr/share/mysql/mysql.server                     

[root@mydb mysql55rpm]#




mysql.server启动,默认使用/etc/my.cnf配置文件信息,--datadir=/mysql/mysql57/data,看到的--datadir、--pid-file都是parse_server_arguments函数指定的参数

[root@mydb]# service mysqld start

[root@mydb]# ps -ef|grep mysql

root      7747     1  0 21:13 pts/1    00:00:00 /bin/sh /mysql/mysql57/bin/mysqld_safe --datadir=/mysql/mysql57/data --pid-file=/mysql/mysql57/data/mydb.pid

mysql     7866  7747  8 21:13 pts/1    00:00:00 /mysql/mysql57/bin/mysqld --basedir=/mysql/mysql57 --datadir=/mysql/mysql57/data --plugin-dir=/mysql/mysql57/lib/plugin --user=mysql --log-error=/mysql/mysql57/data/mydb.err --pid-file=/mysql/mysql57/data/mydb.pid






mysqld_safe中的内容

mysql.server works by first doing a cd to the base directory and from there executing mysqld_safe

mysql.server的工作原理是先cd进入基目录,然后执行mysqld_safe



/usr/share/mysql/mysql.server中的内容

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>

and copy my_print_defaults to /usr/bin


在/etc/init.d/mysql里面修改basedir和datadir,会被my.cnf覆盖,即my.cnf中的生效而/etc/init.d/mysql中的不生效(已经实验验证过的)

If you change base dir, you must also change datadir. These may get overwritten by settings in the MySQL configuration files

basedir=

datadir=


The following variables are only set for letting mysql.server find things

if test -z "$basedir" then basedir=/usr/local/mysql bindir=/usr/local/mysql/bin else  bindir="$basedir/bin"

if test -z "$datadir" then datadir=/usr/local/mysql/data else datadir="$basedir/data"


parse_server_arguments() {

  for arg do

    case "$arg" in

      --basedir=*) 

      --datadir=*)  

      --pid-file=*) 

      --service-startup-timeout=*) 


Try to find basedir in /etc/my.cnf

conf=/etc/my.cnf


parse_server_arguments `$print_defaults $extra_args mysqld server mysql_server mysql.server`


echo $echo_n "Starting MySQL"

if test -x $bindir/mysqld_safe

then

#Give extra arguments to mysqld with the my.cnf file

$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1 &

else

log_failure_msg "Couldn't find MySQL server ($bindir/mysqld_safe)"


mysql.server 脚本的主要作用就是为了方便启动和关闭mysql服务,这个脚本中需要调用的是 mysqld_safe这个脚本

在调用mysqld_safe的时候要把-datadir、-pid-file,$other_args这些参数值传入到mysqld_safe 脚本,那怎么来确定这些参数呢?

首先得知道 my_print_defaults 这个命令,这个命令就是从配置文件中读取mysql的参数值,具体可以通过my_print_defaults  --help 查看:

parse_server_arguments 这个函数,其实只需要读取—basedir,--datadir,--pid-file,--service-startup-timeout这些参数


[root@mydb]# my_print_defaults --help

Prints all arguments that is give to some program using the default files

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30126024/viewspace-2221482/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Welcome to Lukes DB HOME。11G OCM, 5年以上DBA工作经验,博客仅记录自己的一个学习过程,不代表完全准确,如有需要,欢迎转载。

注册时间:2015-02-02

  • 博文量
    345
  • 访问量
    331454