首页 > 数据库 >Ansible操作MySQL常用的几个模块

Ansible操作MySQL常用的几个模块

时间:2024-10-17 21:45:54浏览次数:3  
标签:name MySQL replication Ansible user 模块 mysql login password

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的案例,请移步至:ansible 写入mysql - 老白网络

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

标签:name,MySQL,replication,Ansible,user,模块,mysql,login,password
From: https://blog.csdn.net/hongjian006/article/details/143028313

相关文章

  • mysql explain
    参考:[MySQL高级EXPLAIN用法和结果分析](https://blog.csdn.net/why15732625998/article/details/80388236)explain分析表的读取顺序数据读取操作的操作类型哪些索引可以使用哪些索引被实际使用表之间的引用每张表有多少行被优化器查询examplesqlexplainSELECTcoun......
  • 后端程序员必备:15个MySQL表设计的经验准则
    15个MySQL表设计的经验准则在数据库设计中,MySQL表的设计至关重要。一个良好的表设计可以提高数据库的性能、可维护性和数据的准确性。以下是15个MySQL表设计的经验准则,希望能为你的数据库设计提供有益的指导。一、通用字段的设置在设计表时,尽量包含以下几个通用......
  • Lnmp(mysql分离)(nginx 1.13.6+mysql5.5+php5.3)环境一键搭建
    Lnmp(mysql分离)(nginx 1.13.6+mysql5.5+php5.3)环境一键搭建如果对运维课程感兴趣,可以在b站上、csdn或微信视频号上搜索我的账号:运维实战课程,可以关注我,学习更多免费的运维实战技术视频在192.168.37.128服务器上:(mysql只到makeinstall即可)nginx默认站点html1.上传lnmp的安装......
  • 比较相同机器上 redis和mysql分别单独承载的 最大连接数量
    在相同的机器上,Redis和MySQL的最大连接数量会受到硬件配置(如CPU、内存、网络等)、配置参数和应用场景的影响。以下是对Redis和MySQL在单机环境下最大连接数的比较:Redis最大连接数量默认配置:Redis默认的最大连接数为10,000。这个值可以通过配置文件中的maxcl......
  • 【工具使用】MSF使用_MSF中kiwi(mimikatz)模块
    一、简介:kiwi模块:mimikatz模块已经合并为kiwi模块;使用kiwi模块需要system权限,所以我们在使用该模块之前需要将当前MSF中的shell提升为system。二、前提:1.提权到system权限当前权限是administrator用户若不是,需要利用其他手段先提权到administrator用户。然后adminis......
  • MySql基础:基本查询
    目录1.INSERT(插入)1.1全列插入1.2指定列插入 1.3插入更新  1.4插入替换2.SELECT查询2.1SELECT列2.1.1全列查询2.1.2指定列查询2.1.3查询字段为表达式2.1.4为查询结果指定别名2.1.5查询结果去重 2.2WHERE查询 2.2.1比较运算查询2.2.1.1  >,......
  • 完整的智能物联中台应该具备哪些子产品和模块呢?
    一套智能物联网中台,我们认为应该是有多个模块/产品整体组合、堆叠而来。每个模块/产品解决具体问题,拆开了能各自使用,组合就能成为一套大工具。总之,否则老是用大炮打蚊子就不合适,合适的场景需要合适的产品要对应。但这个分拆非常有技巧。我们认为,一套优秀的智能物联中台应该有以下......
  • 无线串口模块—配置软件以及串口助手的使用
    1、适用型号本文适用于无线串口模块调试。文中的软件界面截图,可能会由于软件系列、软件版本不同而略有区别。2、使用参数设置软件RF_Setting使用方法(以E32-433TBL-01型号lora模块开发测试套件说明)说明:E32-433TBL-01是贴片串口模块结合USB转TTL串口底板形成的无线模块开发成套......
  • 无线串口模块—配置软件以及串口助手的使用
    1、适用型号本文适用于无线串口模块调试。文中的软件界面截图,可能会由于软件系列、软件版本不同而略有区别。2、使用参数设置软件RF_Setting使用方法(以E32-433TBL-01型号lora模块开发测试套件说明)说明:E32-433TBL-01是贴片串口模块结合USB转TTL串口底板形成的无线模块开发成套测试产......
  • mysql慢sql优化思路
    开启慢sql查询配置,或使用云服务厂商的慢sql统计,找到慢sql看下是不是使用了select*,如果是的话,改为查找字段,因为这样可以避免优化器去解析字段,单次查询可能效果不明显,但是一旦并发上来以后,这个就比较明显了,还有就是减少网络IO的消耗看下对应的数据量级,如果连表的话,是不是小表驱......