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参数不设置,可能导致的错误。

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命令,建议同样操作。

补充学习

(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常用的几个模块的更多相关文章

  1. centos LAMP第四部分mysql操作 忘记root密码 skip-innodb 配置慢查询日志 mysql常用操作 mysql常用操作 mysql备份与恢复 第二十二节课

    centos  LAMP第四部分mysql操作  忘记root密码  skip-innodb 配置慢查询日志 mysql常用操作  mysql常用操作 mysql备份与恢复   第二十二节课 mysq ...

  2. python操作mysql(一)原生模块pymysql

    一.下载安装 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 下载安装 C:\Users\Administrator>pip install pymysq ...

  3. python操作MySQL数据库的三个模块

    python使用MySQL主要有两个模块,pymysql(MySQLdb)和SQLAchemy. pymysql(MySQLdb)为原生模块,直接执行sql语句,其中pymysql模块支持python ...

  4. DOS命令行操作MySQL常用命令

    平时用可视化界面用惯了,如果紧急排查问题,没有安装可视化工具的话,只能通过命令来看了. 以备不时之需,我们要熟悉一下命令行操作MySQL. 打开DOS命令窗口:WIN + R 输入cmd,回车 然后输 ...

  5. Linux 操作MySQL常用命令行(转)

    注意:MySQL中每个命令后都要以分号:结尾. 1.显示数据库 mysql> show databases; +----------+ | Database | +----------+ | m ...

  6. Linux 操作MySQL常用命令行

    1.连接数据库 mysql -uroot -p Enter password: ** Mysql> 出现mysql>说明成功连接到数据 2.显示数据库 mysql> show dat ...

  7. ubuntu命令行操作mysql常用操作

    登陆mysql harvey@harvey-Virtual-Machine:~/ruby/mydiary$ mysql -u root -p Enter password: Welcome to th ...

  8. mysql常用语句操作

    概述: 1.通过表结构介绍.来操作mysql常用的语法&语句: 2.现在学习下几个基本的sql语句,万变不离其宗,把基础弄扎实了其它的就很容易了 一.表结构&建表: 1.学生基础信息表 ...

  9. Python学习之==>操作MySQL

    一.简介: MySQL为关系型数据库,其他关系型数据库包括Oracle.DB2.Sql Server等等.Python操作MySQL需要使用到pymsyql模块,pip安装即可. 二.操作MySQL步 ...

  10. python操作MySQL,SQL注入的问题,SQL语句补充,视图触发器存储过程,事务,流程控制,函数

    python操作MySQL 使用过程: 引用API模块 获取与数据库的连接 执行sql语句与存储过程 关闭数据库连接 由于能操作MySQL的模块是第三方模块,我们需要pip安装. pip3 insta ...

随机推荐

  1. kbuild系统中最简单的目标 -- help(三)

    当你学完help目标后你会发现它与我们的代码基本没有什么直接的关系,仅仅是用来生成kbuild的简短使用说明,但是用它来作为学习掌握kbuild编译系统的开篇,不管是从难度还是学习感受上真的是再适合不 ...

  2. 2023年ccpc河南省程序设计竞赛-clk

    很荣幸能够参加这次比赛,比赛机会挺难得得,还是第一次线下参加这样的大型比赛,比赛体验自然无话可说比较刺激..这次比赛我和队友crf和nhr共同解决了三道题,参与感极差,可以说问题很大,最简单的签到题我 ...

  3. C++ 核心指南之 C++ P.哲学/基本理念(上)

    C++ 核心指南(C++ Core Guidelines)是由 Bjarne Stroustrup.Herb Sutter 等顶尖 C+ 专家创建的一份 C++ 指南.规则及最佳实践.旨在帮助大家正确 ...

  4. asp.net core之日志

    日志记录在应用程序开发中起着至关重要的作用,它可以帮助开发人员诊断和调试问题,同时也是监控和性能优化的重要工具.ASP.NET Core 提供了强大且灵活的日志记录功能,本文将详细介绍ASP.NET ...

  5. HTTPS 是这样握手的

    HTTP协议默认是明文传输,存在一定的安全隐患,容易被中间人窃听和攻击,在 加密解决HTTP协议带来的安全问题 中提到使用哈希.对称加密.非对称加密等方式对数据加密,能解决数据安全的问题. 以上加密方 ...

  6. JS标识符

    什么是标识符? 变量名 函数名 属性名都称为标识符. 定义标识符规范如下 1) 标识符只能由字母 数字 下划线 $组成. 2) 标识符不能以数字开头,例如: 1name. 3) 标识符不能实JS中的关 ...

  7. vue实现文本复制

    一. 下载插件 npm install --save vue-clipboard2 二. main.js import VueClipBoard from 'vue-clipboard2' Vue.u ...

  8. ECharts图表动态修改series显示隐藏

    目录 1.前言 2.思路 3.实现 1.前言 最近做的大数据平台,里面很多地方用到了ECharts,其中有个功能,要求将图表分组,根据用户选择的组,来确定ECharts要显示那些线条和柱子,也就是动态 ...

  9. 想让你的工作轻松高效吗?揭秘Java + React导出Excel/PDF的绝妙技巧!

    前言 在B/S架构中,服务端导出是一种高效的方式.它将导出的逻辑放在服务端,前端仅需发起请求即可.通过在服务端完成导出后,前端再下载文件完成整个导出过程.服务端导出具有许多优点,如数据安全.适用于大规 ...

  10. Python隔离环境的搭建

    在nodejs中,我们可以指定扩展安装的路径,那么在python中,我们是不是也可以这么做呢? 当然可以,我们只需要安装一个扩展virtualenv或者virtual wrapper就可以实现环境的隔 ...