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

注意

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

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

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

要在剧本中使用它,请指定: 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

路径

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

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

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

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

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

connect_timeout

整数

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

默认值: 30

exclude_fields

列表 / 元素=字符串

在 community.mysql 0.1.0 中添加

不需要收集的字段列表。

支持元素:db_sizedb_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 storage engine", "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)