数据库 之 Mysql复制概念介绍

Master/Slave

Master: write/read,写操作都在主节点上操作

Slaves: read,读操作都是从节点这边发出

为什么要复制?

冗余:promte(提升为主),异地灾备,可以通过人工或者工具程序(MHA)实现

扩展:转移一部分“读”请求;

支援安全的备份操作;

测试需要;

主/从架构实现:

在主节点上启用二进制日志,从节点启动连接线程,请求主节点把这个事件发给自己一份,从节点上有一个线程叫IO Thread,主节点上启用dump thread,IO Thread从节点将接受到的日志存储到中继日志,从服务器上的SQL THread负责从中继日志里生成一份数据。这样的数据同步方式是异步。主服务器负责写操作,从服务器负责读操作。

主从有可能导致主从数据不一致。如主服务多线程进程,从服务区是单线程进程,有可能导致主从数据不一致,从服务器的数据可能会落后于主服务器,这个问题是不可避免的,只能尽早发现,将不正确的数据手动更改,如果数据差别很大,手动恢复很难,可以在主服务器上做备份,把数据直接回复到从服务器上。

主服务器存到二进制log,存到从服务器上是异步操作的。传输是单向的。但是这里有个问题,如果写操作超出主服务器的性能,解决方法,使用双主模型

主从复制的三种形式:同步复制,异步复制,半同步复制

同步复制:

双主模型:写操作都在本地写,同步给另一个节点,放到relay中。

主服务器都要启动中继日志和二进制日志,所有发给本节点的写操作,都要记录到二进制日志中,并通过dump thread发给对端主服务器,对端主服务器通过io thread将收到的数据存储到中继日志中,并依靠sql thread实现重放。主节点实现了冗余。每个节点都可以读和写操作。这种操作可以降低读请求,每个服务器负载一半的请求,但是写操作的请求数量是一样的,因为,双主的服务器都要写入一份数据。

利用中间件的读写分离器实现请求读写分离,中间件可以利用keepalive实现冗余。但是有了双主模型,就不需要读写分离,只需要用haproxy或者nginx或者lvs来实现请求的四层调度将请求调度到不同服务器上即可。

mysql主从复制弊端可能运行一段时间后,根据业务逻辑的不一样,可能导致主从数据不一致,导致得到的数据不一致。该情况在数据要求强一致的情况下是不允许存在的。

在主服务器上,操作是多线程并行的,但是记录到二进制文件中是串行记录,从服务器是单线程运行获取数据,这样导致从服务器拉取数据的速度落后于主服务器,导致了数据的差异,长此以往会导致数据严重不一致。如果这里设置读写分离,可能导致从服务器上读出的数据是错误的。双主模型同样有这个问题。主从数据不一致,建议解决办法是手动修改数据。如果数据差别太大,将从服务器关闭,在主服务器上做备份,恢复到从服务器上。

异步复制:

一主多从;

一从一主;

级联复制;一主复制给一从,同时,这个从服务器又是其他服务器的主,其他从服务器到这个中继服务器复制数据,级联的作用是降低主服务器的压力。中间的这个从服务器要启用二进制日志和中继日志,同时,中间这台从服务器仅起到过渡的作用,不需要保存数据,因此将block hole引擎用于这个中间从服务器上,使得不会产生数据保存,但是中继日志和二进制日志都有正常保存,起到过渡的效果。

循环复制;多主模式下,采用循环复制,但是链条更长,可能导致数据落后严重。

双主复制;

半同步复制:

一从多主模型:每个主服务器提供不同的数据库,master只保证slaves中的一个操作成功,就返回,其他slave不管。这个功能,是由google为MYSQL引入的。

原文地址:http://blog.51cto.com/ghbsunny/2064628

时间: 2024-10-17 10:27:58

数据库 之 Mysql复制概念介绍的相关文章

数据库 之 Mysql存储引擎介绍

1  存储引擎概念介绍 存储引擎其实就是如何实现存储数据,如何为存储的数据建立索引以及如何更新,查询数据等技术实现的方法.数据库中的存储引擎其实是对使用了该引擎的表进行某种设置,数据库中的表设定了什么存储引擎,那么该表在数据存储方式.数据更新方式.数据查询性能以及是否支持索引等方面就会有不同的"效果". 通过选择不同的存储引擎,获得额外的速度或者功能,从而改善服务器的应用的整体功能.例如,如果你在研究大量的临时数据,你也许需要使用内存MySQL存储引擎.内存存储引擎能够在内存中存储所有

双主模型、SSL、percona-toolkit、MySQL复制概念深入

