在MySQL的管理过程中偶尔会遇到一些PC Server宕机或者重启这时我需要在主机启动后再将MySQL服务启动一般情况下这项工作都是简单的但是当面临上百台或者更多的MySQL主机的时候这种偶尔可能会很多这种偶尔还会在半夜或者凌晨发生如果每次都手动操作这是很繁琐的更重要的是如果因此而打断了凌晨的美梦是不值得的
要实现随开启自动启动mysqld我们需要搞定如下几个问题
Linux开机自动启动脚本放在哪儿?
一般的作为服务器使用的Linux一般会以完全多用户模式(MultiUser Mode with Networking)级别来启动这种情况下Linux在启动时会运行/etc/rcd/rcd/下的全部脚本例如我们在这个目录下会看到脚本/etc/rcd/rcd/Scrond意味着开机启动时会运行Scrond脚本
Linux如何运行这些脚本?
既然已经知道自动启动脚本该放在哪儿了一切就好办我们只需要将一个启动MySQL的脚本放过去就好了下面是我们的一个简单的启动脚本v mysqldauto
$vi mysqldauto
#!/bin/sh
# Version: by
/opt/mysql/bin/mysqld_safe user=mysql & #这里需要修改为你的mysqld_safe目录
$chmod +x mysqldauto
$mv mysqldauto /etc/rcd/initd/
$ln s /etc/rcd/initd/mysqldauto /etc/rcd/rcd/Smysqld
这样我们就把创建的mysqldauto脚本放到了/etc/rcd/rcd/下面(注意这里使用了link的方式)mysqld可以自动启动了
这有两个问题需要解释
* * * * * 为什么不直接在目录/etc/rcd/rcd/下创建文件而要创建一个软连接?这并不是必须的但是这样做是有很多好处的(后面会解释)不过这样做至少会看起来更加专业
* * * * * 为什么文件名要用Smysqld?这是规则在rcd下面的脚本如果以字母S开头那么执行时Linux会给它传递一个start参数(如果以字母K开头则会传递stop参数)S后面接个数字表示了这个脚本的启动顺序如果目录rcd下还有S*那么它会在S之前运行(看到这儿你可以猜测一下前面我们为什么要创建软连接了)
好了自此你的mysqld就已经可以随Linux开机自动启动了
怎样做更专业些?
上面这样做已经可以解决问题了不过写法多少有些山寨下面我们看看怎样改造一下
* * * * * 改造处理参数start既然前面提到以字母S开头的脚本会自动传递一个参数startK则会传递stop那么我再做如下修改
$vi mysqldauto
#!/bin/sh
# Version: by
MYSQLHOME=/opt/mysql #这里需要修改为你的mysql安装目录
if [ $# ge ];then
mysqldProc=`ps ef|grep E mysqld+safe|grep v grep|wc l`
if [ $ = stop ] ;then
if [ $mysqldProc eq ];then
$MYSQLHOME/bin/mysqladmin uroot shutdown
fi
elif [ $ = start ];then
if [ $mysqldProc eq ];then
$MYSQLHOME/bin/mysqld_safe user=mysql &
fi
fi
fi
做了如此改造后我们脚本需要接收两个参数start stop了如果你想让你mysqld在关闭主机的时候自动关闭那么stop参数就可以起作用了
$ln s /etc/rcd/initd/mysqldauto /etc/rcd/rcd/Kmysqld
这里做软连接好处就体现出来了启动和关闭只需要用一个脚本就可以了
* * * * * 改造当你面临几十上百台主机的时候MySQL的启动参数可能会不一样例如备库启动时可能需要mysqld_safe –user=mysql –read_olny= &这种情况怎么办呢?这里提供一个解决思路
在主机上运行一个脚本探测当前mysqld的启动参数然后写到一个指定的文件里最后在你的启动脚本中读取这个文件里面的启动参数来启动mysqldIt works