将mysql凭据传递给pt-stalk,而不在命令行上显示它们

我正在尝试使用init脚本来启动pt-stalk,但是我很难将mysql凭证放入脚本中,而无需将它们放入MYSQL_OPTS部分以启动pt-stalk。 [ 文档 ]

通常在服务器上,我们有/root/.my.cnf包含该机器的pipe理员凭证,但是无论是将脚本中的HOME var明确设置为/root在init脚本中,pt-stalk无法启动,因为mysql CLI实用程序找不到凭据。

我已经看过手册页,但我找不到任何允许我指定凭据文件来使用,而不是把所有的东西都作为命令行参数。

有问题的初始化脚本:

 #!/usr/bin/env bash # chkconfig: 2345 20 80 # description: pt-stalk ### BEGIN INIT INFO # Provides: pt-stalk # Required-Start: $network $named $remote_fs $syslog # Required-Stop: $network $named $remote_fs $syslog # Should-Start: pt-stalk # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 ### END INIT INFO export HOME=/root PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON="/usr/bin/pt-stalk" DAEMON_OPTS="--config /etc/pt-stalk.conf" NAME="pt-stalk" DESC="pt-stalk" PIDFILE="/var/run/${NAME}.pid" STALKHOME="/var/lib/pt-stalk" test -x $DAEMON || exit 1 [ -r /etc/default/pt-stalk ] && . /etc/default/pt-stalk #. /lib/lsb/init-functions sig () { test -s "$PIDFILE" && kill -$1 `cat $PIDFILE` } start() { if [[ -z $MYSQL_OPTS ]]; then HOME=$STALKHOME $DAEMON $DAEMON_OPTS else HOME=$STALKHOME $DAEMON $DAEMON_OPTS -- $MYSQL_OPTS fi return $? } stop() { if sig TERM; then while sig 0 ; do echo -n "." sleep 1 done return 0 else echo "$DESC is not running." return 1 fi } status() { if sig 0 ; then echo "$DESC (`cat $PIDFILE`) is running." return 0 else echo "$DESC is stopped." return 1 fi } log_begin_msg() { echo $1 } log_end_msg() { if [ $1 -eq 0 ]; then echo "Success" else echo "Failure" fi } case "$1" in start) log_begin_msg "Starting $DESC" start log_end_msg $? ;; stop) log_begin_msg "Stopping $DESC" stop log_end_msg $? ;; status) status ;; restart) log_begin_msg "Restarting $DESC" stop sleep 1 start log_end_msg $? ;; *) echo "Usage: $0 {start|stop|status|}" >&2 exit 1 ;; esac 

最初来自GitHub有一些小的变化。

这个页面上的例子似乎build议通过--defaults-file=./my.default.cnf作为pt-stalk的一个选项。

因此,更新你的$MYSQL_OPTSvariables,把它作为一个值,可能给你一个存放pt-stalk命令可以读取的地方的mysqlconfiguration文件(.my.cnf)的绝对path。