mysql学习笔记四 —— AB复制
要点:
ab复制
mysql集群架构流程:
ABB(主从复制)-->MHA(实现mysql高可用、读写分离、脚本控制vip飘逸)-->haproxy(对slave集群实现分发,负载均衡)-->keepalive(预防一台haproxy单点故障,对两台及以上的haproxy实现高可用)
1、MySQL复制特性 --MySQL AB复制,即主从复制 master slave
备份(容灾)
减轻master压力 AB 读写分离
拓展: AA master-master 主主复制
ABBB 一主多从
1.1 AB复制过程(原理)
是一种异步复制,5.5版本之后可以实现半同步复制。
master将所有的增删改(DML)的操作写入到binlog中;
slave上的IO线程登陆到master上拉取binlog并写入到relay log(中继日志)中;
slave上的SQL线程读取中继日志并将SQL语句在本地执行,这样数据同步。
slave上的两个线程:
io线程:读取master上的binglog日志,并写入到本机上的relay log中
SQL线程:读取relay log,并将其(SQL语句)应用到本地
1.2 搭建AB复制
1.2.1 分析都需要做什么
a.master和slave确定身份(server_id:越小越优先)
b.master开启binglog日志
c.master设置复制账户和赋权
d.slave确定从binglog的什么位置开始应用sql语句
ip规划:
251 master
241 slave
1.2.2 步骤
master:
1) 开启binglog
vim /etc/my.cnf
server-id=1 //确定身份,id小的优先作为master
log-bin=binlog
log-bin_index=binlog.index
2) 创建专用复制用户,允许从slave上连过来的复制用户
grant replication slave on *.* to 'repl'@'192.168.19.241' identified by '123';
flush privileges;
show grants for jeck@13.1.1.2;
3)查看master当前的binglog日志及位置信息
show master status\G
mysql> show master status\G
*************************** 1. row ***************************
File: binlog.000003
Position: 258
slave:
1)确定身份,可选的设置中继日志名和中继日志索引
server-id=3
relay-log=/var/lib/mysql/relay_log #也可以不写,mysql默认开启中继日志
relay-log_index=/var/lib/mysql/relay_log.index
2)设置slave找谁拉取binglog,从哪个位置开始拉...(在拉之前需要关闭slave,拉完之后再开启)
change master to...
mysql> change master to master_host='192.168.19.251', master_port=3306, master_user='repl', master_password='123', master_log_file='binlog.000003', master_log_pos=4;
3) 开启slave
start slave;
4)查看slave状态
show slave status\G
Slave_IO_State: Waiting for master to send event binlog event :二进制事件,即master上产生的增删改的操作
Master_Host: 192.168.19.251
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: binlog.000003 //master上的当前的binglog日志
Read_Master_Log_Pos: 518 //读取到的binglog的位置
Relay_Log_File: relay_log.000002 //本地中继日志文件
Relay_Log_Pos: 508 //本地中级日志位置
Relay_Master_Log_File: binlog.000003*** //当前中继日志中记录的是master上的哪一个binlog日志文件
Slave_IO_Running: Yes //IO 线程状态
Slave_SQL_Running: Yes //SQL线程状态
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 518*** //执行到的binglog的位置,去对比show master status\G 看到的位置,可以得出有没有延迟
5) 测试
在master上创建库和表并插入数据,然后到slave上看下有没有同步过来
问题:
A已经运行了一段时间,才想着搭建AB复制:
1、A上全库备份,并恢复到B上
2、B再去 change master to
实验过程:
在master上
a.全库备份
mysqldump --all-databases -x > /opt/all.sql
b.编辑配置文件与之前相同
c.设置复制专用用户及权限
同上...
看一下master状态:
同上...
在slave上
先获得master上的全库备份,并恢复在本地
mysql < /opt/all.sql
后面就一样的
mysql学习笔记四 —— AB复制的更多相关文章
- MySql学习笔记四
MySql学习笔记四 5.3.数据类型 数值型 整型 小数 定点数 浮点数 字符型 较短的文本:char, varchar 较长的文本:text, blob(较长的二进制数据) 日期型 原则:所选择类 ...
- MySQL学习笔记十七:复制特性
一.MySQL的复制是将主数据库(master)的数据复制到从(slave)数据库上,专业一点讲就是将主数据库DDL和DML操作的二进制日志传到从库上,然后从库对这些二进制日志进行重做,使得主数据库与 ...
- MySQL学习笔记四:字符集
1.字符集就是字符和其编码的集合,查看数据库支持的字符集 show character set 2.查看服务端启动时默认的字符集 mysql> show variables like 'char ...
- MySQL学习笔记(四)—存储过程
一.概述 存储过程是数据库定义的一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句.存储过程可以避免开发人员重复的编写相同的SQL语句,而且存储过程是在MySq ...
- MySQL学习笔记(四):存储引擎的选择
一:几种常用存储引擎汇总表 二:如何选择 一句话:除非需要InnoDB 不具备的特性,并且没有其他办法替代,否则都应该优先考虑InnoDB:或者,不需要InnoDB的特性,并且其他的引擎更加合适当前情 ...
- MySql学习笔记(四) —— 数据的分组
前面介绍的聚集函数只是用来计算行数,平均数,最大值,最小值而不用检索所有数据.通过count()函数,我们可以计算生产商1003提供的产品数目,但如果我要查询所有生产商提供的商品数,这就需要进行分组查 ...
- openresty 学习笔记四:连接mysql和进行相关操作
openresty 学习笔记四:连接mysql和进行相关操作 毕竟redis是作为缓存,供程序的快速读写,虽然reidis也可以做持久化保存,但还是需要一个做数据存储的数据库.比如首次查询数据在red ...
- Mysql学习笔记(二)数据类型 补充
原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...
- mysql basic operation,mysql总结,对mysql经常使用语句的详细总结,MySQL学习笔记
mysql> select * from wifi_data where dev_id like "0023-AABBCCCCBBAA" ; 1.显示数据库列表.show d ...
随机推荐
- attribute与parameter区别(转)
文章转自http://blog.csdn.net/saygoodbyetoyou/article/details/9006001 request.getParameter取得Web客户端到web服务端 ...
- 理解JSON.stringify()高级用法
一:JSON.stringify() 该方法是把javascript对象转换成json字符串. 基本语法:JSON.stringify(value, [, replacer], [, space]) ...
- ES6生成器函数generator
ES6生成器函数generator generator是ES6新增的一个特殊函数,通过 function* 声明,函数体内通过 yield 来指明函数的暂停点,该函数返回一个迭代器,并且函数执行到 y ...
- javascript-mqtt
js client使用paho-mqtt,官网地址:http://www.eclipse.org/paho/,参考http://www.eclipse.org/paho/clients/js/官网给出 ...
- 利用shell脚本或者php移动某个文件夹下的文件到各自的日期组成的目录下
背景是这样的:网站一开始访问量比较小,大家就把所有的图片文件上传到一个目录下(比如是/data/images/).后来访问量大了,图片也多了,这样就影响读取效率.所以有个这样的需求,把这些个图片文件移 ...
- SSM+BootStrap增删改查,以及头像上传
先看界面 点击编辑之后 具体代码请往下看 一.jsp界面 <%@ page language="java" contentType="text/html; char ...
- CF915G Coprime Arrays 莫比乌斯反演、差分、前缀和
传送门 差分是真心人类智慧--完全不会 这么经典的式子肯定考虑莫比乌斯反演,不难得到\(b_k = \sum\limits_{i=1}^k \mu(i) \lfloor\frac{k}{i} \rfl ...
- POI Sax 事件驱动解析Excel2003文件
POI事件驱动解析Excel文件 package com.boguan.bte.util.excel; import java.io.FileInputStream; import java.io.I ...
- 关于Prometheus运维实践项目
关于Promethues运维实践项目 1. 什么是Prometheus运维实践项目 是什么 Prometheus,普罗米修斯,是古希腊神话中为人间带来火种的神. Prometheus运维实 ...
- webvirtmgr-重命名kvm虚拟机的名称
之前部署了Webvirtmgr平台管理kvm虚拟机,由于虚拟机在创建时名称是顺便起的,后续在虚拟机上部署了部分业务.为了便于管理,最好将虚拟机的名称重置下. 现在说下如何修改kvm中虚拟机的名称: 比 ...