翼度科技»论坛 编程开发 mysql 查看内容

Ansible操作MySQL常用的几个模块

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
1. mysql_user 模块

mysql_user模块用来添加,删除用户以及设置用户权限
创建MySQL数据库的用户与口令(非root@localhost用户),直接通过playbooks中的案例来说明吧。
  1. - name: 创建MySQL数据库用户--user_test
  2.   mysql_user:
  3.     # ----- 登陆数据库
  4.     login_host: "localhost"
  5.     login_port: 3306
  6.     login_user: root
  7.     login_password: "{{ root_password }}"
  8.     ## 添加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)\
  9.     login_unix_socket: "/你sock文件的路径/mysql.sock"
  10.     # ----- 创建的用户的信息
  11.     name: "user_test"
  12.     host: "%"
  13.     password: "{{ user_test_password }}"
  14.     priv: "{{ item }}"
  15.     # -----
  16.     state: present
  17.   with_items:
  18.     - "*.*:REPLICATION SLAVE,REPLICATION CLIENT"
  19.     - "*.*:PROCESS"
  20.     - "performance_schema.*:select"
  21.     ### 权限之间不要有空格,否则报错--例如:(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参数不设置,可能导致的错误。
2.mysql_query

执行查看或DML语句。
查询的案例
  1. - hosts: db_servers
  2. tasks:
  3. - name: Query MySQL table
  4. mysql_query:
  5. login_host: localhost
  6. login_user: db_user
  7. login_password: db_pass
  8. db: db_name
  9. query: SELECT * FROM table_name WHERE column_name = 'value';
  10. register: result
  11. - name: Print query result
  12. debug:
  13. var: result.stdout_lines
复制代码
使用 mysql_query 模块执行一个查询,并将结果存储在变量 result 中,并且使用 debug 模块打印出结果。
insert的案例,请移步至:https://www.yzktw.com.cn/post/729455.html
3.mysql_db

mysql_db模块用于建立、删除、导入和导出数据库.
建立数据库 state="present"
删除数据库 state="absent"
导出数据库 state="dump"
导入数据库 state="import"
具体案例 建议参阅:
https://www.kancloud.cn/hiyang/ansiblebook/306176
4.mysql_replication

功能:搭建主从。
直接看代码,高效+容易上手。
  1. # 从库,执行Change Master
  2. # -- 只有是从库的时候,才需要执行这一步
  3. - name: "从库:Change Master"
  4.   mysql_replication:
  5.     mode: changemaster
  6.     # ------------
  7.     # 登陆MySQL
  8.     login_user: root
  9.     login_password: "{{ mysql_database_user_root_password }}"
  10.     # ------------
  11.     # Change Master
  12.     master_host: "{{ mysql_replication_master_host }}"
  13.     master_port: "{{ mysql_replication_master_port }}"
  14.     master_user: "{{ mysql_replication_user_name }}"
  15.     master_password: "{{ mysql_replication_user_password }}"
  16.     master_log_file: "{{ mysql_replication_master_status['File'] }}"
  17.     master_log_pos: "{{ mysql_replication_master_status['Position'] }}"
  18.   when: db_role == "slave"
  19. # 从库:Start Slave
  20. # -- 只有是从库的时候,才需要执行这一步
  21. - name: 从库:Start Slave
  22.   mysql_replication:
  23.     mode: startslave
  24.     # ------------
  25.     # 登陆MySQL
  26.     login_user: root
  27.     login_password: "{{ mysql_database_user_root_password }}"
  28.     # ------------
  29.   when: db_role == "slave"
  30. # 从库:获取从库信息
  31. - name: 从库:获取从库信息
  32.   mysql_replication:
  33.     mode: getslave
  34.     # ------------
  35.     # 登陆MySQL
  36.     login_user: root
  37.     login_password: "{{ mysql_database_user_root_password }}"
  38.     # ------------
  39.   register: mysql_replication_slave_status
  40.   when: db_role == "slave"
  41. # 输出从库信息
  42. - name: "从库:Slave Status"
  43.   debug:
  44.     msg: "Slave_IO_Running【{{ mysql_replication_slave_status['Slave_IO_Running'] }}】 / Slave_SQL_Running【{{ mysql_replication_slave_status['Slave_SQL_Running'] }}】 / Slave_SQL_Running_State【{{ mysql_replication_slave_status['Slave_SQL_Running_State'] }}】 / Seconds_Behind_Master【{{ mysql_replication_slave_status['Seconds_Behind_Master'] }}】"
  45.   when: db_role == "slave"
复制代码
https://gitee.com/leviathan-litan/ansible-mysql-mha/blob/master/playbooks/roles/mysql/tasks/mysql_replication.yml
5. service模块

这个是通用的服务管理模块。
  1. # 启动MySQL服务
  2. - name: 启动MySQL服务
  3.   service:
  4.     name: mysqld
  5.     state: started
  6.     enabled: yes
复制代码
6. MySQL初始化后后,修改密码

初始化后,一般修改root的密码的命令如下
  1. mysqladmin -h localhost -u root -p'在path_mysql_error_log中查找的 A temporary password' password '新密码'
复制代码
这种情况,通过ansibe 操作的命令, 可以参阅:https://gitee.com/leviathan-litan/ansible-mysql-mha/blob/master/playbooks/roles/mysql/tasks/mysql_database_user_password.yml
但是:有些人在初始化的时候,添加了--initialize-insecure参数,此时,初始化不会生出临时密码,或者说生成的临时密码为空。此时再用上面的代码就不可以了。
回到原点:想想这种情况在MySQL控制台是怎么操作的???
嘿嘿..... 是通过以下命令,将root账户的密码更改为“newpassword”的。
  1. mysqladmin -u root password "newpassword"
复制代码
那么在ansible中,编写的剧本可以如下:
  1. # 通过得到的临时口令,修改数据库的口令为变量文件中设置的口令
  2. - name: 修改MySQL的临时口令
  3.   shell: "mysqladmin -h localhost -u root password '{{ new_root_password }}'"
  4.   ignore_errors: yes
复制代码
7.其他注意项

还有一点需要补充的是: 运行的的时候,很可能报错,说 mysqladmin不是shell 或 bash 命令之类的错误, 因此建议在写剧本时,mysqladmin 写出完整路径,例如: /usr/local/mysql/bin/mysqladmin。
mysql命令,建议同样操作。
 
补充学习

(1)https://docs.ansible.com/ansible/devel/modules/mysql_query_module.html
(2)ansible自动化部署mysql主从部署剧本
https://blog.csdn.net/u010282639/article/details/131337036
 

来源:https://www.cnblogs.com/xuliuzai/p/17806412.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具