mysql进阶(二)mysql复制架构

mysql复制的优点:
    1、数据分布
    2、数据备份
    3、负载均衡
    4、提示高可用性

mysql/slave

master/slave较为简单,master负责响应客户端的写请求,slave负责响应客户端的读请求

实现原理:

slave在启动两个线程,i/o线程和sql线程,master启动dump线程,每当master的数据发生改变时,master就会将对应的SQL语句存储在二进制日志文件中,slave的通过i/o线程连接master的dump线程并每个一段时间就会向master询问二进制文件是否发生改变,如果二进制文件发生改变slave的i/o线程就会去读取二进制文件中发生改变的内容存储在本地的中继日志中并通过sql线程对中继日志的内容进行回放,并记录本次读取到的二进制文件位置,完成复制。

存在问题:

1、master压力过大

2、master宕机之后将无法完成用户写请求

3、节点数据可能不一致

4、默认使用异步复制方式

5、延迟

延迟的原因:

1、 slave节点过多,master会为每个slave打开一个dump线程

2、 并发写请求操作,由于mysql支持并发请求,如果多个写请求同时到达,将会将这些写操作都记录在二进制日志中,但在写入二进制文件时只能通过串行写入

3、 slave通过i/o线程读取二进制文件并写入中继日志是也只能通过串行写入

master/master

master/master的出现正好解决了master/slave中如果master宕机之后用户的写请求无法完成的问题,但同时引入了比master/slave更多的问题,实现原理基本和master/slave相同,只需要在两台master中分别启动二进制日志和中继日志即可

注意问题:

1、 避免主键重复

2、 server-id全局唯一

存在问题:

1、 经常出现两台master数据不一致(存在巨大风险)

2、 主键冲突

3、 延迟

级联复制

在有些应用场景中,可能读写压力差别比较大,读压力特别的大,一个Master可能需要上10台甚至更多的Slave才能够支撑注读的压力。这时候,Master就会比较吃力了,因为仅仅连上来的SlaveIO线程就比较多了,这样写的压力稍微大一点的时候,Master端因为复制就会消耗较多的资源,很容易造成复制的延时。这时候我们就可以利用MySQL可以在Slave端记录复制所产生变更的BinaryLog信息的功能,也就是打开log_slave_update选项。然后,通过二级(或者是更多级别)复制来减少Master端因为复制所带来的压力。

这种多层级联复制的架构,很容易就解决了Master端因为附属Slave太多而成为瓶颈的风险。

但下面阶级过多同一个变更传到最底层的Slave所需要经过的MySQL也会更多,同样可能造成延时较长的风险

存在问题:

1、可能导致延迟更为严重

2、借助于BlackHole存储引擎(黑洞引擎)

半同步复制

mysql复制方式:

异步:将二进制日志发送给slave不等待slave回应直接返回给客户端,数据储存成功

同步:将二进制日志发送给slave等待所有slave回应执行成功后返回给客户端,数据储存成功

半同步:将二进制日志发送给slave等待一个slave回应执行成功后返回给客户端,数据储存成功

时间: 2024-11-08 05:00:11

mysql进阶(二)mysql复制架构的相关文章

mysql分析(二)mysql语法分析

一.mysqld中对于SQL语句的分析客户端和服务器之间交互的时候,客户端发送的同样是字符串形式的查询和执行命令,返回的特定格式的数据库内容(?).这个过程就需要在服务器端进行实时指令的翻译,生成特定的查询指令.在sqlite的实现中,sqlite定义了一个专用的虚拟机环境,和通常的真正的汇编指令相同,它有自己的指令集,有特定的指令格式和操作数,有自己的寄存器和内存内容,这个虚拟环境叫做vdbe(virtual database environment).这一点其实并不奇怪,但是也并不是那么简单

MySQL 5.7的复制架构,在有异步复制、半同步、增强半同步、MGR等的生产中,该如何选择?

一.生产环境中: 几种复制场景都有存在的价值.下面分别描述一下: 从成熟度上来选择,推荐:异步复制(GTID+ROW) 从数据安全及更高性能上选择:增强半同步 (在这个结构下也可以把innodb_flush_log_trx_commit调整到非1, 从而获得更好的性能) 对于主从切换控制觉的不好管理,又对数据一致性要求特别高的场景,可以使用MGR 二.理由: 异步复制,相对来讲非常成熟,对于环境运维也比较容易上手 增强半同步复制,可以安全的保证数据传输到从库上,对于单节点的配置上不用要求太严格,

