要点:
ab复制
mysql
mysql集群架构流程:sql
ABB(主从复制)-->MHA(实现mysql高可用、读写分离、脚本控制vip飘逸)-->haproxy(对slave集群实现分发,负载均衡)-->keepalive(预防一台haproxy单点故障,对两台及以上的haproxy实现高可用)vim
一、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语句ide
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.indexspa
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复制:
一、A上全库备份,并恢复到B上
二、B再去 change master to
实验过程:
在master上
a.全库备份
mysqldump --all-databases -x > /opt/all.sql
b.编辑配置文件与以前相同
c.设置复制专用用户及权限
同上...
看一下master状态:
同上...
在slave上
先得到master上的全库备份,并恢复在本地
mysql < /opt/all.sql
后面就同样的