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
相关推荐
作者:高鹏(网名八怪),《深入理解MySQL主从原理32讲》系列文的作者。2008年开始至今一直从事Oracle/MySQL相关工作,现任易极付高级DBA,Oracle Ocm。有丰富的数据库性能调优,故障诊断经验,并且对MySQL源码有...
MySQL主从数据库配置是数据库高可用性和负载均衡的重要实践,它允许数据从一个主数据库(Master)异步复制到一个或多个从数据库(Slave)。这种配置对于处理大规模数据操作和保证数据一致性至关重要。 主从复制的...
MySQL主从数据库分离是数据库高可用性和负载均衡的一种常见实现方式。它主要通过复制技术,使得数据在主库(Master)上写入后,能够自动地同步到从库(Slave)上,以此来保证数据的一致性,并分散读取操作的压力,...
在开始讨论MySQL主从复制的原理和实战之前,我们需要了解其重要性。主从复制的主要作用是保证数据安全性和服务的持续运行。当主数据库发生故障时,从数据库可以接管业务,保证服务的连续性。同时,通过将数据复制到...
MySQL主从数据库配置是数据库高可用性和负载均衡的重要实践,主要应用于解决数据库性能瓶颈和确保数据安全性。在本文档中,我们将深入理解MySQL主从复制的原理、优势以及配置步骤。 1. **主从复制原理**: MySQL的...
#### 一、MySQL主从数据库搭建原理 MySQL 主从复制是一种非常重要的机制,主要用于实现数据的冗余备份、负载均衡以及提高系统的可用性。其核心思想是通过将主数据库(Master)上的数据变化同步到一个或多个从数据库...
MySQL主从数据库是一种常见的数据库高可用性和负载...以上是关于MySQL主从数据库实现原理、安装配置及常见问题的详细介绍。通过理解这些知识点,可以有效地构建和管理MySQL主从复制环境,提升系统的稳定性和扩展性。
MySQL主从复制是一种重要的数据库高可用性和数据冗余策略,它允许数据从一个主服务器(Master)实时或近实时地复制到一个或多个从服务器(Slave)。这种技术在分布式系统、高并发应用以及数据安全等领域有着广泛的...
### MySQL主从数据库服务器设置详解 #### 一、MySQL主从复制原理简介 MySQL的主从复制机制是一种数据同步方式,允许将一个MySQL服务器(主服务器)的数据自动复制到一个或多个其他MySQL服务器(从服务器)。这种...
Mysql主从复制是一种提高数据库性能和可用性的技术,它可以实现在数据库中实现读写分离,提高数据库的整体性能和可用性。在本文中,我们将对Mysql主从复制的原理和实践进行详细的介绍。 Mysql主从复制的原理 Mysql...
《MySQL数据库原理及应用(第2版)(微课版)》是一本深入浅出介绍MySQL技术的教材,配合配套教案,旨在帮助学生和学习者全面理解和掌握数据库设计与管理的核心概念。 该教程可能涵盖以下关键知识点: 1. **数据库...
配置MySQL主从复制的具体步骤包括: 1. 在主服务器上配置二进制日志、设置`server-id`,并创建复制用户。 2. 使用`mysqldump`导出主服务器的全部数据,并传输到从服务器。 3. 在从服务器上配置相应的`server-id`,...
内容概要:本文详细介绍了MySQL主从复制的原理,包括基于二进制日志的数据同步流程。文章还涵盖了三种不同的复制方式:异步复制、半同步复制和同步复制及其各自的特性。针对MySQL主从复制的实际配置方法进行了逐步...
MySQL 主从同步配置是指将 MySQL 数据库的数据从一台服务器(主服务器)同步到另一台服务器(从服务器)的过程。这种配置可以实现数据的高可用性和灾难恢复,提高系统的整体性能和安全性。 二、 主从同步配置的基本...
MySQL 主从复制的原理是基于 Binlog日志解析和回放实现的。主库将其所有的更新操作记录到 Binlog日志文件中,而从库则从主库获取 Binlog日志文件,并将其回放到从库中,从而实现数据的同步。 操作流程 ### 1. 环境...
在数据库原理部分,实训将涵盖关系数据库模型的基本概念,如ER(实体关系)模型,以及如何使用SQL语言创建、修改和删除数据库对象,如表、视图、索引等。还将涉及数据类型、约束、触发器、存储过程和函数等。理解...
### MySQL主从复制架构原理与配置实践 #### 一、MySQL主从复制概述 MySQL主从复制是一种常用的技术手段,用于提高数据库系统的可用性、扩展性和数据安全性。它通过将一个MySQL实例(主服务器)的数据实时复制到一...