`
youyu4
  • 浏览: 426614 次
社区版块
存档分类
最新评论

MySQL主从数据库原理及实现

 
阅读更多

MySQL主从数据库原理及实现

 

MySQL的主从同步架构是当前比较流行的一种数据库架构,利用MySQL的主从配置,可以实现读写分离,减轻主数据库的访问压力,提升网站性能。

 

 

主从原理:


 

1. Master记录二进制日志,在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。

 

2. slave开始一个I/O线程,该线程在Master上建立一个普通链接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。

 

3. SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。

 

注意:

在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。

 

 

主从配置

主机A: 192.168.1.100

从机B:192.168.1.101

 

1、先登录主机 A

mysql>GRANT REPLICATION SLAVE ON *.* TO ‘backup’@’192.168.1.101‘ IDENTIFIED BY ‘123456’;

赋予从机权限,有多台丛机,就执行多次

backup是授权账号,123456是密码

 

2、 打开主机A的my.cnf,输入

server-id               = 1    #主机标示,整数

log_bin                 = /var/log/mysql/mysql-bin.log   #确保此文件可写

read-only              =0  #主机,读写都可以

binlog-do-db         =test   #需要备份数据,多个写多行

binlog-ignore-db    =mysql #不需要备份的数据库,多个写多行

 

3、打开从机B的my.cnf,输入

server-id               = 2

log_bin                 = /var/log/mysql/mysql-bin.log

master-host     =192.168.1.100

master-user     =backup

master-pass     =123456

master-port     =3306

master-connect-retry=60 #如果从服务器发现主服务器断掉,重新连接的时间差(秒)

replicate-do-db =test #只复制某个库

replicate-ignore-db=mysql #不复制某个库

 

4、同步数据库

不用太费事,只把主从库都启动即可自动同步,如果不嫌麻烦的话可以把主库的内容导出成SQL,然后在从库中运行一遍

 

5、先重启主机A的mysql,再重启从机B的mysql

 

6、验证

在主机A中,mysql>show master status\G;

在从机B中,mysql>show slave status\G;



 

Slave_IO_Running 和 Slave_SQL_Running, 必须都为 Yes 

 

 

 

添加新slave服务器

假如master已经运行很久了,想对新安装的slave进行数据同步,甚至它没有master的数据。

此时,有几种方法可以使slave从另一个服务开始,例如,从master拷贝数据,从另一个slave克隆,从最近的备份开始一个slave。Slave与master同步时,需要三样东西:

1. master的某个时刻的数据快照;

2. master当前的日志文件、以及生成快照时的字节偏移。这两个值可以叫做日志文件坐标(log file coordinate),因为它们确定了一个二进制日志的位置,你可以用SHOW MASTER STATUS命令找到日志文件的坐标;

3. master的二进制日志文件。

 

 

主从运维

 

1. 确保从库的两个线程都是正常运行的

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

 如可监控和报警:

编写一shell脚本,用nagios监控slave的两个yes(Slave_IO及Slave_SQL进程),如发现只有一个或零个yes,就表明主从有问题了,发短信警报吧。

 

 

2. 出现“log event entry exceeded max_allowed_pack”错误

如果在应用中使用大的BLOB列或CLOB列或者长字符串,那么在从服务器上回复时,可能会出现“log event entry exceeded max_allowed_pack”的错误,这是因为含有大文本的记录无法通过网络进行传输而导致的。

show variables LIKE '%max_all%'

Variable_name      Value   
------------------ ------- 
max_allowed_packet 1048576 

(1 row(s) affected)

 解决方法:

同时在my.ini或my.cnf文件里设置max_allowed_packet=16M,数据库重启之后该参数将有效

set @@global.max_allowed_packet=16777216;

 

 

 3. 多主复制时自增长冲突

大多数情况下使用一台主服务器对一台或者多台从服务器,但是在某些情况下可能会存在多个服务器配置为复制主服务器,使用auto_increment时应采取特殊步骤以防止键值冲突,否则插入时多个主服务器会试图使用相同的auto_increment值

 

解决方法:

在这里我们在A,B上加入参数,以实现奇偶插入 

 

A:my.cnf上加入参数 

auto_increment_offset = 1 

auto_increment_increment = 2 

这样A的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID了 

 

B:my.cnf上加入参数 

auto_increment_offset = 2 

auto_increment_increment = 2 

这样B的auto_increment字段产生的数值是:2, 4, 6, 8, …等偶数ID了

 

提示:

一般不建议使用双主或多主,因为这样会带来意想不到的冲突状况,就像SQLSERVER的对等复制,虽然有很多冲突检测措施。但是有时候冲突是不可预料的,出现冲突DBA要排查,维护成本较高,我们生产环境里是没有使用双主和多主,主要使用的是一主多从或一主一从

 

 

 

参考:

http://blog.csdn.net/hguisu/article/details/7325124/

http://369369.blog.51cto.com/319630/790921/

https://my.oschina.net/u/730579/blog/632790

http://www.cnblogs.com/xiao-yu/archive/2011/06/14/2080842.html

  • 大小: 120.6 KB
  • 大小: 123.2 KB
分享到:
评论

相关推荐

    《深入理解MySQL主从原理32讲》推荐篇

    作者:高鹏(网名八怪),《深入理解MySQL主从原理32讲》系列文的作者。2008年开始至今一直从事Oracle/MySQL相关工作,现任易极付高级DBA,Oracle Ocm。有丰富的数据库性能调优,故障诊断经验,并且对MySQL源码有...

    Mysql主从数据库搭建.docx

    Mysql主从数据库搭建 原理与详细步骤,留备自用,按步骤搭建即可,主从数据库的配置,包含出现问题的两种解决方式。

    Mysql主从数据库分离原理及配置方法资料整理

    NULL 博文链接:https://soartju.iteye.com/blog/870592

    mysql主从数据库的一些资料

    mysql主从数据库的一些资料 包含master/slave实现原理,安装,以及在使用过程中遇到的一些问题

    MySql 数据库主从机制原理说明及配置步骤.docx

    MySql 数据库主从机制原理说明及配置步骤, MySQL主从的优点主要包含以下三个方面: 主库出现问题,可以快速切换到从库提供服务; 可以在从库上执行查询操作,从主库中更新; 实现读写分离可以在从库中执行备份,...

    解读mysql主从配置及其原理分析

    在windows下配置的,后面会在Linux下配置进行测试,需要配置mysql数据库同步的朋友可以参考下

    MySQL主从数据库搭建方法详解

    主要介绍了MySQL主从数据库搭建方法,较为详细的分析了MySQL主从数据库搭建的原理、步骤与具体操作技巧,需要的朋友可以参考下

    MySQL主从原理及配置详解

    MySQL主从配置及原理,供大家参考,具体内容如下 一、环境选择: 1.Centos 6.5 2.MySQL 5.7 二、什么是MySQL主从复制 MySQL主从复制是其最重要的功能之一。主从复制是指一台服务器充当主数据库服务器,另一台或多台...

    Mysql主从同步的实现原理

    1、什么是mysql主从同步? 当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库。 2、主从同步有什么好处? 水平扩展数据库的负载能力。 容错,高可用。Failover(失败切换)/High Availability ...

    MySQL主从复制原理以及需要注意的地方

    最近在写Mycat专题,由于不少小伙伴最近要出去面试,问我能不能简单写下MySQL的主从复制原理和注意事项,因为在之前的面试中被问到了这些问题。我:可以啊,安排上了!! 主从复制原理 (1) Master 将数据改变记录到...

    MySQL主从复制与读写分离原理及用法详解

    主要介绍了MySQL主从复制与读写分离原理及用法,结合实例形式详细分析了mysql数据库主从复制、读写分离基本概念、原理、用法及操作注意事项,需要的朋友可以参考下

    深入探索MySQL主从架构与读写分离:提升数据安全和性能的实战指南

    本文从实战角度出发,深入探讨了MySQL主从架构及读写分离的搭建与应用。首先介绍了MySQL在大型互联网环境下面临的数据量大和安全性高的挑战,强调了主从架构在性能提升和数据安全方面的重要性。详细说明了如何配置...

    MySQL主从复制的原理及配置方法(比较详细)

    MySQL 的数据库的高可用性的架构大概有以下几种:集群,读写分离,主备。而后面两种都是通过复制来实现的。下面将简单介绍复制的原理及配置,以及一些常见的问题

    MySQL 主从复制原理与实践详解

    本文实例讲述了MySQL 主从复制原理与实践。分享给大家供大家参考,具体如下: 简介 MySQL 的主从复制又叫 Replication、AB 复制。至少需要两个 MySQL 服务(可以是同一台机器,也可以是不同机器之间进行)。 比如A...

    深入解析半同步与异步的MySQL主从复制配置

    一、MySQL主从复制原理 这里我以MySQL5.5为例来说一下MySQL的主从复制的原理: 首先由备节点的I/O线程负责向主节点请求数据,主节点验证通过以后会由dump线程把数据发送给备用节点。备用节点的I/O线程收到资源后会...

    MySQL主从同步原理介绍

    概述 Mysql的Replication(复制)是一个异步的复制过程,从一...要实现 MySQL 的 Replication ,首先必须打开 Master 端的BinaryLog(mysql-bin.xxxxxx)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获

    MySQL进阶-高可用、分布式、主从复制原理、备份恢复

    MySQL进阶涉及多个主题,其中高可用性、分布式系统、主从复制原理和备份恢复是核心部分。以下是关于这些主题的详细解释: 高可用性 (High Availability) 定义:确保在任何给定的时间点,服务都是可用的。 策略: ...

    Mysql主从复制作用和工作原理详解

    主要介绍了Mysql主从复制作用和工作原理详解,主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics