到目前为止,我们一直在使用Geerlingguy Ansible 角色适用于我们所有的数据库部署,但现在我正在为一个新项目扩展它的使用,似乎不支持安装插件。我需要在 MySQL 中以某种方式执行的命令是
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
我怀疑考虑收集事实并使用 shell 模块直接执行命令是否是个好主意,但到目前为止我还没有看到其他选择。还有什么相关的东西我还没发现吗?提前致谢。
答案1
我认为你可以用安装插件行并使用 MySQLAnsible mysql_db 模块的导入功能来运行它。
这可能比使用 shell 更好。
- name: Import sql similar to mysql -u <username> -p <password> < file.sql
mysql_db:
state: import
name: DATABASE-NAME
target: /path/to/import/file.sql
答案2
通过获取丢失的 group_replication.so 文件(我从 MySQL 社区版获得它),然后使用这两个 Ansible 任务配置和启用它来解决:
- name: Provision the MySQL group_replication plugin
copy:
src: group_replication.so
dest: /usr/lib/mysql/plugin/group_replication.so
mode: 0644
- name: Install MySQL plugin group_replication
shell: >
mysql -u root -e "SHOW PLUGINS\G" | grep -q group_replication
&& echo -n FOUND
|| mysql -u root -e "INSTALL PLUGIN group_replication SONAME 'group_replication.so';"
register: plugin_state
changed_when: plugin_state.stdout != 'FOUND'
我将插件本身放在本地文件/文件夹下,以便 Ansible 可以找到。