我有一个 Ansible 剧本来完成这个任务..
---
- name: Set mysql_variable
mysql_variables:
variable: mysql_variable
value: 2000
- name: Reload MySQL
service:
name: mysql
state: restarted
enabled: yes
第一个任务将变量设置为所需状态,我可以验证..但它不是持久的。当第二个任务重新加载 mysql 服务时,变量被设置为默认值。
如何在目标节点上使用 Ansible 设置此变量持久化?
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