community.mysql.mysql_variables 模块 – 管理 MySQL 或 MariaDB 全局变量

注意

此模块是 community.mysql 集合 (版本 3.11.0) 的一部分。

如果您正在使用 ansible 包,则可能已经安装了此集合。它不包含在 ansible-core 中。要检查是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install community.mysql。您需要其他要求才能使用此模块,请参阅 要求 获取详细信息。

要在 playbook 中使用它,请指定:community.mysql.mysql_variables

概要

  • 查询/设置 MySQL 或 MariaDB 变量。

要求

执行此模块的主机需要以下要求。

  • PyMySQL (Python 2.7 和 Python 3.x)

参数

参数

注释

ca_cert

别名:ssl_ca

路径

证书颁发机构 (CA) 证书的路径。如果使用此选项,则必须指定与服务器使用的证书相同的证书。

check_hostname

布尔值

在 community.mysql 1.1.0 中添加

当需要 SSL 连接时是否验证服务器主机名。对应于 MySQL CLI 的 --ssl 开关。

将其设置为 false 将禁用主机名验证。谨慎使用。

需要 pymysql >= 0.7.11。

选项

  • false

  • true

client_cert

别名:ssl_cert

路径

客户端公钥证书的路径。

client_key

别名:ssl_key

路径

客户端私钥的路径。

config_file

路径

指定从中读取用户和密码的配置文件。

如果存在默认配置文件 ~/.my.cnf,即使未指定 config_file,也会读取它。

如果存在默认配置文件 ~/.my.cnf,则必须包含 [client] 部分,这是 MySQL 连接器的要求。

要阻止读取默认配置文件,请将 config_file 设置为空字符串。

默认值: "~/.my.cnf"

connect_timeout

整数

连接到 MySQL 服务器时的连接超时。

默认值: 30

login_host

字符串

运行数据库的主机。

在某些情况下,对于本地连接,需要使用 login_unix_socket=/path/to/mysqld/socket(通常为 /var/run/mysqld/mysqld.sock),而不是 login_host=localhost

默认值: "localhost"

login_password

字符串

用于身份验证的密码。

login_port

整数

MySQL 服务器的端口。如果使用 login_port,则需要将 login_host 定义为 localhost 以外的值。

默认值: 3306

login_unix_socket

字符串

本地连接的 Unix 域套接字的路径。

使用此参数避免 Please explicitly state intended protocol 错误。

login_user

字符串

用于身份验证的用户名。

mode

字符串

在 community.mysql 0.1.0 中添加

globalvalue 分配给全局系统变量,该变量将在运行时更改,但在服务器重启后不会持久保存。

persistvalue 分配给全局系统变量,并将其持久保存到数据目录中的 mysqld-auto.cnf 选项文件(该变量将在服务重启后保留)。

persist_onlyvalue 持久保存到数据目录中的 mysqld-auto.cnf 选项文件,但不设置全局变量的运行时值(该值将在下次服务重启后更改)。

受 MySQL 8.0 或更高版本支持。

更多信息请参见 https://dev.mysqlserver.cn/doc/refman/8.0/en/set-variable.html

选项

  • "global" ← (默认)

  • "persist"

  • "persist_only"

value

字符串

如果设置,则将变量值设置为该值。

对于布尔值,使用 0|1 或带引号的 "ON"|"OFF"

variable

字符串 / 必需

要操作的变量名。

属性

属性

支持

描述

check_mode

支持:不支持

可以在 check_mode 下运行并返回更改状态预测,而无需修改目标。

备注

注意

  • 兼容 MariaDB 或 MySQL。

  • 需要在远程主机上安装 PyMySQL(Python 2.7 和 Python 3.X)包。可以使用 `apt-get install python-pymysql` (Ubuntu;参见 ansible.builtin.apt) 或 `yum install python2-PyMySQL` (RHEL/CentOS/Fedora;参见 ansible.builtin.yum) 安装 Python 包。对于较新的 Fedora 版本,也可以使用 `dnf install python2-PyMySQL`;参见 ansible.builtin.dnf

  • 确保在 Ansible 检测到的目标机器的 Python 解释器上安装了 PyMySQL 库。例如,如果 Ansible 检测并使用 Python 3,则需要安装 Python 3 版本的 PyMySQL。如果 Ansible 检测并使用 Python 2,则需要安装 Python 2 版本的 PyMySQL。

  • 如果遇到问题,可以通过指定 ansible_python_interpreter 来强制 Ansible 使用所需的 Python 解释器,这可能会有所帮助。更多信息,请参见 https://docs.ansible.org.cn/ansible/latest/reference_appendices/interpreter_discovery.html

  • 当您传递凭据时,login_passwordlogin_user 都是必需的。如果没有,模块将尝试从 ~/.my.cnf 读取凭据,最后回退到使用 MySQL 默认登录名“root”且不使用密码。

  • 如果本地连接出现问题,使用 `login_unix_socket=/path/to/mysqld/socket` 代替 `login_host=localhost` 可能会有所帮助。例如,10.4 及更高版本的 MariaDB 默认安装使用 unix_socket 身份验证插件,如果不使用 `login_unix_socket=/var/run/mysqld/mysqld.sock`(默认路径),则会导致错误“Host ‘127.0.0.1’ is not allowed to connect to this MariaDB server”。

  • 如果不需要从配置文件(例如 /root/.my.cnf)读取凭据来连接到数据库服务器,但是该文件存在并且不包含 [client] 部分(在任何其他有效指令之前),它将被读取,这将导致连接失败。为了防止这种情况,请将其设置为一个空字符串(例如 config_file: '')。

  • 为了避免 Please explicitly state intended protocol 错误,请使用 `login_unix_socket` 参数,例如 login_unix_socket: /run/mysqld/mysqld.sock

  • 或者,为了避免在每次调用时都使用 `login_unix_socket` 参数,您可以在目标主机上的 MySQL 配置文件(通常为 ~/.my.cnf)中使用 `socket` 选项指定套接字路径,例如 socket=/var/lib/mysql/mysql.sock

另请参见

另请参见

community.mysql.mysql_info

收集关于 MySQL 或 MariaDB 服务器的信息。

MySQL SET 命令参考

MySQL SET 命令文档的完整参考。

示例

# If you encounter the "Please explicitly state intended protocol" error,
# use the login_unix_socket argument
- name: Check for sync_binlog setting
  community.mysql.mysql_variables:
    variable: sync_binlog
    login_unix_socket: /run/mysqld/mysqld.sock

- name: Set read_only variable to 1 persistently
  community.mysql.mysql_variables:
    variable: read_only
    value: 1
    mode: persist

- name: Set a boolean using ON/OFF notation
  mysql_variables:
    variable: log_slow_replica_statements
    value: "ON"  # Make sure it's quoted

返回值

常见的返回值已在 此处 文档化,以下是此模块特有的字段

描述

queries

列表 / 元素=字符串

在 community.mysql 0.1.0 中添加

已执行的修改数据库状态的查询列表。

返回:如果已执行

示例: ["SET GLOBAL `read_only` = 1"]

作者

  • Balazs Pocze (@banyek)