我对 unix shell 脚本非常不熟悉。有没有办法创建 unix shell 脚本,仅在服务器启动时启动,并将按顺序执行以下命令:
# cd /mysql
# ./bin/safe_mysqld --user=root &
# ./support-files/mysql.server start
长话短说...我在 HP-UX 服务器上安装了 Mysql。但是客户希望将服务器安装在/mysql
标准/usr/local/mysql/
位置。上周,我一直在努力将 mysql 守护进程设置为在服务器启动时自动启动。
我不知道问题是什么,但到目前为止,启动服务器的唯一方法是使用上述命令。
更新:07.02.12 15:23
这是服务器启动时启动进程的简短输出:
Start MySQL Server .................................................. OK
...
然而,我进入后ps -ef
可以很容易地发现它尚未启动:
# ps -ef | grep -i mysql
root 3074 3056 0 15:26:53 pts/0 0:00 grep -i mysql
#
当我启动该过程时它应该是这样的:
# cd mysql
# ./bin/safe_mysqld --user=root &
[1] 3123
# Starting mysqld daemon with databases from /mysql/data
#
# ./support-files/mysql.server start
Starting MySQL
SUCCESS!
#
# ps -ef | grep -i mysql
root 3139 3123 0 15:27:19 pts/0 0:00 /mysql/bin/mysqld --basedir=/mysql --datadir=/mysql/data --u
root 3123 3056 0 15:27:19 pts/0 0:00 /bin/sh ./bin/safe_mysqld --user=root
root 3171 3056 0 15:27:59 pts/0 0:00 grep -i mysql
#
现在我认为我更清楚为什么要创建一个 shell 启动脚本,实际上是强制启动该进程使用这些命令。
答案1
二进制文件需要在启动时知道 my.cnf 文件的位置(将编译一个默认值)。您没有说明在构建 mysql 时使用了什么路径前缀。反过来,my.cnf 文件定义了数据文件的位置。
使用适当的 SysV init 脚本来管理服务器是个好主意。除了解决在启动时启动服务器的问题之外,您还可以在系统停止时获得干净的关机,您可以为不同的运行级别配置合理的行为,并以受控的方式单独停止/启动 mysql 服务器。如果您正确设置它,它将与 SAM 很好地配合。
有这里有一个例子(请注意,my.cnf 的位置作为参数传递给 safe_mysqld)。这应该在 /sbin/init.d 中,并在 /sbin/rcX.d 中有相应的(符号)链接(其中 X 是相关的运行级别)。该过程描述如下。
答案2
我认为最干净的事情(如果这对您来说是一个选择)是重新编译 MySQL。
在源目录(从 tarball 中提取):
./configure --prefix=/mysql
make && sudo make install