mysql进阶(二十五)解决数据库NO CONNECTION问题

解决数据库NO CONNECTION问题 前言 数据库版本类型:Mysql5.5 在应用程序连接数据库时,提示数据库连接失败.打开数据库查看,显示如下. 究其原因,是因为mysql服务出现了问题,重启mysql服务,数据库成功连接. 参考文献 1.http://jingyan.baidu.com/album/0a52e3f4158211bf62ed72e6.html?picindex=1 美文美图

MySQL学习(二)——MySQL多表

分页操作:使用limit(参数1,参数2) 起始位置(参数1)=(第几页-1)*每页显示的条数(参数2) 1.分类表 create table category( cid varchar(32) primary key, cname varchar(100) ); 2.商品表 create table product( pid varchar(32) primary key, pname varchar(40), price double, category_id varchar(32) );

MySQL 5.7 并行复制实现原理与调优

MySQL 5.7并行复制时代 众所周知,MySQL的复制延迟是一直被诟病的问题之一,然而在Inside君之前的两篇博客中(1,2)中都已经提到了MySQL 5.7版本已经支持“真正”的并行复制功能,官方称为为enhanced multi-threaded slave(简称MTS),因此复制延迟问题已经得到了极大的改进,甚至在Inside君所在的网易电商应用中已经完全消除了之前延迟长达几小时的问题.然而,Inside君发现还是有很部分小伙伴不了解这个足以载入史册的“伟大”的特性,故作分享.总之,

mysql进阶简单解析

mysql进阶 1.mysql配置文件 mysql的配置文件为/etc/my.cnf配置文件查找次序:若在多个配置文件中均有设定,则最后找到的最终生效 /etc/my.cnf --> /etc/mysql/my.cnf --> --default-extra-file=/PATH/TO/CONF_FI LE --> ~/.my.cnf mysql常用配置文件参数: 参数 说明 port 设置监听端口 socket=/tmp/mysql.sock 指定套接字文件位置 basedir=/us

搭建MySQL的主从、半同步、主主复制架构

复制其最终目的是让一台服务器的数据和另外的服务器的数据保持同步,已达到数据冗余或者服务的负载均衡.一台主服务器可以连接多台从服务器,并且从服务器也可以反过来作为主服务器.主从服务器可以位于不同的网络拓扑中,由于mysql的强大复制功能,其复制目标可以是所有的数据库,也可以是某些数据库,甚至是某个数据库中的某些表进行复制. MySQL支持的两种复制方案:基于语句复制,基于行复制基于语句复制基于行复制,这两种复制方式都是通过记录主服务器的二进制日志中任何有可能导致数据库内数据发生改变的SQL语句到中

MySQL的复制架构与优化

###########原理###########1.主服务器将更新的数据的sql语句(例如,insert,update,delete等)写入到  二进制文件中(由log-bin选项开启).此二进制文件由一个索引文件跟踪维护.  2.从服务器连接(使用I/O线程连接)主服务器,将自己最后一次更新的位置通知  主服务器.然后,主服务器将把从'从服务器'得知的位置开始之后的所有更新发  送给'从服务器'(使用Binlog Dump线程来发送),而后'从服务器'再次使用I/O  线程读取由Binlog

转载-Mysql主主复制架构配置

Mysql主主复制架构配置 转载:原始出处 http://luoweiro.blog.51cto.com/2186161/658550MySQL主主复制结构区别于主从复制结构.在主主复制结构中,两台服务器的任何一台上面的数据库存发生了改变都会同步到另一台服务器上,这样两台服务器互为主从,并且都能向外提供服务. 这就比使用主从复制具有更好的性能.接下来我将使用两个同样的服务器来实现这个效果:具体Mysql的安装我就省略了,在上一篇的Mysql的主从架构的配置中有详细介绍server1_mysql:

实现mysql主主复制架构

实验环境,假设公司想要对一台运行了一段时间的mysql服务器,做一个主主复制架构,以提升数据库的读写能力. 老服务器用M0表示 新服务器用M1表示 一,对M0服务器做一个全备份 mysqldump -A -F -E -R --single-transaction --master-data=1 --flush-privileges --triggers --hex-blob > /mysqlbackup/all.sql 命令解析: -A:备份所有数据库,含create database语句 -F