MySQL 路由器 8.4  /  配置  /  配置文件位置

4.2 配置文件位置

MySQL 路由器在启动时扫描默认配置文件,并可以选择在运行时从命令行加载用户定义的配置文件。

默认配置文件位置

默认情况下,MySQL 路由器会在特定位置扫描其配置文件,这些位置取决于平台和 MySQL 路由器的设置方式。

您可以在编译时使用 -DROUTER_CONFIGDIR=<path> 选项更改默认位置。您还可以在编译 MySQL 路由器之前编辑 cmake/settings.cmake 来更改默认位置,从而为特定平台添加新位置或例外。

执行 mysqlrouter --help 可以查看系统上的默认配置文件位置(及其可用性)。例如

$> mysqlrouter --help

...

Start MySQL Router.

Configuration read from the following files in the given order (enclosed
in parentheses means not available for reading):
  (/usr/local/mysql-router/mysqlrouter.conf)
  /Users/philip/.mysqlrouter.conf
Plugins Path:
  /usr/local/lib/mysqlrouter
Default Log Directory:
  /usr/local/mysql-router
Default Persistent Data Directory:
  /usr/local/mysql-router/data
Default Runtime State Directory:
  /usr/local/mysql-router/run

Usage: mysqlrouter [-v|--version] [-h|--help]

...
重要

如果使用 --config 选项传入用户定义的配置文件,则不会加载默认配置文件。

在 Linux 上,MySQL 路由器默认扫描以下位置,但这些位置取决于系统

  1. /etc/mysqlrouter/mysqlrouter.conf

    注意

    与 MySQL 服务器不同,不支持向后兼容的路径 "/etc/mysqlrouter.conf"。

  2. $HOME/.mysqlrouter.conf

注意

为了向后兼容,MySQL 路由器还会在每个目录中查找 .ini 变体。为此,路由器会在初始目录中查找 .conf 版本,然后检查 .ini 版本,然后在下一个目录(通常是系统上的用户主目录)中重复此过程。

用户定义和额外的配置文件

有两个命令行选项有助于控制这些配置文件位置

  • --config(或 -c):从此文件读取基本配置,并且不使用或扫描默认文件路径。

    使用示例:使用 --directory 引导选项生成独立的 MySQL 路由器安装时,生成的 start.sh 会将此选项传递给该目录中生成的 mysqlrouter.conf

  • --extra-config(或 -a):在从默认位置或使用 --config 选项指定的文件读取配置文件后,读取此附加配置文件。

例如

$> mysqlrouter --config /custom/path/to/router.conf --extra-config /another/config.conf

可以传入多个额外的配置选项,并且文件按输入顺序加载,--config 选项在 --extra-config 选项之前加载。例如

$> mysqlrouter --extra-config a.conf --config b.conf --extra-config c.conf

在上面的示例中,首先加载 b.conf,然后按顺序加载 a.confc.conf。此外,由于使用了 --config,因此不会加载默认配置文件,例如 /etc/mysqlrouter/mysqlrouter.conf

每个加载的配置文件都会覆盖先前读取的配置文件中的配置设置。

默认配置文件位置 (Linux)

以下列出了路由器在常用 Linux 平台上读取配置文件的默认文件位置。

注意

执行 mysqlrouter --help 可以查看系统上的默认配置文件位置(及其可用性)。

  • /usr/local 下的默认系统范围安装:/usr/local/etc/mysqlrouter.conf

  • RPM 和 Debian:/etc/mysqlrouter/mysqlrouter.conf

  • 在所有系统上,使用 --directory 进行引导的独立安装会将 mysqlrouter.conf 添加到 --directory 定义的目录中。

默认配置文件位置 (Windows)

MySQL 路由器在 Windows 上搜索配置文件的默认文件位置。

注意

执行 mysqlrouter.exe --help 可以查看系统上的默认配置文件位置(及其可用性)。

  • C:\ProgramData\MySQL\MySQL Router 下的默认系统范围安装:C:\ProgramData\MySQL\MySQL Router\mysqlrouter.conf

  • 此外:C:\Users\username\AppData\Roaming\mysqlrouter.conf,其中 username 替换为您的系统用户。

  • 除了 mysqlrouter.conf 之外,为了向后兼容,系统还会查找 mysqlrouter.ini

  • 使用 --directory:使用 --directory 进行引导的独立安装会将 mysqlrouter.conf 添加到 --directory 定义的目录中。

集群元数据中的 MySQL 路由器配置

从 MySQL 路由器 8.4 开始,针对 InnoDB 集群引导的路由器的完整配置存储在 InnoDB 集群元数据架构中,并且可以通过 MySQL Shell 操作 object.routerOptions 读取,适用于集群、集群集和副本集。

配置作为 JSON 存储在 mysql_innodb_cluster_metadata.routers 表中,每个路由器对应一行。每个路由器的行在启动或重启时由路由器更新。

例如

        mysql>  select JSON_PRETTY(attributes->>'$.Configuration') as Configuration from mysql_innodb_cluster_metadata.routers \G
        
        Configuration: {
"io": {
    "backend": "poll",
    "threads": 0
},
"common": {
    "name": "system",
    "user": "",
    "read_timeout": 30,
    "client_ssl_key": "/Users/areliga/dev/server/mysql-trunk/build/pt/data/router-key.pem",
    "client_ssl_cert": "/Users/areliga/dev/server/mysql-trunk/build/pt/data/router-cert.pem",
    "client_ssl_mode": "PREFERRED",
    "connect_timeout": 5,
    "server_ssl_mode": "PREFERRED",
    "server_ssl_verify": "DISABLED",
    "max_total_connections": 512,
    "unknown_config_option": "error",
    "router_require_enforce": true,
    "max_idle_server_connections": 64
},
"loggers": {
    "filelog": {
    "level": "info",
    "filename": "mysqlrouter.log",
    "destination": "",
    "timestamp_precision": "second"
    }
},
"endpoints": {
    "bootstrap_ro": {
    
    ......
    
    }
   }

有关更多信息,请参阅使用 MySQL Shell 查看路由器配置

为了向后兼容,MySQL 路由器继续在 mysql_innodb_cluster_metadata.routersattributes JSON 中存储一些配置参数。

例如

select JSON_PRETTY(attributes) from mysql_innodb_cluster_metadata.routers;
| {
  "ROEndpoint": "6447",
  "RWEndpoint": "6446",
  "ROXEndpoint": "6449",
  "RWXEndpoint": "6448",
  "RWSplitEndpoint": "6450",
  "MetadataUser": "mysql_router1_plje99d",
  "Configuration": { /*...*/ },
  "bootstrapTargetType": "cluster"
} |