有人在 Debian 上使用 mysqlmanager 运行多个 MySQL 实例吗?问题是,Debian 没有附带考虑 mysqlmanager 的 init.d 脚本。哦,它对我来说不起作用。
我正在尝试运行 3 个实例,以下是启动 mysqlmanager 后得到的结果
#mysqlmanager--defaults-file=/etc/mysql/my.cnf ... 090614 0:42:10 正在启动实例“mysqld2”... 090614 0:42:10 守护者:启动实例“mysqld1”... 090614 0:42:10 正在启动实例“mysqld1”... 090614 0:42:10 正在启动实例“mysqld3”... 090614 0:42:10 守护者:启动实例“mysqld3”... 090614 0:42:10 守护者:启动实例“mysqld2”... 090614 0:42:10 正在启动实例“mysqld2”... 090614 0:42:10 守护者:启动实例“mysqld1”... 090614 0:42:10 正在启动实例“mysqld1”... ...
它只是不断地“启动”和“重新启动”,但没有 MySQL 实例启动。
答案1
回答我自己的问题:
mysqld 由于权限问题正在重新启动,正在执行
# chmod -R mysql:root /var/lib/mysql
已修复。以前该目录归 mysql:mysql 所有。
关于 mysqlmanager 启动脚本,我设法破解了一个丑陋的解决方案,对我来说很有用,如果您需要它,请随意编辑和使用:
/bin/bash #!/bin/bash # 设置-e 设置-u ${DEBIAN_SCRIPT_DEBUG:+ 设置 -v -x} 测试-x /usr/sbin/mysqld ||退出0 ./lib/lsb/init-函数 SELF=$(cd $(目录名 $0); pwd -P)/$(基名 $0) 用户=mysql PID_FILE=/var/run/mysqld/manager.pid mysqlmanager_get_pid(){ FAIL_PID=-1 如果 [ !-f $PID_FILE ] ; 那么 # 尝试通过进程名称找到它 进程=`ps -ef | grep -v grep | grep mysqlmanager` 如果 [ !$PROCESS ] ; 那么 返回 $FAIL_PID 别的 返回 $PROCESS 菲 别的 PID=`cat $PID_FILE` 进程=`ps -ef | grep -v grep | grep -c $PID` 如果 [ !$PROCESS ] ; 那么 返回 $FAIL_PID 别的 返回 $PROCESS 菲 菲 } 案例“${1:-''}” '开始') 如果 !mysqlmanager_get_pid; 然后 /usr/sbin/mysqlmanager --defaults-file=/etc/mysql/my.cnf --run-as-service 别的 echo“错误:mysqlmanager 正在运行” 菲 ;; '停止') # 我太懒了,不想让它变得更智能 killall -1 mysqlmanager killall -1 mysqld ;; '重新开始') 设置 +e;$SELF 停止;设置 -e $SELF 开始 ;; *) echo "用法:$SELF start|stop|restart" 出口 1 ;; 埃萨克
只需将其放入 /etc/init.d/mysql 中(将原始 mysql 脚本移出),
使其可执行
# chmod +x /etc/init.d/mysql
而且它应该可以工作。
答案2
也许使用 mysqld_multi 会更简单?我已经分析了 SLES 中的服务脚本,我发现如果您设置:
/etc/sysconfig/mysql
选项:
MYSQLD_MULTI="no"
设置为“是”则常规守护进程不会启动服务器,但它正在调用 mysqld_multi 守护进程。
我很遗憾,因为这种方法在 Debian 中没有实现,但我确信,如果您修改 mysql 服务脚本并添加使用 mysqld_multi 守护进程的声明,那么您将拥有具有多个实例的功能齐全的服务器。
问候,Vlado