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

Ansible操作MySQL常用的几个模块

时间:2023-11-02 22:55:25浏览次数:46  
标签:MySQL replication Ansible user 模块 mysql login password root

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

 

标签:MySQL,replication,Ansible,user,模块,mysql,login,password,root
From: https://www.cnblogs.com/xuliuzai/p/17806412.html

相关文章

  • pyttsx3模块
    1、介绍pyttsx3模块是python的一个第三方模块,作用是进行语音合成。无需请求api,本地合成,可以不受次数和字数限制技术相对成熟,应用广泛,使用方便2、pyttsx3.speak函数importpyttsx3pyttsx3.speak('你指尖跃动的电光,是我此生不灭的信仰')这是该模块最简应用,调用speak函数时......
  • docker-compose安装mysql8+踩坑版
    一、拉取MySQL镜像我这里使用的是MySQL8.0.18,可以自行选择需要的版本。dockerpullmysql:8.0.18二、创建挂载目录mkdir-p/home/docker/mysql8/logmkdir-p/home/docker/mysql8/datamkdir-p/home/docker/mysql8/conf.d三、添加配置文件my.cnf(没有特殊需求可以跳......
  • IDEA中配置Mysql
    我的IDEA版本是2021.2.4刚开始使用IDEA时,想要配置Mysql,搜索了许多教程,却根本找不到DataBase的位置,view中也找不到,后面才找到了问题。在file的setting中找到plugins,搜索Database即可,安装如图插件。 安装后即可在View中找到DBBrowser,然后如图连接选择mysql,另外连接时还需要输......
  • angie vod_module 模块的问题
    上次我简单说过angie官方构建的nginx-vod-module有一些问题,经常测试实际上问题还是不小的主要问题声音处理会有问题同时缩略图似乎也有问题解决方法应该自己构建nginx-vod-module,同时编译为动态模块(包含debug最好)说明实际上通过日志我们也看出了不少警告信息,十实际上......
  • kubesphere安装Mysql
          ......
  • Windows系统使用MySql Workbench远程登陆Linux系统的MySql Server
     0.系统版本客户端:Windows10服务器:Ubuntu22.04(阿里ECS)数据库:Mysql8.0.351.操作步骤服务器端1.1在ubuntu22.04中安装Mysql1.1.1更新索引sudoaptupdate1.1.2安装sudoaptinstallmysql-server完成后查看版本mysql-V1.2修改Mysql......
  • mysql,左连接 ,查询右表为null的写法,删除,带join条件的写法
    select*fromsale_guestsgleftjoinsale_billsbonsg.bill_id=sb.idwheresg.gmt_create>'2023-10-20'andsb.bill_noisNULLselect*fromsale_empseleftjoinsale_billsbonse.bill_id=sb.idwherese.gmt_create>'2023-10-20'and......
  • DC电源模块外壳材质对模块的影响有多少
    BOSHIDADC电源模块外壳材质对模块的影响有多少DC电源模块是一种常见的电子元件,被广泛应用于电子设备、通讯、计算机、医疗器械、制造业等领域,它的外壳材质对电源模块的性能和稳定性有直接的影响。本文将就DC电源模块外壳材质的不同对模块的影响作一简要介绍。首先,DC电源模块通......
  • DC电源模块外壳材质对模块的影响有多少
    BOSHIDADC电源模块外壳材质对模块的影响有多少DC电源模块是一种常见的电子元件,被广泛应用于电子设备、通讯、计算机、医疗器械、制造业等领域,它的外壳材质对电源模块的性能和稳定性有直接的影响。本文将就DC电源模块外壳材质的不同对模块的影响作一简要介绍。首先,DC电源模块通常......
  • 振弦传感器智能化:电子标签模块
    振弦传感器智能化:电子标签模块稳控科技研发并批量生产的振弦采集模块解决了传感器由模拟信号直接转变为数字信号的难题。近年来,振弦传感器为适应用户需求,不断迭代更新技术,使学习和使用成本非常低,且带来方便快捷的体验效果。传统传感器生产厂家专注于传感器的生产,技术实力一般,导致......