0

MySql 路由器有一个命令来引导自己

mysqlrouter --bootstrap root@127.0.0.1:3306  --directory /tmp/router

启动后,路由器将退出,我们应该使用启动生成的配置文件再次运行它,因为我将修改此文件

mysqlrouter --config /tmp/router/mysqlrouter.conf

在 Linux 纯环境下可以,但在 docker 中不行,下面是我的 docker compose 文件

version: '2'
services:

common: &baseDefine
    environment:
        MYSQL_HOST: "192.168.213.6"
        MYSQL_PORT: 3306
        MYSQL_USER: 'root'
        MYSQL_PASSWORD: 'urpwd.root'
        MYSQL_INNODB_CLUSTER_MEMBERS: 3
        MYSQL_CREATE_ROUTER_USER: 0
    image: "docker.io/mysql/mysql-router:latest"

    volumes:
        - "./conf:/tmp/myrouter"

    network_mode: "host"

boot:
    container_name: "mysql_router_boot"

    command: ["mysqlrouter","--bootstrap","root@192.168.213.7:3306","--directory","/tmp/myrouter","--conf-use-sockets","--conf-skip-tcp",
                    "--force","--strict","--user","mysqlrouter","--account","sqlrouter","--account-create","if-not-exists"]

    <<: *baseDefine


run:
    container_name: "mysql_router"
    restart: always

    command: ["mysqlrouter","--config","/tmp/myrouter/mysqlrouter.conf"]

    <<: *baseDefine

首先,我将调用引导服务进行引导,并生成配置到指定目录

docker-compose run --rm boot

在这个命令之后,配置文件就生成好了,然后我执行

docker-compose run --name mysql_router run

它会工作,但不像我想象的那样工作,没有 docker,运行 mysqlrouter 的第二步只使用 config 并且没有引导但是使用 docker 和那些命令,第二步将再次引导。我知道这是因为 2 个容器中有 2 个服务。有什么想法可以让这个流程更合适吗?比如在一个容器中运行 2 个服务?或者在现有容器中运行服务?

4

1 回答 1

0

没关系:

修改yml的run service命令

run:
    command: /bin/bash -c "mysqlrouter --config /tmp/myrouter/mysqlrouter.conf"

使用 bash 运行 mysqlrouter delay 以识别存在的 conf 文件;有用

于 2021-08-10T05:52:03.170 回答