Ansible部署主从复制
时间:2020-07-11
本文章向大家介绍Ansible部署主从复制,主要包括Ansible部署主从复制使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
第一节:部署数据库主从的前提条件
1.两台或两台以上的数据库实例
2.主库要开启二进制日志
3.主库要有复制用户
4.主库的server_id和从库不同
5.从库需要在开启复制功能前,要获取到主库之前的数据(主库备份,并且记录binlog当时位置)
6.从库在第一次开启主从复制时,时必须获知主库:ip,port,user,password,logfile,pos
IP:10.0.0.51
Port:3306
User:rep
Password:123456
logFile:mysql-bin.000002 <--在主库上获取值
Pos:120 <--在主库上获取值
7.从库要开启相关线程:IO、SQL
8.从库需要记录复制相关用户信息,还应该记录到上次已经从主库请求到哪个二进制日志
9.从库请求过来的binlog,首先要存下来,并且执行binlog,执行过的信息保存下来
第二节: 使用Ansible自动部署主从复制
· Ansible部署主从复制出现的问题:由于主库的logfile,和pos不是固定的所以,我们所写的ansible前提是要在主库上执行命令,进行查看logfile和pos
show master status;
主机文件:
[mysql]
172.16.1.51
172.16.1.52
第三节:使用register来注册变量
· 这里我使用了register注册变量,但是注册的变量只能针对当前主机生效。通过设置全局的fact变量来实现跨主机变量的使用,从而自动获取到logfile和pot。
#将logfile注册成变量。
- name: Get logfile
shell: mysql -uroot -p123456 -e "show master status;"|awk 'NR==2{print $1}'
register: file
when: ( ansible_hostname is match "mysql01" )
#将pot注册成变量
- name: master-bin-pot
shell: mysql -uroot -p123456 -e "show master status;"|awk 'NR==2{print $2}'
register: pot
when: ( ansible_hostname is match "mysql01" )
第四节:跨主机变量的使用
1.通过set_fact模块来设置全局的fact变量
- name: set facts file
set_fact: masterbin={{ file.stdout_lines[0] }} <--将获取到的logfile赋值给masterbin
when: ( ansible_hostname is match "mysql01")
- name: set facts position
set_fact: position={{ pot.stdout_lines[0] }} <--将获取到的pot赋值给position
when: ( ansible_hostname is match "mysql01")
2.从库上执行change master to 命令
- name: Changemaster to
mysql_replication:
login_user: root
login_password: '123456'
mode: changemaster
master_user: web
master_password: '123456'
master_host: 172.16.1.51
master_log_file: "{{ hostvars['172.16.1.51']['masterbin'] }}" <--引用51的主机变量
master_log_pos: "{{ hostvars['172.16.1.51']['position'] }}" <--引用51的主机变量
when: ( ansible_hostname is match "mysql02" )
原文地址:https://www.cnblogs.com/tcy1/p/13284995.html
- android Universal Image Loader for Android 说明文档 (1)
- 修改android最小堆内存
- (转)ES6新特性概览
- 基于OEA框架的客户化设计(一) 总体设计
- 【致敬周杰伦】基于TensorFlow让机器生成周董的歌词(附源码)
- 关于Android N的那些事
- “节流函数”提高性能
- Mono 3.0.2 基于双工通信的WCF应用 Demo
- android的适配方法
- 使用Glimpse 监测ASP.NET MVC网站
- IPv6 socket编程下--实现篇
- android内存优化
- asp.net mvc本地程序集和GAC的程序集冲突解决方法
- ES6-arrows
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- OSPF 路由协议配置
- 项目实战 | 细节决定成败的渗透测试
- 构建Rasa低成本的Docker开发部署环境
- JsonPath实践(五)
- 项目实战 | 细节决定成败的渗透测试
- 工具的使用 | CobaltStrike证书修改躲避流量审查
- 一分钟学Python|Python的集合
- 遇到个小BUG之后
- 小白学PyTorch | 1 搭建一个超简单的网络
- 小白学PyTorch | 动态图与静态图的浅显理解
- Go 视图模板篇(五):模板布局和继承
- Go 视图模板篇(四):上下文感知与 XSS 攻击
- 引入 Laravel Mix 管理前端资源
- Go 视图模板篇(三):参数、管道和函数调用
- 基于独立的 Laravel Eloquent 组件编写 ORM 模型类