Debian 下通过 mysqlmanager 实现多个 MySQL 实例

Debian 下通过 mysqlmanager 实现多个 MySQL 实例

有人在 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

相关内容