Ansible操作MySQL常用的几个模块

这篇具有很好参考价值的文章主要介绍了Ansible操作MySQL常用的几个模块。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 模块打印出结果。

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

功能:搭建主从。

直接看代码,高效+容易上手。

# 从库,执行Change Master
# -- 只有是从库的时候,才需要执行这一步
- name: "从库:Change Master"
  mysql_replication:
    mode: changemaster
    # ------------
    # 登陆MySQL
    login_user: root
    login_password: "{{ mysql_database_user_root_password }}"
    # ------------
    # Change Master
    master_host: "{{ mysql_replication_master_host }}"
    master_port: "{{ mysql_replication_master_port }}"
    master_user: "{{ mysql_replication_user_name }}"
    master_password: "{{ mysql_replication_user_password }}"
    master_log_file: "{{ mysql_replication_master_status['File'] }}"
    master_log_pos: "{{ mysql_replication_master_status['Position'] }}"
  when: db_role == "slave"

# 从库:Start Slave
# -- 只有是从库的时候,才需要执行这一步
- name: 从库:Start Slave
  mysql_replication:
    mode: startslave
    # ------------
    # 登陆MySQL
    login_user: root
    login_password: "{{ mysql_database_user_root_password }}"
    # ------------
  when: db_role == "slave"

# 从库:获取从库信息
- name: 从库:获取从库信息
  mysql_replication:
    mode: getslave
    # ------------
    # 登陆MySQL
    login_user: root
    login_password: "{{ mysql_database_user_root_password }}"
    # ------------
  register: mysql_replication_slave_status
  when: db_role == "slave"

# 输出从库信息
- name: "从库:Slave Status"
  debug:
    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'] }}】"
  when: db_role == "slave"

https://gitee.com/leviathan-litan/ansible-mysql-mha/blob/master/playbooks/roles/mysql/tasks/mysql_replication.yml

5. service模块

这个是通用的服务管理模块。

# 启动MySQL服务
- name: 启动MySQL服务
  service:
    name: mysqld
    state: started
    enabled: yes

6. MySQL初始化后后,修改密码

初始化后,一般修改root的密码的命令如下

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”的。

mysqladmin -u root password "newpassword"

那么在ansible中,编写的剧本可以如下:

# 通过得到的临时口令,修改数据库的口令为变量文件中设置的口令
- name: 修改MySQL的临时口令
  shell: "mysqladmin -h localhost -u root password '{{ new_root_password }}'"
  ignore_errors: yes

7.其他注意项

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

mysql命令,建议同样操作。

 文章来源地址https://www.toymoban.com/news/detail-740117.html

补充学习

(1)https://docs.ansible.com/ansible/devel/modules/mysql_query_module.html

(2)ansible自动化部署mysql主从部署剧本

https://blog.csdn.net/u010282639/article/details/131337036

 

到了这里,关于Ansible操作MySQL常用的几个模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ansible(2)-- ansible常用模块

    部署ansible:ansible(1)-- 部署ansible连接被控端_luo_guibin的博客-CSDN博客 目录  一、ansible常用模块 1.1 ping 1.2 command 1.3 raw 1.4 shell 1.5 script 1.6 copy 1.7 template 1.8 yum 11.0.1.13 主控端(ansible) 11.0.1.12 被控端(k8s-master) 查看主控端被控端IP,主控端(10.1.1.13)查看ansible配置文件的被控端,

    2024年02月11日
    浏览(38)
  • 【ansible】认识ansible,了解常用的模块

    目录 一、ansible是什么? 二、ansible的特点? 三、ansible与其他运维工具的对比 四、ansible的环境部署 第一步:配置主机清单 第二步:完成密钥对免密登录 五、ansible基于命令行完成常用的模块学习 模块1:command模块 模块2:shell模块 模块3:cron模块 模块4:user模块 模块5:gro

    2024年02月20日
    浏览(38)
  • php中常用的几个安全函数

    1. mysql_real_escape_string()        这个函数对于在PHP中防止SQL注入攻击很有帮助,它对特殊的字符,像单引号和双引号,加上了“反斜杠”,确保用户的输入在用它去查询以前已经是安全的了。但你要注意你是在连接着数据库的情况下使用这个函数。        但现在mysql_re

    2024年02月02日
    浏览(52)
  • 2023年内网穿透常用的几个工具

    作为一名开发者,先给大家普及一下什么是内网,什么是外网。 所谓内网就是内部建立的局域网络或办公网络。 比如 一家公司或一个家庭有多台计算机,他们利用不同网络布局将这一台或多台计算机或其它设备连接起来构成一个局部的办公或者资源共享网络,我们就称它为

    2024年02月06日
    浏览(35)
  • ansible 常用模块

    目录 1.ping模块  2.command模块 3. shell模块 4.copy模块 5.file模块  6.fetch模块 7.cron模块 8.yum模块 9.service模块 10.user模块 11.group模块 12.script 模块  13.setup模块 14. get_url模块 15.stat模块 16.unarchive模块 1.ping模块 使用ansible db1 -m ping 命令进行主机连通性测试  2.command模块 这个模块可以直

    2024年01月24日
    浏览(38)
  • Ansible中常用模块

    目录 1.ansible实现管理的方式 2.Ad-Hoc执行方式中如何获得帮助 3.ansible命令运行方式及常用参数 4.ansible的基本颜色代表信息 5.ansible中的常用模块 command shell script copy fetch file unarchive archive hostname cron yum_repository dnf service firewalld user group lineinfile replace setup debug 绿色          

    2024年02月06日
    浏览(33)
  • ansible常用文件模块

    blockinfile:         插入、更新或删除由可定义标记包围的多行文本块 lineinfile:         确保特定行位于指定文件中,反向使用正则表达式替换行。 copy:         将本地或远程主机文件复制到受管主机的指定位置,可以设置文件属性,SELinux上下文。 fetch:         与copy相

    2023年04月19日
    浏览(33)
  • 认识ansible,了解常用的模块

    Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个

    2024年02月21日
    浏览(32)
  • Ansible基本使用和常用模块

    1) 部署 2) 配置 3) Ans-inventory 主机清单 a.什么是主机清单 : 让 ansible 管理的节点的列表,ansible 默认读取在 /etc/ansible/hosts 文件 ,并非 /etc/hosts. b.我们会把主机清单文件存放在指定的目录中 , 运行 ansible 的时候通过 -i 选项指定主机清单文件即 可 4)  批量管理主机并执行shell命令

    2024年01月19日
    浏览(34)
  • Ansible命令格式和常用模块介绍

    ansible [群组名] -m [模块名] -a [参数] command模块为默认模块,用于远程执行命令(命令模块) 使用command模块在远程主机中执行命令时,不会经过远程主机的shell处理,在使用command模块时,如果需要执行命令中的含\\\"\\\",\\\"\\\",\\\"|\\\",\\\"\\\"等特殊符号时,这些符号功能会失效 常用参数: command模块

    2024年01月19日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包