MySQL路由器8.0  / 第 4 章 配置  / 4.3 配置选项  /  4.3.3 配置文件选项

4.3.3 配置文件选项

启动时,MySQL Router 会读取一起构成路由器配置的配置文件列表。至少需要一个配置文件。

MySQL Router 从与传统 INI 文件格式非常相似的配置文件中读取选项,包括部分和选项。这些指定了 MySQL Router 启动时设置的选项。有关文件语法信息,请参阅 第 4.1 节 “配置文件语法”

选项在 sections下定义,指示选项的含义。例如, [DEFAULT]user段下 是指系统用户运行路由器,而 [metadata_cache]段下 是指访问元数据的MySQL用户。 user

下表按部分分隔,总结了 MySQL Router 配置文件中定义的 MySQL Router 选项。这些表下方记录了有关每个选项的详细信息,例如描述和允许值。

常规选项

表 4.7 [默认]

选项名称 描述 类型
config_folder 配置文件的路径 细绳
connect_timeout 尝试连接到元数据服务器之前的秒数被视为超时;在 [DEFAULT] 部分设置。 整数
core-file 在路由器崩溃时写入核心文件 布尔值
event_source_name 仅限 Microsoft Windows 平台。定义 MySQL Router 在 Microsoft Windows 上作为服务运行时使用的服务名称。 细绳
keyring_path 密钥环文件的路径 细绳
logging_folder 路由器日志的路径 细绳
master_key_path 主密钥环文件的路径 细绳
master-key-reader 将主密钥返回到 STDOUT 的脚本 细绳
master-key-writer 从 STDIN 读取主密钥的脚本 细绳
max_total_connections 路由器允许的最大客户端连接总数 整数
pid_file 存储 PID 文件的位置 细绳
plugin_folder 路由器插件的路径 细绳
runtime_folder 运行时文件的路径 细绳
sinks 接收配置日志数据的日志记录方法 细绳
thread_stack_size 分配给每个线程堆栈的内存大小(以 KB 为单位) 整数
unknown_config_option 遇到未知配置选项时发送的错误类型 细绳
unreachable_destination_refresh_interval 多长时间(秒)探测一次无法到达的候选目的地的可用性 整数
user 路由器运行的系统用户 细绳

路由选项

表 4.8 [路由]

选项名称 描述 类型
bind_address 地址路由器绑定到,如果未定义端口,也使用 bind_port 细绳
bind_port bind_address 使用的默认端口 整数
client_connect_timeout 从 MySQL 服务器接收数据包的最大秒数 整数
client_ssl_cipher 客户端和 MySQL Router 之间允许使用哪些密码,默认为 SSL 密码的安全列表 细绳
client_ssl_curves client 和 MySQL Router 之间允许哪些曲线,默认为 SSL 曲线的安全列表 细绳
client_ssl_dh_params DH 参数文件的文件名。默认不设置 细绳
client_ssl_mode 控制从客户端到 MySQL Router 的连接是否必须加密,如果未设置则默认为 PREFERRED 细绳
connect_timeout 连接 MySQL 服务器的尝试被认为超时之前的秒数;在 [routing] 部分设置。 整数
destinations 路由目标作为逗号分隔的 MySQL 服务器列表或元数据缓存定义 细绳
dynamic_state 用于跟踪和存储活动 MySQL InnoDB 集群元数据服务器地址的生成的 JSON 文件的路径 细绳
max_connect_errors 放弃前 MySQL 服务器连接失败的最大次数 整数
max_connections 分配给路由目标 MySQL 服务器的最大连接数 整数
mode 路由模式,路由器如何选择目标MySQL服务器 细绳
net_buffer_length 设置 net_buffer_length 整数
protocol 连接到 MySQL 服务器的协议 细绳
read_timeout 对元数据服务器的读取操作被视为超时之前的秒数 整数
routing_strategy 路由策略(可选),路由器如何选择目标MySQL服务器 细绳
server_ssl_cipher 服务器的 SSL 密码 细绳
server_ssl_curves 服务器的 SSL 曲线 细绳
server_ssl_mode 服务器的 SSL 模式 细绳
server_ssl_verify 服务器的 SSL 验证 细绳
socket Unix 域套接字文件的路径 细绳

表 4.9 [连接池]

选项名称 描述 类型
idle_timeout 在关闭之前将空闲连接保留在收集池中的秒数 数字
max_idle_server_connections 客户端断开连接后保持打开的连接 数字

元数据缓存选项

表 4.10 [元数据缓存]

选项名称 描述 类型
auth_cache_refresh_interval 验证缓存刷新尝试之间的时间 数字
auth_cache_ttl 如果不刷新,缓存变为无效的时间 数字
bootstrap_server_addresses 带有元数据的 MySQL 服务器,作为逗号分隔的列表 细绳
cluster_type 对象路由器是针对 细绳
metadata_cluster InnoDB 集群名称 细绳
router_id 路由器编号 整数
ssl_ca 用于验证服务器证书的 SSL CA 文件 细绳
ssl_capath 包含用于验证服务器证书的 SSL CA 文件的目录 细绳
ssl_crl 用于验证服务器证书的 SSL CRL 文件 细绳
ssl_crlpath 包含用于验证服务器证书的 SSL CRL 文件的目录 细绳
ssl_mode 用于连接到元数据服务器的 SSL 连接模式,如果不设置则默认为 PREFERRED 细绳
tls_version 如果启用了 SSL,要请求的 TLS 版本的逗号分隔列表 细绳
ttl 生存时间,以秒为单位 整数
use_gr_notifications 组复制通知行为 整数
user 访问 MySQL 服务器元数据模式的 MySQL 用户 细绳

记录选项

表 4.11 [记录器]

选项名称 描述 类型
destination 要登录的设备名称;可选地与 [consolelog] 一起使用 细绳
filename 日志文件名;可选地与 [logger] 和 [filelog] 一起使用 细绳
level 记录级别 细绳
timestamp_precision 记录器时间戳精度 细绳

HTTP 服务器选项

表 4.12 [http_server]

选项名称 描述 类型
bind_address HTTP端口绑定的IP地址 细绳
port HTTP 服务器 TCP 端口 整数
require_realm [http_auth_realm] 名称 细绳
ssl_cert SSL认证文件名 细绳
ssl_cipher 批准的 SSL 密码 细绳
ssl_dh_param DH参数文件名 细绳
ssl 启用 TLSv1.2 或更高版本支持 整数
ssl_key SSL 密钥文件名 细绳
static_folder HTTP 服务器静态文件请求的目录 细绳

