如何使用Ansible模块高效管理MySQL数据库?

摘要:1. mysql_user 模块 mysql_user模块用来添加,删除用户以及设置用户权限 创建MySQL数据库的用户与口令(非root@localhost用户),直接通过playbooks中的案例来说明吧。 -
1.mysql_user 模块 mysql_user模块用来添加,删除用户以及设置用户权限 创建MySQL数据库的用户与口令(非root@localhost用户),直接通过playbooks中的案例来说明吧。 - name: 创建MySQL数据库用户--user_test mysql_user: # ----- 登陆数据库 login_host: "localhost" login_port: 3306 login_user: root login_password: "{{ root_password }}" ## 添加login_unix_socket,否则报错:FAILED! => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "msg": "unable to connect to database, check login_user and login_password are correct or /root/.my.cnf has the credentials. Exception message: (2002, \"Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)\ login_unix_socket: "/你sock文件的路径/mysql.sock" # ----- 创建的用户的信息 name: "user_test" host: "%" password: "{{ user_test_password }}" priv: "{{ item }}" # ----- state: present with_items: - "*.*:REPLICATION SLAVE,REPLICATION CLIENT" - "*.*:PROCESS" - "performance_schema.*:select" ### 权限之间不要有空格,否则报错--例如:(item=*.*:REPLICATION SLAVE, REPLICATION CLIENT) => {"ansible_loop_var": "item", "changed": false, "item": "*.*:REPLICATION SLAVE, REPLICATION CLIENT", "msg": "invalid privileges string: Invalid privileges specified: frozenset([' REPLICATION CLIENT'])"} 说明,这个案例中,有提到常见的错误,例如有关login_unix_socket参数不设置,可能导致的错误。 补充:假如各个DB的期望赋予的权限不同,也可以先创建账号,再增加权限,相应的参数为append_privs: true 例如: # Modify user Bob to require SSL connections. Note that REQUIRESSL is a special privilege that should only apply to *.* by itself. - mysql_user: name: bob append_privs: true priv: '*.*:REQUIRESSL' state: present 2.mysql_query 执行查看或DML语句。 查询的案例 - hosts: db_servers tasks: - name: Query MySQL table mysql_query: login_host: localhost login_user: db_user login_password: db_pass db: db_name query: SELECT * FROM table_name WHERE column_name = 'value'; register: result - name: Print query result debug: var: result.stdout_lines 使用 mysql_query 模块执行一个查询,并将结果存储在变量 result 中,并且使用 debug 模块打印出结果。
阅读全文