community.mysql.mysql_info 模块 – 收集关于 MySQL 或 MariaDB 服务器的信息

注意

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

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

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

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

概要

  • 收集有关 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

exclude_fields

列表 / 元素=字符串

在 community.mysql 0.1.0 中添加

不需要收集的字段列表。

支持的元素:db_size, db_table_count。不支持的元素将被忽略。

filter

列表 / 元素=字符串

通过逗号分隔的字符串或 YAML 列表限制收集的信息。

允许的值为 versiondatabasessettingsglobal_statususersusers_infoenginesmaster_statusslave_statusslave_hosts

默认情况下,收集所有子集。

您可以在值之前使用“!”(例如,!settings)将其从信息中排除。

如果您将包含和排除的值传递给过滤器,例如,filter=!settings,version,则排除的值,在本例中为 !settings,将被忽略。

login_db

字符串

要连接的数据库名称。

如果 login_user 仅允许连接到特定数据库,则此参数有意义。

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

字符串

用于身份验证的用户名。

return_empty_dbs

布尔值

在返回的字典中包含空数据库的名称。

选择

  • false ← (默认)

  • true

属性

属性

支持

描述

check_mode

支持: 完整

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

说明

注意

  • 与 MariaDB 或 MySQL 兼容。

  • 计算数据库的大小可能会很慢,具体取决于其中的表数量和大小。要避免这种情况,请使用 *exclude_fields=db_size*。

  • 需要在远程主机上安装 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_variables

管理 MySQL 或 MariaDB 全局变量。

community.mysql.mysql_db

从远程主机添加或删除 MySQL 或 MariaDB 数据库。

community.mysql.mysql_user

从 MySQL 或 MariaDB 数据库中添加或删除用户。

community.mysql.mysql_replication

管理 MySQL 或 MariaDB 复制。

示例

# Display info from mysql-hosts group (using creds from ~/.my.cnf to connect):
# ansible mysql-hosts -m mysql_info

# Display only databases and users info:
# ansible mysql-hosts -m mysql_info -a 'filter=databases,users'

# Display all users privileges:
# ansible mysql-hosts -m mysql_info -a 'filter=users_info'

# Display only slave status:
# ansible standby -m mysql_info -a 'filter=slave_status'

# Display all info from databases group except settings:
# ansible databases -m mysql_info -a 'filter=!settings'

# If you encounter the "Please explicitly state intended protocol" error,
# use the login_unix_socket argument
- name: Collect all possible information using passwordless root access
  community.mysql.mysql_info:
    login_user: root
    login_unix_socket: /run/mysqld/mysqld.sock

- name: Get MySQL version with non-default credentials
  community.mysql.mysql_info:
    login_user: mysuperuser
    login_password: mysuperpass
    filter: version

- name: Collect all info except settings and users by root
  community.mysql.mysql_info:
    login_user: root
    login_password: rootpass
    filter: "!settings,!users"

- name: Collect info about databases and version using ~/.my.cnf as a credential file
  become: true
  community.mysql.mysql_info:
    filter:
    - databases
    - version

- name: Collect info about databases and version using ~alice/.my.cnf as a credential file
  become: true
  community.mysql.mysql_info:
    config_file: /home/alice/.my.cnf
    filter:
    - databases
    - version

- name: Collect info about databases including empty and excluding their sizes
  become: true
  community.mysql.mysql_info:
    config_file: /home/alice/.my.cnf
    filter:
    - databases
    exclude_fields: db_size
    return_empty_dbs: true

- name: Clone users from one server to another
  block:
  # Step 1
  - name: Fetch information from a source server
    delegate_to: server_source
    community.mysql.mysql_info:
      filter:
        - users_info
    register: result

  # Step 2
  # Don't work with sha256_password and cache_sha2_password
  - name: Clone users fetched in a previous task to a target server
    community.mysql.mysql_user:
      name: "{{ item.name }}"
      host: "{{ item.host }}"
      plugin: "{{ item.plugin | default(omit) }}"
      plugin_auth_string: "{{ item.plugin_auth_string | default(omit) }}"
      plugin_hash_string: "{{ item.plugin_hash_string | default(omit) }}"
      tls_requires: "{{ item.tls_requires | default(omit) }}"
      priv: "{{ item.priv | default(omit) }}"
      resource_limits: "{{ item.resource_limits | default(omit) }}"
      column_case_sensitive: true
      state: present
    loop: "{{ result.users_info }}"
    loop_control:
      label: "{{ item.name }}@{{ item.host }}"
    when:
      - item.name != 'root'  # In case you don't want to import admin accounts
      - item.name != 'mariadb.sys'
      - item.name != 'mysql'