表 4.13 [http_auth_realm]

选项名称 描述 类型
backend [http_auth_backend] 部分的名称 细绳
method HTTP认证方式 细绳
name 经过身份验证的用户的域名 细绳
require 需要身份验证验证 细绳

表 4.14 [http_auth_backend]

选项名称 描述 类型
backend 后端类型 细绳
filename 后端存储文件名 细绳

表 4.15 [io]

选项名称 描述 类型
backend IO后端 细绳
threads IO线程数 数字

MySQL Router 配置文件选项说明

  • --core-file

    命令行格式 --core-file[={0|1}]
    介绍 8.0.31
    类型 布尔值
    默认值 0

    如果mysqlrouter死了, 写一个核心文件。核心文件的名称和位置取决于系统。在 Linux 上,一个名为 的核心文件 被写入进程的当前工作目录。 表示服务器进程的进程 ID。在 macOS 上,如果进程具有 授权,则会将名为的核心文件 写入目录。在 Solaris 上,使用coreadm 命令指定核心文件的写入位置以及命名方式。在 Windows 上,一个名为 的小型转储文件 被写入进程的当前工作目录。 core.pidpidcore.pid/corescom.apple.security.get-task-allowmysqlrouter.{pid}.dmp

  • event_source_name

    类型 细绳
    默认值

    仅限 Microsoft Windows 平台。定义 MySQL Router 在 Microsoft Windows 上作为服务运行时使用的服务名称。这使您能够在运行多个 MySQL 路由器实例时区分服务,并在事件日志中区分它们的消息。

    例如:

    [DEFAULT]
    event_source_name = MySQLRouterService
  • logging_folder

    类型 细绳
    默认值 $router_basepath

    MySQL Router 日志文件目录的路径。日志文件名为 mysqlrouter.log,如果此文件已存在,则会生成或附加到该文件。

    设置logging_folder为空值会将消息发送到控制台 ( stdout )。

    笔记

    默认logging_folder值从 "" 更改为 MySQL Router 2.1 中路由器的基本路径。

    将日志发送到的示例 /var/log/mysqlrouter/mysqlrouter.log

    [DEFAULT]
    logging_folder = /var/log/mysqlrouter

    当使用--directory bootstrap 选项时,生成的配置文件将其设置为 $directory/log/。

  • plugin_folder

    类型 细绳
    默认值 (Windows)
    默认值(其他) /usr/local/lib/mysqlrouter

    MySQL Router 插件的路径。此文件夹必须与 MySQL Router 安装目录相匹配。只有在插件不在标准安装位置的自定义安装中才应设置此项。

    默认值/usr/local/lib/mysqlrouter

  • runtime_folder

    类型 细绳
    默认值 (Windows)
    默认值(其他) /run/mysqlrouter

    MySQL Router 运行时文件的路径。

    默认值/run/mysqlrouter

  • master-key-writer

    命令行格式 --master-key-writer file_path
    介绍 8.0.12
    类型 细绳

    从 STDIN 读取主密钥的脚本。使用 --master-key-writer 命令行引导选项进行设置。

  • master-key-reader

    命令行格式 --master-key-reader file_path
    介绍 8.0.12
    类型 细绳

    将主密钥返回到 STDOUT 的脚本。使用 --master-key-reader 命令行引导选项进行设置。

  • config_folder

    类型 细绳
    默认值 (Windows)
    默认值(其他) /usr/local/etc/mysqlrouter

    MySQL Router 配置文件的路径。

    笔记

    当前config_folder在编译时设置。当未来的插件有自己的配置文件时,可以使用该选项。

    默认值/usr/local/etc/mysqlrouter

  • sinks

    介绍 8.0.16
    类型 细绳
    有效值 (Windows)

    consolelog

    filelog

    eventlog

    有效值(其他)

    consolelog

    filelog

    syslog

    将定义的日志级别发送到的接收器(不同的日志记录方法)。

    支持的接收器值是:consolelog、、 filelogeventlog在 Windows 上)和syslog(在基于 Unix 的系统上)。使用逗号分隔的列表来定义多个值。

    默认值filelog 如果logging_folder“[DEFAULT]”部分中的选项不为空,否则 consolelog

    例如,要将记录器配置为使用文件、控制台和事件日志,每个都使用 [logger]部分中配置的调试日志级别:

    [logger]
    level=debug
    sinks=consolelog,eventlog,filelog
  • keyring_path

    类型 细绳
    默认值 (Windows) %PROGRAMDATA%\MySQL\MySQL Router\keyring-data
    默认值(其他) /run/mysql-router/keyring-data

    指向密钥环文件的位置。

    系统范围的引导程序不会将此选项添加到生成的配置文件中,并假定密钥环文件位于系统范围的运行时状态目录中。如果 --directory还使用,则密钥环文件存储在该实例的运行时状态目录下,run/在指定目录下。

    如果未定义此选项,则使用系统范围的默认路径。

    用法示例:

    keyring_path = /opt/myrouter/data/keyring
    master_key_path = /opt/myrouter/mysqlrouter.key
  • master_key_path

    类型 细绳
    默认值 (Windows) %PROGRAMDATA%\MySQL\MySQL Router\mysqlrouter.key
    默认值(其他) /run/mysql-router/mysqlrouter.key

    主密钥文件的位置。此选项允许无人值守解密,否则在启动时会请求其位置。

    如果未指定此选项,则使用系统范围的默认路径。

    用法示例:

    keyring_path = /opt/myrouter/data/keyring
    master_key_path = /opt/myrouter/mysqlrouter.key
  • unknown_config_option

    介绍 8.0.29
    类型 细绳
    默认值 warning
    有效值

    warning

    error

    确定 MySQL Router 处理未知配置选项的行为,例如拼写错误。

    警告是默认行为,引导程序将其定义为 生成的配置文件中的错误。8.0.29 之前的 MySQL Router 版本忽略未知的配置选项。警告记录警告消息但不会停止,而错误表示路由器无法初始化并退出。

    [DEFAULT]
    unknown_config_option=warning
  • user (system)

    类型 细绳

    以具有名称 或数字用户 ID 的用户身份 运行mysqlrouter用户在此上下文中是指系统登录帐户,而不是授权表中列出的 MySQL 用户。这也可以在运行时使用 命令行选项进行分配。 user_nameuser_id--user

    在 Linux 上,使用官方 DEB 或 RPM 包安装 Router 会在主机上创建一个名为“mysqlrouter”的本地系统用户和组,MySQL Router 默认以该用户运行。该帐户没有 shell 访问权限,其主目录指向存储默认配置文件的目录。

    此选项的目的是将 MySQL Router 作为具有受限系统权限的用户运行。如果用户在系统中不存在,或者如果尝试以 root 身份启动 Router,则会发出错误并退出 Router。

    MySQL Router 可以在任何操作系统用户下引导和执行,除了对其自身文件的读写访问之外不需要特殊权限。它访问的文件包括插件(读取/执行)、配置文件、日志、UNIX 域套接字文件(如果启用)等。

    默认情况下,配置和日志文件写入系统范围的位置,例如/etc/var/log--directory或者,可以使用该选项将路由器引导到它自己的独立目录。例如:

    $> sudo mysqlrouter --bootstrap localhost:3310 --directory /a/path/myrouter --user snoopy

    在本例中,Router 在这里创建 /a/path/myrouter并添加了所有生成的文件和目录,这些文件和目录只能由系统用户写入snoopy。此外,user在生成的配置文件中定义 /a/path/myrouter/mysqlrouter.conf

    [DEFAULT]
    user=snoopy
    笔记

    user 这与节中定义 的定义不同 [metadata_cache] ,是MySQL用户。

  • ssl_ca

    类型 细绳

    连接到元数据服务器时用于验证服务器证书的 SSL CA 文件的路径。

    可以选择使用--ssl-ca bootstrap 选项进行设置。

  • ssl_capath

    类型 细绳

    包含 SSL CA 文件的目录路径,用于在连接到元数据服务器时验证服务器的证书。

    可以选择使用--ssl-capath bootstrap 选项进行设置。

  • ssl_crl

    类型 细绳

    连接到元数据服务器并验证其 SSL 证书时要使用的 SSL CRL 文件的路径。

    可以选择使用--ssl-crl bootstrap 选项进行设置。

  • ssl_crlpath

    类型 细绳

    包含连接到元数据服务器并验证其 SSL 证书时使用的 SSL CRL 文件的目录路径。

    可以选择使用--ssl-crlpath bootstrap 选项进行设置。

  • tls_version

    类型 细绳

    如果启用了 SSL,则以逗号分隔的要请求的 TLS 版本列表,例如“TLSv1.2,TLSv1.3”。

    可以选择使用--tls-version bootstrap 选项进行设置。

  • bind_address

    类型 细绳
    默认值 127.0.0.1

    可选 bind_address选项的相关资料:

    • 路由条目可以绑定到网络接口 (NIC)。默认bind_address 值为127.0.0.1。如果此处未定义端口,则 bind_port需要进行设置。

    • 默认情况下,为生成的路由器配置文件中的每个路由--bootstrap 设置bind_address=0.0.0.0。可以使用 更改此值 --conf-bind-address

    • 绑定到特定的 IPv4 或 IPv6 地址允许并确保 MySQL 路由器不会在不允许执行任何内容的 NIC 上启动和路由服务。

    • 不可能为每个路由配置组指定一个以上的绑定地址。但是,使用 0.0.0.0:($port您定义 $port 的位置)绑定主机上的所有网络接口 (IP)。也可以使用 IPv6 地址。

    用法示例:

    bind_address = 127.0.0.1:7001
    笔记

    bind_address不能在列表中 列出destinations

  • bind_port

    类型 整数

    或者,您可以定义默认端口以 bind_address使用 bind_port. 如果端口未在中配置bind_address,则bind_port需要并使用。

    (可选)使用 --conf-base-portbootstrap 选项设置这些值。

    以下三个示例均导致bind_address = 127.0.0.1:7001

    [routing:example_1]
    bind_port = 7001
    [routing:example_2]
    bind_port = 7001
    bind_address = 127.0.0.1
    [routing:example_3]
    bind_address = 127.0.0.1:7001
  • socket

    特定于平台 Linux
    类型 细绳

    使用 socket选项启用套接字,可以使用或不使用 TCP bind_portbind_address选项来指定。一个例子:

    [routing]
    socket = /tmp/mysqlrouter.sock
    destinations = a.example.com:3306,b.example.com:3307

    启动 MySQL Router 时,如果 socket 文件已经存在或无法写入,Router 将拒绝运行。

    相对路径是可以接受的,并且基于启动路由器的当前工作目录。

    路由器可以同时监听 TCP 套接字和 Unix 套接字。例如,以下 [routing]配置示例是有效的,并将路由器配置为侦听 localhost:1234和 上的连接/tmp/mysqlrouter.sock

    [routing:my_redirect]
    bind_address = localhost:1234
    socket = /tmp/mysqlrouter.sock
    mode = read-write
    destinations = localhost:57121, localhost:57122, localhost:57123
    笔记

    Unix 域套接字长度限制是特定于平台的,不应超过系统允许的长度。

  • protocol

    类型 细绳
    默认值 classic
    有效值

    classic

    x

    连接到目标 MySQL 服务器时由路由插件使用,可以设置为“经典”(默认)或“x”(X 协议)。

    用法示例:

    [routing:basic_failover]
    bind_port = 7001
    mode = read-write
    destinations = 10.20.200.1:33060, 10.20.200.2:33060
    protocol = x

    protocol选项还会影响每个目标使用的默认端口。如果未配置目标端口,则“经典”(默认)的默认端口为 3306,“x”(X 协议)的默认端口为 33060。

  • pid_file

    介绍 8.0.20
    类型 细绳

    设置 PID 文件的位置。这可以通过三种不同的方式设置(按优先顺序): --pid-file 命令行选项,pid_file 在路由器的配置文件中设置此选项,或定义 ROUTER_PID环境变量。

    如果--bootstrap指定,则pid_file忽略 ROUTER_PID 定义。这与--pid-file 导致路由器失败的命令行选项不同。

    如果--bootstrap未指定,则以下原因会导致 Router 失败:--pid-file 已存在,pid_file 或 ROUTER_PID 已设置但为空,或者 Router 无法写入 PID 文件。

  • connect_timeout

    类型 整数
    默认值(≥ 8.0.29) 5
    默认值(≤ 8.0.28) 1
    最小值 1
    最大值 65536

    连接到目标 MySQL 服务器时 MySQL 路由器使用的超时值。该值不能是无限制的,无效的值会导致配置错误。有效范围在 1 到 65536 之间。您应该保持较低的值。

    例如,使用read-write模式时,该值可以稍微高一点,以等待 PRIMARY 可用。当使用read-onlymode 进行辅助连接时,较低的值更有意义,因为 Router 在连接路由期间选择新服务器。

    用法示例:

    [routing]
    connect_timeout = 5

    可以在引导程序中使用 --conf-set-option=routing.connect_timeout.

  • connect_timeout

    类型 整数
    默认值(≥ 8.0.29) 5
    默认值(≥ 8.0.14,≤ 8.0.28) 15
    默认值(≤ 8.0.13) 30

    连接到 MySQL 元数据服务器时 MySQL 路由器使用的超时值。

    用法示例:

    [DEFAULT]
    connect_timeout = 5

    可以在引导程序中使用 --connect-timeout或 进行设置--conf-set-option=DEFAULT.connect_timeout

  • read_timeout

    类型 整数
    默认值 30

    从 MySQL 元数据服务器读取时 MySQL 路由器使用的超时值。默认值为 30 秒。

    用法示例:

    [DEFAULT]
    read_timeout = 30
  • destinations

    类型 细绳

    提供用于建立连接的主机信息。它接受以逗号分隔的目标地址列表或指向 InnoDB 集群的元数据缓存链接。

    特定主机的示例用法(静态路由):

    destinations = a.example.com,b.example.com,c.example.com
    笔记

    如果未明确设置目标端口,则如果 protocol设置为“经典”或未设置(默认),则默认端口为 3306,如果 protocol设置为“x”,则为端口 33060。

    InnoDB 集群元数据缓存的示例用法:

    destinations=metadata-cache://mycluster/default?role=PRIMARY

    metadata-cacheURI 选项是 :

    • role:确定连接可用的实例类型。可接受的值为 PRIMARY、SECONDARY 或 PRIMARY_AND_SECONDARY。

      该选项定义了具体的策略,默认的 metadata-cache 路由策略是round-robinrouting_strategy mysqlrouter.conf

    • disconnect_on_promoted_to_primary:控制当次级提升为主要时是否关闭与次级的现有客户端连接。默认值为“no”,这意味着现有客户端连接到提升的辅助节点不会在提升后关闭。在 URI 中设置 disconnect_on_promoted_to_primary=yes 以关闭这些现有连接。

      这个选项是在 MySQL Router 8.0.12 中添加的。

    • disconnect_on_metadata_unavailable:控制当组过载时是否关闭现有客户端连接。默认值为“no”,这意味着当组过载时现有的客户端连接不会关闭。在 URI 中设置 disconnect_on_metadata_unavailable=yes 以关闭这些现有连接。

      这个选项是在 MySQL Router 8.0.12 中添加的。

    笔记

    相关的是,这些情况会导致断开连接:在主节点降级为辅助节点后与主节点的连接,以及与不再属于集群的节点的连接。

  • dynamic_state

    介绍 8.0.14
    类型 细绳

    此选项跟踪和存储活动的 MySQL InnoDB 集群元数据服务器地址,并在路由器重新启动时加载它们。此功能由已弃用的静态选项激活, --bootstrap并且优先于已弃用的静态 bootstrap_server_addresses 选项。

    Bootstrapping 定义文件中 [DEFAULT] 部分下的dynamic_state选项。mysqlrouter.conf该值是名为 的 JSON 文件的路径,该文件 state.json是在引导路由器时创建的。使用state.jsonInnoDB Cluster 元数据服务器地址和 Group Replication ID(InnoDB Cluster 返回的 group_replication_name)进行初始化;在路由器运行时添加和更新附加信息。

    示例mysqlrouter.conf条目:

    [DEFAULT]
    dynamic_state=/opt/myrouter/data/state.json

    state.json生成的 示例--bootstrap

    {
        "metadata-cache": {
            "group-replication-id": "4b9e817a-0254-11e9-9cc0-080027bb5030",
            "cluster-metadata-servers": [
                "mysql://localhost:3310",
                "mysql://localhost:3320",
                "mysql://localhost:3330"
            ]
        },
        "version": "1.0.0"
    }

    不能同时设置deprecated 和dynamic_statedeprecated 选项。bootstrap_server_addresses为了向后兼容,如果仅 bootstrap_server_addresses设置,那么它的功能与以前的路由器版本中一样,并且不使用此动态配置功能。

    这个选项是在 MySQL Router 8.0.14 中添加的。

  • mode

    类型 细绳
    有效值

    read-write

    read-only

    deprecated mode 选项设置 Router 的调度,支持的两个 mode 值是:

    重要的

    MySQL Router 8.0.4 引入了 routing_strategy选项作为配置 模式计划的更灵活的方式。

    两者不能同时设置moderouting_strategy静态路由需要设置 1,而 InnoDB 集群是可选的。

    • 读写:通常用于路由到主或主要 MySQL 实例。

      Mode Schedule:在 读写模式下,所有流量都定向到列表中的初始地址。如果失败,则 MySQL Router 将尝试列表中的下一个条目,继续尝试列表中的每个 MySQL 服务器。如果列表中没有更多 MySQL 服务器可用,则路由将中止。

      笔记

      使用routing_strategy,可以使用 routing_strategy=next-available而不是定义相同的行为mode=read-write

      第一个成功连接的 MySQL 服务器被保存在内存中,作为第一个尝试未来传入连接的服务器。这是一个临时状态,这意味着在 MySQL Router 重新启动后它会被遗忘。

      [routing:example_strategy_mode]
      bind_port = 7001
      destinations = primary1.example.com,primary2.example.com,primary3.example.com
      mode = read-write

      由于mode已弃用,因此应改用前面的示例routing_strategy

      [routing:example_strategy]
      bind_port = 7001
      destinations = primary1.example.com,primary2.example.com,primary3.example.com
      routing_strategy = next-available
    • 只读:通常用于路由到副本或辅助 MySQL 实例。

      Mode Schedule只读模式使用简单 的循环方法遍历 MySQL 服务器列表。它将第一个连接发送到列表中的第一个地址,下一个连接发送到第二个地址,依此类推,并在列表用完后返回到第一个地址。

      笔记

      使用routing_strategy,可以使用 routing_strategy=round-robin而不是定义相同的 行为mode=read-only

      如果 MySQL 服务器不可用,则尝试下一个服务器。当列表中的 MySQL 服务器都不可用时,路由将中止。

      不可用的 MySQL 服务器被隔离。重新检查它们的可用性,并在可用时将它们放回可用 destinations列表中。目的地顺序保持不变。

      [routing:ro_route_mode]
      bind_port = 7002
      destinations = secondary1.example.com,secondary2.example.com,secondary3.example.com
      mode = read-only

      由于mode已弃用,因此应改用前面的示例routing_strategy

      [routing:ro_route]
      bind_port = 7002
      destinations = secondary1.example.com,secondary2.example.com,secondary3.example.com
      routing_strategy=round-robin

    或者,前面的 destinations示例可以使用元数据缓存来利用动态配置主机信息的 InnoDB 集群的元数据缓存。例如:

    [routing:ro_route]
    bind_port = 7002
    destinations=metadata-cache://myCluster/default?role=SECONDARY
    routing_strategy=round-robin
  • routing_strategy

    类型 细绳
    有效值

    first-available

    next-available

    round-robin

    round-robin-with-fallback

    路由策略定义了 MySQL Router 如何选择要连接的 MySQL 服务器。

    重要的

    MySQL Router 8.0.4 引入了 routing_strategy选项作为定义策略的更灵活的方式。以前,此行为是使用现已弃用的 mode选项定义的。

    两者不能同时设置routing_strategymode静态路由需要设置 1,而 InnoDB 集群是可选的。

    可用策略:

    笔记

    本节之后的角色文档描述了可用的role组合 routing_strategy和冲突。

    无法到达的目的地会被隔离和跳过,并且每隔 unreachable_destination_refresh_interval 几秒就会探测一次可用性。next-available除利用此行为外的所有路由策略 。此功能是在 v8.0.29 中添加的。

    • round-robin:对于负载平衡,每个新连接都以循环方式与下一个可用服务器建立连接。

    • round-robin-with-fallback:对于负载平衡,每个新连接都以循环方式与下一个可用的辅助服务器建立连接。如果辅助服务器不可用,则主列表中的服务器将以循环方式使用。

    • first-available:新连接被路由到目的地列表中的第一个可用服务器。如果失败,将使用下一个可用的服务器。这个循环一直持续到所有服务器都不可用。

    • next-available: 和 一样 first-available,因为新连接被路由到目的地列表中的第一个可用服务器。与 不同first-available,如果服务器被标记为无法访问,那么它将被丢弃并且永远不会再次用作目的地。

      此策略向后兼容 MySQL Router 2.x 的 mode读写行为 。它的局限性包括:

      • 选择的所有节点都被丢弃后,无法将服务器重新添加到列表中。

        与其他策略不同,不会每秒钟探测一次无法到达的目的地的可用性 unreachable_destination_refresh_interval

      • 重启 MySQL Router 后,所有关于哪些服务器被丢弃的知识都将丢失,所有服务器再次可用。

      • 元数据缓存不支持 next-available 路由策略,因为 next-available 仅适用于静态路由。

    role默认值和可用组合 :

    • PRIMARY:round-robin是默认行为(如果未设置 routing_strategy),而引导添加 routing_strategy=first-available到生成的 MySQL Router 配置文件中。可用的策略值是first-availableround-robin

      笔记

      在 v8.0.16 中 ,bootstrap 值从 round-robin更改为 first-available 。

    • SECONDARY:round-robin 是默认行为(如果未设置 routing_strategy),而引导添加 routing_strategy=round-robin-with-fallback 到生成的 MySQL Router 配置文件中。可用的策略值是first-availableround-robinround-robin-with-fallback

      笔记

      在 v8.0.16 中,bootstrap 值从 round-robin更改为 round-robin-with-fallback

    • PRIMARY_AND_SECONDARY: round-robin是默认行为(如果未设置 routing_strategy)。可用的策略值是first-availableround-robin

  • unreachable_destination_refresh_interval

    介绍 8.0.29
    类型 整数
    默认值 1
    最小值 1
    最大值 65535

    隔离机制跟踪无法到达的目的地,然后在它们重新联机时探测它们的可用性。此选项确定在将每个无法到达的候选目标添加回轮换之前对其可用性进行探测的频率(以秒为单位)。

    [DEFAULT]
    unreachable_destination_refresh_interval = 1

    next-available除利用此行为 外的所有路由策略 。

  • max_connections

    类型 整数
    默认值 512
    最小值 1
    最大值 65536

    每个路由可以限制路由或连接的数量。一种可能的用途是帮助防止可能的拒绝服务 (DOS) 攻击。默认值为 512,有效范围为 1 到 65536。

    这类似于MySQL 服务器的 max_connections服务器系统变量。

    [routing:mycluster_default_rw]
    max_connections = 512

    或者,使用更新的 max_total_connections配置选项为所有路由器部分组合设置一个值。

    MySQL Router 8.0.22 引入了将并发连接限制从大约 5,000 增加到 50,000 的功能。最大值取决于系统的轮询(或 linux_epoll)限制和可用 CPU 内核/线程的数量。另请参阅 [IO] backendthreads 配置选项。

    max_connections部分中的 可选设置[DEFAULT]为每个路由目标设置默认值。

  • max_total_connections

    介绍 8.0.27
    类型 整数
    默认值 512
    最小值 1
    最大值 9223372036854775807

    路由器处理的最大客户端连接数,以帮助防止文件描述符用完。

    这类似于MySQL 服务器的 max_connections服务器系统变量。

    [DEFAULT]
    max_total_connections = 512
    笔记

    legacymax_connections选项为每个路由实例设置一个值,例如一个值用于只读,另一个值用于只写。该 max_total_connections选项为组合的所有路由实例设置一个值。

    默认值为 512,它在该 [DEFAULT]部分下设置。这个选项是在 MySQL Router 8.0.27 中添加的。

  • thread_stack_size

    介绍 8.0.12
    类型 整数
    默认值 64
    最小值 1
    最大值 65535

    为每个线程分配的堆栈大小。它以千字节为单位,默认为 64。

    [DEFAULT]
    thread_stack_size=128
  • net_buffer_length

    介绍 8.0.22
    类型 整数

    设置net_buffer_length MySQL 服务器选项。

  • max_connect_errors

    类型 整数
    默认值 100
    最小值 1
    最大值 4294967295

    默认值为 100,有效范围为 1 到 2^32(4294967295,无符号整数)。

    这类似于 MySQL 服务器的 max_connect_errors服务器系统变量。

    如果应用程序执行频繁的重新连接,这可能会导致轻微的性能损失,因为 MySQL Router 会尝试发现是否存在与连接相关的错误。

    成功的连接会重置错误计数器(自 8.0.14 起)。

    每个路由都有自己的阻止主机列表。被阻止的客户端会收到 MySQL 服务器错误 1129 代码和稍微不同的错误消息:“1129:来自 fail.example.com 的连接错误太多”。路由器日志包含有关被阻止客户端的额外信息,例如: INFO [...] fail.example.com 的 1 个身份验证错误(最多 100) WARNING [...] 阻止客户端主机 fail.example.com

    max_connect_errors = 100
  • client_connect_timeout

    类型 整数
    默认值 9
    最小值 2
    最大值 31536000

    这类似于MySQL 服务器的 connect_timeout服务器系统变量。

    默认值为 9,比 MySQL 5.7 默认值小 1。有效范围介于 2 和 31536000 之间。

    client_connect_timeout = 9
  • auth_cache_refresh_interval

    介绍 8.0.20
    类型 数字
    默认值 2
    最小值 0.001
    最大值 3600

    授权缓存刷新尝试之间的时间(以秒为单位)。默认为 2。该值必须小于 auth_cache_ttl和大于ttl否则路由器将不会启动。

    如果 http_auth_backend部分的 backend 选项设置为metadata_cache ,则应用此选项;这是路由器 REST API 功能。

  • auth_cache_ttl

    介绍 8.0.20
    类型 数字
    默认值 -1
    最小值 0.001
    最大值 3600

    如果不刷新缓存变为无效的时间(以秒为单位)。默认为 -1(无限)。该值必须大于 auth_cache_refresh_intervalttl否则 Router 将无法启动。

    如果 http_auth_backend部分的 backend 选项设置为metadata_cache ,则应用此选项;这是路由器 REST API 功能。

  • router_id

    类型 整数

    MySQL 路由器 ID。

  • server_ssl_curves

    介绍 8.0.23
    类型 细绳

    默认为 SSL 曲线的安全列表。将此字符串格式化为以冒号分隔的曲线名称列表。

  • server_ssl_cipher

    介绍 8.0.23
    类型 细绳

    默认为 SSL 密码的安全列表。将此字符串格式化为冒号分隔的密码名称列表。

  • server_ssl_verify

    介绍 8.0.23
    类型 细绳
    默认值 DISABLED
    有效值

    DISABLED

    VERIFY_CA

    VERIFY_IDENTITY

    SSL 验证默认设置为禁用。

  • server_ssl_mode

    介绍 8.0.23
    类型 细绳
    默认值 AS_CLIENT
    有效值

    AS_CLIENT

    DISABLED

    PREFERRED

    REQUIRED

    SSL 模式默认设置为 AS_CLIENT。另见 第 4.4 节,“TLS 配置”

  • client_ssl_dh_params

    介绍 8.0.23
    类型 细绳

    如果指定且不为空,则使用此文件中的 DH 参数而不是内部默认 DH 参数。将 DH 参数文件格式化为 PEM 格式。

  • client_ssl_curves

    介绍 8.0.23
    类型 细绳

    客户端和 MySQL Router 之间允许哪些曲线,默认为 SSL 曲线的安全列表。将此字符串格式化为以冒号分隔的曲线名称列表。

  • client_ssl_cipher

    介绍 8.0.23
    类型 细绳

    客户端和 MySQL Router 之间允许使用哪些密码,默认为 SSL 密码的安全列表。将此字符串格式化为冒号分隔的密码名称列表。

  • client_ssl_mode

    介绍 8.0.23
    类型 细绳
    默认值 PREFERRED
    有效值

    PREFERRED

    DISABLED

    PASSTHROUGH

    REQUIRED

    控制从 client 到 MySQL Router 的连接是否必须加密。另见 第 4.4 节,“TLS 配置”

  • ssl_mode

    类型 细绳
    默认值 PREFERRED
    有效值

    PREFERRED

    DISABLED

    REQUIRED

    VERIFY_CA

    VERIFY_IDENTITY

    用于连接到 MySQL 元数据服务器的 SSL 模式。PREFERRED如果未设置 ,则默认为。

    当设置为 PREFERRED(默认值)时,引导程序将在未使用 SSL 且与元数据服务器的连接未加密时发出警告。

    可用值为 DISABLED、PREFERRED、REQUIRED、VERIFY_CA 和 VERIFY_IDENTITY。对于mysql 客户端,此值不区分大小写。

    还有一个用于引导的运行时选项;看 --ssl-mode

  • bootstrap_server_addresses

    弃用 8.0.14
    类型 细绳

    指向具有可以连接到的元数据的 MySQL 服务器列表。访问元数据后,元数据缓存切换到主 ReplicaSet 中存在的服务器来获取元数据。它们也称为引导服务器。

    此选项在 MySQL Router 8.0.14 中已弃用,并且不再由引导程序生成。相反,该 dynamic_state选项是作为替代品添加的。

  • user (MySQL)

    类型 细绳

    生成的 MySQL 用户具有访问 MySQL 服务器元数据模式的权限。该用户的密码是自动生成的并存储在加密的 密钥环中。默认情况下,此密钥环的加密密钥存储在 配置文件中定义的读保护主密钥存储文件中。最常见的是,此用户和关联的密码是在引导过程中自动生成的。相关的命令行选项是 --force-password-validation--password-retries。默认情况下,生成的密码通过 STRONG validate_password 强度。

    密码完全由 Router 管理,从不公开,并使用运行 MySQL Router 的操作系统帐户存储在本地密钥环系统中。然后 Router 可以使用它连接到 InnoDB Cluster 并检索当前的拓扑信息。默认情况下,路由器和元数据服务器之间的会话使用 SSL 加密。

    生成的密钥环文件的存储位置取决于引导程序的配置方式。对于自包含安装(使用时 --directory),它存储run/在自包含目录下。对于系统范围的安装,它存储在系统范围的运行时状态目录中,并且该路径是特定于平台的。有关其他信息,请参阅 master_key_pathkeyring_path

    此用户被分配(并需要)以下权限:

    Privileges needed by the Router account:
    
    	On Metadata Server:
    
    		SELECT ON mysql_innodb_cluster_metadata.*
    
    	On Target Replica Sets:
    
    		SELECT ON performance_schema.replication_group_members
    		SELECT ON performance_schema.replication_group_member_stats

    生成的用户名遵循以下模式: mysql_router_[0-9]{1,6} _ [0-9a-z]{12},其中[0-9]{1,6}是数字路由器 ID,[0-9a-z]{12}是 12 个随机小写字母数字字符。router id 如果已经存在则重复使用,mysqlrouter.conf并且其长度不能超过 6 位。

    笔记

    该用户不同于 user 本节定义[DEFAULT] 的系统用户。

  • metadata_cluster

    类型 细绳

    InnoDB 集群的名称。

    笔记

    列出 MySQL InnoDB 集群名称的 SQL 查询: SELECT * FROM mysql_innodb_cluster_metadata.clusters;

  • use_gr_notifications

    介绍 8.0.17
    类型 整数
    默认值 0
    有效值

    0

    1

    启用组复制通知。启用后,路由器会异步收到有关大多数集群更改的通知。它可以在引导程序mysqlrouter.conf中使用 --conf-use-gr-notifications 命令行选项手动启用或在那里启用。

    当 Router 从 Group Replication 收到以下任何通知时,它会刷新集群元数据:

    • group_replication/membership/quorum_loss

    • group_replication/成员资格/视图

    • group_replication/status/role_change

    • group_replication/status/state_change

    笔记

    组复制通知功能需要从路由器到每个实例的 X 协议连接,该实例必须运行 X 插件。如果 X 协议连接不可用,则元数据刷新会每隔一段时间执行一次, ttl就像未启用通知功能一样。

    尽管 Group Replication 通知依赖于 X 协议连接,但收到的通知会触发使用经典 MySQL 协议连接到实例的元数据刷新。

    启用后,Group Replication 通知功能允许更高的ttl值,因为按时间间隔执行的元数据刷新 ttl成为一种额外的保护措施,而不是使有关集群状态的信息保持最新的主要方式。禁用时,建议使用较低的ttl值(例如 0.5s,默认值)以避免重新连接到实例并经常查询它们的元数据更改的开销。

  • ttl

    类型(≥ 8.0.12) 数字
    类型 (8.0.11) 整数
    默认值(≥ 8.0.12) 0.5
    默认值 (8.0.11) 5
    最小值 0
    最大值 (≥ 8.0.12) 3600
    最大值 (8.0.11) 4294967295

    元数据缓存中信息的生存时间(以秒为单位)。

    接受整数或浮点值。粒度限制为毫秒,其中 0.001 等于一毫秒。精度被截断到支持的范围;例如TTL=0.0119被视为 11 毫秒。值为0表示元数据缓存模块在紧密循环中连续查询元数据。

    该值必须小于 auth_cache_refresh_intervalauth_cache_ttl否则 Router 将不会启动。

    唯一支持的小数点分隔符是“.” (一个句点)无论语言环境如何,都支持科学记数法,例如 TTL=1.6E-2

    MySQL Router 8.0.12 中添加了浮点支持。

  • destination

    介绍 8.0.21
    类型 细绳
    默认值 (Windows) CON
    默认值(其他) /dev/stderr
    有效值 (Windows)

    CON

    NUL

    有效值(其他)

    /dev/null

    /dev/stderr

    /dev/stdout

    将控制台日志输出定向到此设备目标;在 [consolelog] 部分下设置。默认为 /dev/stderr,空值使用默认值。

    可用值有:/dev/stdout/dev/stderr/dev/null;或者CONNUL在 Windows 上。

    [DEFAULT]
    logging_folder=
    
    [consolelog]
    destination=/dev/null
  • filename

    介绍 8.0.21
    类型 细绳

    filename将日志输出重定向到 目录中 名为的特定文件 logging_folder。它必须定义为文件名而不是文件路径,并且与 [logger] 和 [filelog] 部分一起使用。

    与 [logger] 一起使用filename来定义 [filelog] 部分的默认值,它还将路由器的日志文件从更改mysqlrouter.log为这个新值。

    [DEFAULT]
    logging_folder=/path/to/logs/
    
    [logger]
    filename = router_error.log

    如果在 [logger] 下设置了文件名但没有使用基于文件的记录器,路由器不会报告错误。

    filename与 [文件日志] 一起 使用:

    [DEFAULT]
    logging_folder=/path/to/logs/
    
    [filelog:a]
    filename = a_router_error.log
    
    [filelog:b]
    filename = b_router_error.log

    如果 filename 为空或未在 [filelog] 下设置,则使用 [logger] 下的文件名定义;mysqlrouter.log如果未在 [logger] 下设置文件名, 则使用默认日志文件 ( )。

    相关的,将控制台输出定向到 /dev/null

    [DEFAULT]
    logging_folder=
    
    [consolelog]
    destination=/dev/null
  • level

    类型 细绳
    默认值 INFO
    有效值 (≥ 8.0.20)

    DEBUG

    NOTE

    INFO

    WARNING

    ERROR

    SYSTEM

    FATAL

    有效值(≤ 8.0.19)

    DEBUG

    INFO

    WARNING

    ERROR

    FATAL

    使用记录器插件记录通知、错误和调试信息。可用的日志级别为 DEBUGNOTEINFO(默认)、 WARNINGERRORSYSTEMFATAL。这些值不区分大小写。

    INFO级别 显示所有信息性消息、警告和错误消息。DEBUG级别显示来自路由器代码的附加诊断信息,包括成功的路由 。 SYSTEM包括诸如启动消息之类的消息。

    [logger]
    level = DEBUG

    输出行为取决于 logging_folder选项。设置logging_folder为文件夹会保存一个以该文件夹命名的日志文件 mysqlrouter.log。设置 logging_folder为空值,或不设置,都会将日志输出到控制台。它在[DEFAULT]部分中设置。

    笔记

    MySQL Router 8.0.20 中添加了“SYSTEM”和“NOTE”错误级别。

    --config引导程序接受使用记录器级别定义 的配置文件 。

  • timestamp_precision

    介绍 8.0.18
    类型 细绳

    记录器时间戳精度;具有示例值的可用定义是:

    • second, sec, or s: 2019-05-10 12:10:25

    • millisecond, msec, or ms: 2019-05-10 12:10:25.428

    • microsecond, usec, or us: 2019-05-10 12:10:25.428754

    • nanosecond, nsec, ns: 2019-05-10 12:10:25.428754000

  • port

    介绍 8.0.16
    类型 整数
    默认值 8081

    监听 HTTP 请求的 TCP 端口;它默认为 8881。

  • bind_address

    介绍 8.0.16
    类型 细绳
    默认值 0.0.0.0

    绑定到 HTTP 的 IP 地址port;它默认为 0.0.0.0。

  • static_folder

    介绍 8.0.16
    类型 细绳

    静态文件请求的基本目录;默认情况下它是空的。空值表示不提供静态文件。

  • require_realm

    介绍 8.0.16
    类型 细绳

    [http_auth_realm] 实例的名称。

  • ssl

    介绍 8.0.16
    类型 整数
    默认值 1
    有效值

    1

    0

    值 1 启用 SSL,0 禁用它。需要支持 TLSv1.2 或更高版本的 TLS 客户端。这是在 [http_server] 部分下定义的。

  • ssl_cert

    介绍 8.0.16
    类型 细绳

    PEM 格式的证书及其链证书的文件名;如果 ssl=1,则需要。这是在 [http_server] 部分下定义的。

  • ssl_key

    介绍 8.0.16
    类型 细绳

    PEM 格式的密钥文件名;如果 ssl=1,则需要。这是在 [http_server] 部分下定义的。

  • ssl_cipher

    介绍 8.0.16
    类型 细绳

    密码规范(参见 openssl 的“密码”列表)。默认为所有已批准密码的逗号分隔列表。未知的密码被默默地忽略。如果密码列表为空且 ssl=1,则失败。这是在 [http_server] 部分下定义的。

  • ssl_dh_param

    介绍 8.0.16
    类型 细绳

    以 PEM 格式从该文件中读取 DH 参数。如果 ssl=1,则默认使用 RFC 5114 中的 dh-param。这是在 [http_server] 部分下定义的。

  • backend

    介绍 8.0.22
    类型 细绳
    默认值 (Windows) poll
    默认值(其他) linux_epoll
    有效值 (Windows) poll
    有效值(其他)

    linux_epoll

    poll

    处理异步操作的 IO 后端。通用轮询后端在所有平台上都可用,而每个平台都可以提供替代后端。

    选项是 poll(所有平台)和 linux_epoll (Linux)。在 Linux 上默认为 linux_epoll。

    笔记

    在 MySQL Router 8.0.22 中添加了支持。

    [io]
    backend=linux_epoll
    threads=32

    路由器有三个“后端”选项,每个选项在不同的 [section] 中具有不同的含义。有“ [io] backend”(用于异步操作)、“ [http_auth_realm] backend”(为与特定领域关联的后端定义自定义名称)和“ [http_auth_backend] backend”(身份验证后端的类型)。为了帮助避免混淆,下面是一个演示所有这三者的示例:

  • threads

    介绍 8.0.22
    类型 数字
    默认值 0
    最小值 0
    最大值 1024

    处理连接的 IO 线程数。

    默认为 0(使用所有可用的 CPU 核心/线程),但也接受 1 到 1024 之间的数字。在运行时,系统可能会限制上限超过此值。

    笔记

    在 MySQL Router 8.0.22 中添加了支持。

    [io]
    backend=linux_epoll
    threads=32
  • idle_timeout

    介绍 8.0.29
    类型 数字
    默认值 5
    最小值 1
    最大值 4294967296

    在关闭连接池之前将空闲连接保留在连接池中的秒数。这在 [connection_pool] 部分中设置,并影响连接池中的所有路由。默认为 5,接受 1 到 4294967296 之间的值。

    这个选项是在 MySQL Router 8.0.29 中添加的。

  • max_idle_server_connections

    介绍 8.0.29
    类型 数字
    默认值 0
    最小值 0
    最大值 4294967296

    客户端断开后连接池中保持打开的连接;并在 [connection_pool] 部分中设置。默认为 0,接受 0 到 4294967296 之间的值。

    这个选项是在 MySQL Router 8.0.29 中添加的。

  • backend

    介绍 8.0.16
    类型 细绳

    [http_auth_backend] 部分的名称。

    路由器有三个“后端”选项,每个选项在不同的 [section] 中具有不同的含义。有“ [io] backend”(用于异步操作)、“ [http_auth_realm] backend”(为与特定领域关联的后端定义自定义名称)和“ [http_auth_backend] backend”(身份验证后端的类型)。

  • method

    介绍 8.0.16
    类型 细绳
    默认值 basic

    HTTP认证方式;默认为基本。

  • name

    介绍 8.0.16
    类型 细绳

    呈现给身份验证用户的领域名称。

  • require

    介绍 8.0.16
    类型 细绳
    默认值 valid-user

    要求用户通过身份验证后端进行验证;默认为有效用户,启用此检查。

  • backend

    介绍 8.0.16
    类型 细绳
    默认值 file

    后端实现的名称;可接受的值为“文件”(默认)或“元数据缓存”。

    笔记

    MySQL Router 8.0.20 中添加了 metadata_cache 支持。

    [http_auth_backend:name]
    backend=metadata_cache
    
    [metadata_cache]
    auth_cache_refresh_interval=2
    auth_cache_ttl=-1

    路由器有三个“后端”选项,每个选项在不同的 [section] 中具有不同的含义。有“ [io] backend”(用于异步操作)、“ [http_auth_realm] backend”(为与特定领域关联的后端定义自定义名称)和“ [http_auth_backend] backend”(身份验证后端的类型)。

  • filename

    介绍 8.0.16
    类型 细绳

    后端存储文件名,相对于 data_folder目录。

  • cluster_type

    介绍 8.0.19
    类型 细绳
    有效值

    gr

    rs

    引导路由器的 AdminAPI 对象的类型,它是 InnoDB ReplicaSet (rs) 或 InnoDB Cluster (gr)。将“gr”用于群集集。

    引导评估目标实例并在生成的配置文件中相应地设置此选项。

    MySQL Router 8.0.19 新增此选项;添加了相同版本的 InnoDB ReplicaSet 支持。