[减轻复制压力]复制过滤器,指定需要复制的白名单,或者需要忽略的黑名单 [[email protected] ~]# cd /etc/ [[email protected] etc]# cp my.cnf{,.master} [[email protected] etc]# ll my.cnf* -rw-r--r--. 1 root root 4686 10月 13 04:43 my.cnf -rw-r--r--. 1 root root 4686 10月 14 20:00 my.cnf.mas

【数据库】MySQL 复制表结构

介绍 有时候我们需要原封不动的复制一张表的表结构来生成一张新表,MYSQL提供了两种便捷的方法. 例: CREATE TABLE tb_base( id INT NOT NULL PRIMARY KEY, name VARCHAR(10), KEY ix_name (name)) ENGINE='MyISAM',CHARSET=utf8,COMMENT 'a' ; insert into tb_base() values(1,'a'),(2,'b'); 一.LIKE方法 like方法能一模一样的

数据库 之 Mysql复制过滤器

复制过滤器:仅复制有限一个或几个数据库相关的数据,而非所有:由复制过滤器进行: 有两种过滤方式,在主服务器上进行过滤或者是在从服务器上进行过滤 (1) 主服务器上过滤 实现有选择的复制,只复制主节点上的一部分,从源头上选择几个库主节点过滤,写入二进制日志的时候有选择,影响其他库的时间点还原 主服务器仅向二进制日志中记录有关特定数据库相关的写操作: 问题:其它库的time-point recovery将无从实现,影响其他库的时间点还原: 主节点上使用以下的选项,以下是黑白名单,同一库二者选其一即可

MySQL数据库复制概念及数据库架构不断扩展方案

MySQL Replication 系统扩展的方式: scale up:向上扩展,垂直扩展    使用更高性能的硬件来扩展 scale out:向外扩展,水平扩展    提供更多的节点来提供更多的访问需求 复制:水平扩展的一种方案 如果构建一个httpd负载均衡集群会面临的问题: 当用户请求到达时,负载均衡器给调度到后端的各realserver上,如果web服务器允许用户上传数据,用户上传数据到第一个节点上,而后他又访问被调度到第三个节点上来,则数据就访问不到,如果要解决此问题,需要如何操作?使

mysql数据引擎的概念介绍

什么是数据库引擎?每种数据库的数据格式,内部实现机制都是不同的,要利用一种开发工具访问一种数据库,就必须通过一种中介程序,这种开发工具与数据库之间的中介程序就叫数据库引擎. 如果你是个赛车手并且按一下按钮就能够立即更换引擎而不需要把车开到车库里去换,那会是怎么感觉呢?MySQL数据库为开发人员所做的就好像是按按钮换引擎:它让你选择数据库引擎,并给你一条简单的途径来切换它. MySQL 的自带引擎肯定是够用了,但是在有些情况下,其他的引擎可能要比手头所用更适合完成任务.如果愿意的话,你甚至可以使用

MySQL复制介绍及搭建

MySQL复制介绍 MySQL复制就是一台MySQL服务器(slave)从另一台MySQL服务器(master)进行日志的复制然后再解析日志并应用到自身,类似Oracle中的Data Guard. MySQL复制有那些好处: 第一是解决宕机带来的数据不一致,因为MySQL复制可以实时备份数据: 第二点是减轻数据库服务器的压力,多台服务器的性能一般比单台要好.但是MySQL复制不适合大数据量,大数据量推荐使用集群. MySQL复制过程分成三步: master将改变记录到二进制日志(binary l

数据库之MySQL的介绍与使用20180703

/*******************************************************************************************/ 一.mysql的安装 0.下载 MySQL数据库版本相对比较繁杂.常见的有:Community社区版.Enterprise企业版. Community版是开源免费的,这也是我们通常用的MySQL的版本.可以满足绝大多数用户需求. Enterprise版,官方指出提供30天免费试用期.可进一步划分为MySQL标准

General MYSQL 复制.frm数据库文件后查看表提示表不存在 Error code: 1146

现象: 将含.frm的源数据库文件夹复制到另一Mysql环境下后,打开Mysql,查看数据库和表都无问题,但在打开数据表查看表结构和表数据时提示error code: 1146,要访问的数据表"doesn't exist" 解决: 除了复制.frm的源数据库文件夹外,还需停止mysql服务(无论是拷贝源还是拷贝目的地,mysql服务最好都停掉),然后再复制与源数据库文件夹同目录下的以下3个文件粘贴或覆盖到目的文件中,然后再启动Mysql服务即可. 拷贝以上3个文件需以停止Mysql服务