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) 证书的路径。如果使用此选项,则必须指定与服务器使用的证书相同的证书。 |
|
当需要 SSL 连接时,是否验证服务器主机名。对应于 MySQL CLI 的 将此设置为 需要 pymysql >= 0.7.11。 选择
|
|
客户端公钥证书的路径。 |
|
客户端私钥的路径。 |
|
指定从中读取用户和密码的配置文件。 如果默认配置文件 如果默认配置文件 要防止读取默认配置文件,请将 config_file 设置为空字符串。 默认值: |
|
连接到 MySQL 服务器时的连接超时。 默认值: |
|
不需要收集的字段列表。 支持的元素: |
|
通过逗号分隔的字符串或 YAML 列表限制收集的信息。 允许的值为 默认情况下,收集所有子集。 您可以在值之前使用“!”(例如, 如果您将包含和排除的值传递给过滤器,例如,filter=!settings,version,则排除的值,在本例中为 |
|
要连接的数据库名称。 如果 login_user 仅允许连接到特定数据库,则此参数有意义。 |
|
运行数据库的主机。 在某些情况下,对于本地连接,需要使用 login_unix_socket=/path/to/mysqld/socket,通常为 默认值: |
|
用于身份验证的密码。 |
|
MySQL 服务器的端口。如果使用了 login_port,则必须将 *login_host* 定义为 localhost 以外的值。 默认值: |
|
用于本地连接的 Unix 域套接字的路径。 使用此参数可以避免 |
|
用于身份验证的用户名。 |
|
在返回的字典中包含空数据库的名称。 选择
|
属性
属性 |
支持 |
描述 |
---|---|---|
支持: 完整 |
可以在 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_password
和login_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'
返回值
常见的返回值已记录在此处,以下是此模块特有的字段
键 |
描述 |
---|---|
模块使用的 python 连接器的名称。当未识别连接器时,返回 返回: 总是 示例: |
|
模块使用的 python 连接器的版本。当未识别连接器时,返回 返回: 总是 示例: |
|
关于数据库的信息。 返回: 如果未被过滤器排除 示例: |
|
数据库大小,以字节为单位。 返回: 如果未被过滤器排除 示例: |
|
该数据库中表和视图的计数。 返回: 如果未被过滤器排除 示例: |
|
有关服务器存储引擎的信息。 返回: 如果未被过滤器排除 示例: |
|
全局状态信息。 返回: 如果未被过滤器排除 示例: |
|
主服务器状态信息。 返回: 如果是主服务器 示例: |
|
数据库服务器引擎。 返回: 如果未被过滤器排除 示例: |
|
全局设置(变量)信息。 返回: 如果未被过滤器排除 示例: |
|
从服务器状态信息。 返回: 如果是主服务器 示例: |
|
从服务器状态信息。 返回: 如果是备用服务器 示例: |
|
返回按主机分组并仅具有全局权限的用户字典。 返回: 如果未被过滤器排除 示例: |
|
有关用户帐户的信息。 输出可以用作 community.mysql.mysql_user 插件的输入。 在将帐户迁移到另一台服务器或创建清单时很有用。 不支持代理权限。如果一个帐户具有代理权限,它们将不会出现在输出中。 会导致身份验证插件 返回: 如果未被过滤器排除 示例: |
|
数据库服务器版本。 返回: 如果未被过滤器排除 示例: |
|
完整的服务器版本。 返回: 如果未被过滤器排除 示例: |
|
主要服务器版本。 返回: 如果未被过滤器排除 示例: |
|
次要服务器版本。 返回: 如果未被过滤器排除 示例: |
|
发布服务器版本。 返回: 如果未被过滤器排除 示例: |
|
服务器后缀,例如 MySQL、MariaDB、其他或无。 返回: 如果未被过滤器排除 示例: |