Ansible mysql_variables 模块有办法设置变量持久化吗?

问题描述 投票:0回答:1

我有一个 Ansible 剧本来完成这个任务..

---
- name: Set mysql_variable
  mysql_variables:
    variable: mysql_variable
    value: 2000
- name: Reload MySQL
  service:
    name: mysql
    state: restarted
    enabled: yes

第一个任务将变量设置为所需状态,我可以验证..但它不是持久的。当第二个任务重新加载 mysql 服务时,变量被设置为默认值。

如何在目标节点上使用 Ansible 设置此变量持久化?

mysql variables ansible mysql-variables
1个回答
0
投票

community.mysql.mysql_variables模块通过

mode: persist
支持此功能,假设您有MySQL 8.0+并且正在设置动态变量:

- name: Configure a MySQL dynamic setting
  community.mysql.mysql_variables:
    variable: "binlog_expire_logs_seconds"
    value: "{{ '1w' | community.general.to_seconds | int }}"
    mode: persist
  become: true

等效的

SET PERSIST
声明:

$ sudo mysql --execute "SET persist binlog_expire_logs_seconds = 604800;"

显示保留到

mysqld-auto.cnf
参考)的任何变量:

$ sudo mysql --execute "SELECT * FROM performance_schema.persisted_variables;"
+---------------------------------+----------------+
| VARIABLE_NAME                   | VARIABLE_VALUE |
+---------------------------------+----------------+
| binlog_expire_logs_seconds      | 604800         |
| max_allowed_packet              | 268435456      |
+---------------------------------+----------------+

注意事项

  • MySQL 5.7 不支持此语句(并且已 EOL)。

  • 某些变量仍需要使用

    my.cnf
    模块在适当的
    mysqld.cnf
    lineinfile
    中进行更新。

    查找类似以下的错误:

    Variable 'innodb_log_file_size' is a read only variable

    Variable 'bind_address' is a read only variable

© www.soinside.com 2019 - 2024. All rights reserved.