返回值

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

描述

connector_name

字符串

在 community.mysql 3.6.0 中添加

模块使用的 python 连接器的名称。当未识别连接器时,返回 Unknown

返回: 总是

示例: "['pymysql']"

connector_version

字符串

在 community.mysql 3.6.0 中添加

模块使用的 python 连接器的版本。当未识别连接器时,返回 Unknown

返回: 总是

示例: "['1.0.2']"

databases

字典

关于数据库的信息。

返回: 如果未被过滤器排除

示例: [{"information_schema": {"size": 73728, "tables": 79}, "mysql": {"size": 656594, "tables": 31}}]

size

字典

数据库大小,以字节为单位。

返回: 如果未被过滤器排除

示例: {"size": 656594}

tables

字典

在 community.mysql 3.11.0 中添加

该数据库中表和视图的计数。

返回: 如果未被过滤器排除

示例: {"tables": 12}

engines

字典

有关服务器存储引擎的信息。

返回: 如果未被过滤器排除

示例: [{"CSV": {"Comment": "CSV 存储引擎", "Savepoints": "NO", "Support": "YES", "Transactions": "NO", "XA": "NO"}}]

global_status

字典

全局状态信息。

返回: 如果未被过滤器排除

示例: [{"Innodb_buffer_pool_read_requests": 123, "Innodb_buffer_pool_reads": 32}]

master_status

字典

主服务器状态信息。

返回: 如果是主服务器

示例: [{"Binlog_Do_DB": "", "Binlog_Ignore_DB": "mysql", "File": "mysql-bin.000001", "Position": 769}]

server_engine

字符串

在 community.mysql 3.10.0 中添加

数据库服务器引擎。

返回: 如果未被过滤器排除

示例: "MariaDB"

settings

字典

全局设置(变量)信息。

返回: 如果未被过滤器排除

示例: [{"innodb_open_files": 300, "innodb_page_size\"": 16384}]

slave_hosts

字典

从服务器状态信息。

返回: 如果是主服务器

示例: [{"2": {"Host": "", "Master_id": 1, "Port": 3306}}]

slave_status

字典

从服务器状态信息。

返回: 如果是备用服务器

示例: [{"192.168.1.101": {"3306": {"replication_user": {"Connect_Retry": 60, "Exec_Master_Log_Pos": 769, "Last_Errno": 0}}}}]

users

字典

返回按主机分组并仅具有全局权限的用户字典。

返回: 如果未被过滤器排除

示例: [{"localhost": {"root": {"Alter_priv": "Y", "Alter_routine_priv": "Y"}}}]

users_info

字典

在 community.mysql 3.8.0 中添加

有关用户帐户的信息。

输出可以用作 community.mysql.mysql_user 插件的输入。

在将帐户迁移到另一台服务器或创建清单时很有用。

不支持代理权限。如果一个帐户具有代理权限,它们将不会出现在输出中。

会导致身份验证插件 sha256_passwordcaching_sha2_password 出现问题。如果输出被馈送到 community.mysql.mysql_user,则 ``plugin_auth_string`` 很可能由于非二进制字符而不可读。

返回: 如果未被过滤器排除

示例: [{"host": "host.com", "name": "user1", "plugin": "mysql_native_password", "plugin_auth_string": "*1234567", "priv": "db1.*:SELECT/db2.*:SELECT", "resource_limits": {"MAX_USER_CONNECTIONS": 100}, "tls_requires": {"SSL": null}}]

version

字典

数据库服务器版本。

返回: 如果未被过滤器排除

示例: {"version": {"full": "5.5.60-MariaDB", "major": 5, "minor": 5, "release": 60, "suffix": "MariaDB"}}

full

字符串

完整的服务器版本。

返回: 如果未被过滤器排除

示例: "5.5.60-MariaDB"

major

整数

主要服务器版本。

返回: 如果未被过滤器排除

示例: 5

minor

整数

次要服务器版本。

返回: 如果未被过滤器排除

示例: 5

release

整数

发布服务器版本。

返回: 如果未被过滤器排除

示例: 60

suffix

字符串

服务器后缀,例如 MySQL、MariaDB、其他或无。

返回: 如果未被过滤器排除

示例: "MariaDB"

作者

  • Andrew Klychkov (@Andersson007)

  • Sebastian Gumprich (@rndmh3ro)

  • Laurent Indermühle (@laurent-indermuehle)