- 浏览: 7935240 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
先来看下MYSQL异步复制的概念:
异步复制:MySQL本身支持单向的、异步的复制。异步复制意味着在把数据从一台机器拷贝到另一台机器时有一个延时 – 最重要的是这意味着当应用系统的事务提交已经确认时数据并不能在同一时刻拷贝/应用到从机。通常这个延时是由网络带宽、资源可用性和系统负载决定的。然而,使用正确的组件并且调优,复制能做到接近瞬时完成。
当主库有更新的时候,主库会把更新操作的SQL写入二进制日志(Bin log),并维护一个二进制日志文件的索引,以便于日志文件轮回(Rotate)。在从库启动异步复制的时候,从库会开启两个I/O线程,其中一个线程连接主库,要求主库把二进制日志的变化部分传给从库,并把传回的日志写入本地磁盘。另一个线程则负责读取本地写入的二进制日志,并在本地执行,以反映出这种变化。较老的版本在复制的时候只启用一个I/O线程,实现这两部分的功能。
同步复制:同步复制可以定义为数据在同一时刻被提交到一台或多台机器,通常这是通过众所周知的“两阶段提交”做到的。虽然这确实给你在多系统中保持一致性,但也由于增加了额外的消息交换而造成性能下降。
使用MyISAM或者InnoDB存储引擎的MySQL本身并不支持同步复制,然而有些技术,例如分布式复制块设备(简称DRBD),可以在下层的文件系统提供同步复制,允许第二个MySQL服务器在主服务器丢失的情况下接管(使用第二服务器的复本)。要了解更多信息,
MYSQL 5。5开始,支持半自动复制。之前版本的MySQL Replication都是异步(asynchronous)的,主库在执行完一些事务后,是不会管备库的进度的。如果备库不幸落后,而更不幸的是主库此时又出现Crash(例如宕机),这时备库中的数据就是不完整的。简而言之,在主库发生故障的时候,我们无法使用备库来继续提供数据一致的服务了。
Semisynchronous Replication则一定程度上保证提交的事务已经传给了至少一个备库。
Semi synchronous中,仅仅保证事务的已经传递到备库上,但是并不确保已经在备库上执行完成了。
此外,还有一种情况会导致主备数据不一致。在某个session中,主库上提交一个事务后,会等待事务传递给至少一个备库,如果在这个等待过程中主库Crash,那么也可能备库和主库不一致,这是很致命的。(在主库恢复后,可以通过参数Rpl_semi_sync_master_no_tx观察)
如果主备网络故障或者备库挂了,主库在事务提交后等待10秒(rpl_semi_sync_master_timeout的默认值)后,就会继续。这时,主库就会变回原来的异步状态。
MySQL在加载并开启Semi-sync插件后,每一个事务需等待备库接收日志后才返回给客户端。如果做的是小事务,两台主机的延迟又较小,则Semi-sync可以实现在性能很小损失的情况下的零数据丢失。
主机Crash时的处理
备库Crash时,主库会在某次等待超时后,关闭Semi-sync的特性,降级为普通的异步复制,这种情况比较简单。
主库Crash后,那么可能存在一些事务已经在主库Commit,但是还没有传给任何备库,我们姑且称这类事务为"墙头事务"。"墙头事务"都是没有返回给客户端的,所以发起事务的客户端并不知道这个事务是否已经完成。
这时,如果客户端不做切换,只是等Crash的主库恢复后,继续在主库进行操作,客户端会发现前面的"墙头事务"都已经完成,可以继续进行后续的业务处理;另一种情况,如果客户端Failover到备库上,客户端会发现前面的“墙头事务”都没有成功,则需要重新做这些事务,然后继续进行后续的业务处理。
可以做多个备库,任何一个备库接收完成日志后,主库就可以返回给客户端了。
网络传输在并发线程较多时,一次可能传输很多日志,事务的平均延迟会降低。
"墙头事务"在墙头上的时候,是可以被读取的,但是这些事务在上面Failover的场景下,是被认为没有完成的。
默认情况下MySQL的复制是异步的,Master上所有的更新操作写入Binlog之后并不确保所有的更新都被复制到Slave之上。异步操作虽然效率高,但是在Master/Slave出现问题的时候,存在很高数据不同步的风险,甚至可能丢失数据。
MySQL5.5引入半同步复制功能的目的是为了保证在master出问题的时候,至少有一台Slave的数据是完整的。在超时的情况下也可以临时转入异步复制,保障业务的正常使用,直到一台salve追赶上之后,继续切换到半同步模式。
Master:
INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;
SET GLOBAL rpl_semi_sync_master_enabled=1;
SET GLOBAL rpl_semi_sync_master_timeout=1000; (1s, default 10s)
Slave:
INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so’;
SET GLOBAL rpl_semi_sync_slave_enabled=1;
复制心跳(用户检测复制是否中断)
MySQL5.5提供的新的配置master_heartbeat_period,能够在复制停止工作和出现网络中断的时候帮助我们迅速发现问题。
启用方法:
STOP SLAVE;
CHANGE MASTER TO master_heartbeat_period= milliseconds;
START SLAVE;
Slave自动恢复同步
在MySQL5.5版本之前,MySQL Slave实例在异常终止服务之后,可能导致复制中断,并且relay binlog可能损坏,在MySQL再次启动之后并不能正常恢复复制。在MySQL5.5中这一问题得到了解决,MySQL可以自行丢弃顺坏的而未处理的数据,重新从master上获取源数据,进而回复复制。
跳过指定复制事件
在多Master或环形复制的情况下,处于复制链条中间的服务器异常,可以通过
CHANGE MASTER TO MASTER_HOST=xxx IGNORE_SERVER_IDS=y
跳过出问题的MySQL实例。
自动转换字段类型
MySQL5.1在基于语句的复制下,支持部分的字段转换,但是行级的会报错。MySQL5.5语句和行级复制都已支持。还可以通过 SLAVE_TYPE_CONVERSIONS 控制转换的方向。
异步复制:MySQL本身支持单向的、异步的复制。异步复制意味着在把数据从一台机器拷贝到另一台机器时有一个延时 – 最重要的是这意味着当应用系统的事务提交已经确认时数据并不能在同一时刻拷贝/应用到从机。通常这个延时是由网络带宽、资源可用性和系统负载决定的。然而,使用正确的组件并且调优,复制能做到接近瞬时完成。
当主库有更新的时候,主库会把更新操作的SQL写入二进制日志(Bin log),并维护一个二进制日志文件的索引,以便于日志文件轮回(Rotate)。在从库启动异步复制的时候,从库会开启两个I/O线程,其中一个线程连接主库,要求主库把二进制日志的变化部分传给从库,并把传回的日志写入本地磁盘。另一个线程则负责读取本地写入的二进制日志,并在本地执行,以反映出这种变化。较老的版本在复制的时候只启用一个I/O线程,实现这两部分的功能。
同步复制:同步复制可以定义为数据在同一时刻被提交到一台或多台机器,通常这是通过众所周知的“两阶段提交”做到的。虽然这确实给你在多系统中保持一致性,但也由于增加了额外的消息交换而造成性能下降。
使用MyISAM或者InnoDB存储引擎的MySQL本身并不支持同步复制,然而有些技术,例如分布式复制块设备(简称DRBD),可以在下层的文件系统提供同步复制,允许第二个MySQL服务器在主服务器丢失的情况下接管(使用第二服务器的复本)。要了解更多信息,
MYSQL 5。5开始,支持半自动复制。之前版本的MySQL Replication都是异步(asynchronous)的,主库在执行完一些事务后,是不会管备库的进度的。如果备库不幸落后,而更不幸的是主库此时又出现Crash(例如宕机),这时备库中的数据就是不完整的。简而言之,在主库发生故障的时候,我们无法使用备库来继续提供数据一致的服务了。
Semisynchronous Replication则一定程度上保证提交的事务已经传给了至少一个备库。
Semi synchronous中,仅仅保证事务的已经传递到备库上,但是并不确保已经在备库上执行完成了。
此外,还有一种情况会导致主备数据不一致。在某个session中,主库上提交一个事务后,会等待事务传递给至少一个备库,如果在这个等待过程中主库Crash,那么也可能备库和主库不一致,这是很致命的。(在主库恢复后,可以通过参数Rpl_semi_sync_master_no_tx观察)
如果主备网络故障或者备库挂了,主库在事务提交后等待10秒(rpl_semi_sync_master_timeout的默认值)后,就会继续。这时,主库就会变回原来的异步状态。
MySQL在加载并开启Semi-sync插件后,每一个事务需等待备库接收日志后才返回给客户端。如果做的是小事务,两台主机的延迟又较小,则Semi-sync可以实现在性能很小损失的情况下的零数据丢失。
主机Crash时的处理
备库Crash时,主库会在某次等待超时后,关闭Semi-sync的特性,降级为普通的异步复制,这种情况比较简单。
主库Crash后,那么可能存在一些事务已经在主库Commit,但是还没有传给任何备库,我们姑且称这类事务为"墙头事务"。"墙头事务"都是没有返回给客户端的,所以发起事务的客户端并不知道这个事务是否已经完成。
这时,如果客户端不做切换,只是等Crash的主库恢复后,继续在主库进行操作,客户端会发现前面的"墙头事务"都已经完成,可以继续进行后续的业务处理;另一种情况,如果客户端Failover到备库上,客户端会发现前面的“墙头事务”都没有成功,则需要重新做这些事务,然后继续进行后续的业务处理。
可以做多个备库,任何一个备库接收完成日志后,主库就可以返回给客户端了。
网络传输在并发线程较多时,一次可能传输很多日志,事务的平均延迟会降低。
"墙头事务"在墙头上的时候,是可以被读取的,但是这些事务在上面Failover的场景下,是被认为没有完成的。
默认情况下MySQL的复制是异步的,Master上所有的更新操作写入Binlog之后并不确保所有的更新都被复制到Slave之上。异步操作虽然效率高,但是在Master/Slave出现问题的时候,存在很高数据不同步的风险,甚至可能丢失数据。
MySQL5.5引入半同步复制功能的目的是为了保证在master出问题的时候,至少有一台Slave的数据是完整的。在超时的情况下也可以临时转入异步复制,保障业务的正常使用,直到一台salve追赶上之后,继续切换到半同步模式。
Master:
INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;
SET GLOBAL rpl_semi_sync_master_enabled=1;
SET GLOBAL rpl_semi_sync_master_timeout=1000; (1s, default 10s)
Slave:
INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so’;
SET GLOBAL rpl_semi_sync_slave_enabled=1;
复制心跳(用户检测复制是否中断)
MySQL5.5提供的新的配置master_heartbeat_period,能够在复制停止工作和出现网络中断的时候帮助我们迅速发现问题。
启用方法:
STOP SLAVE;
CHANGE MASTER TO master_heartbeat_period= milliseconds;
START SLAVE;
Slave自动恢复同步
在MySQL5.5版本之前,MySQL Slave实例在异常终止服务之后,可能导致复制中断,并且relay binlog可能损坏,在MySQL再次启动之后并不能正常恢复复制。在MySQL5.5中这一问题得到了解决,MySQL可以自行丢弃顺坏的而未处理的数据,重新从master上获取源数据,进而回复复制。
跳过指定复制事件
在多Master或环形复制的情况下,处于复制链条中间的服务器异常,可以通过
CHANGE MASTER TO MASTER_HOST=xxx IGNORE_SERVER_IDS=y
跳过出问题的MySQL实例。
自动转换字段类型
MySQL5.1在基于语句的复制下,支持部分的字段转换,但是行级的会报错。MySQL5.5语句和行级复制都已支持。还可以通过 SLAVE_TYPE_CONVERSIONS 控制转换的方向。
发表评论
-
mybatis generator中的字段大小写生成问题
2017-10-22 19:35 11386mybatis generator插件中,如果 mysql数据 ... -
MySQL统计一个列中不同值的数量
2017-07-11 14:04 16285https://yiqiwuliao.com/post/mys ... -
mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
2017-03-02 09:44 1791权限问题,授权 给 root 所有sql 权限 mysql ... -
几个不错的MYSQL 优化TIPS
2016-11-19 12:30 811图片来自http://imysql.com/的PDF分享 [ ... -
powerdesign 逆向ORACLE的坑
2016-09-27 17:08 569要注意的是,在WIN 64中,如果要用powerdesin 来 ... -
( 转)mysql中删除两条重复记录中的一条
2015-10-19 20:19 1331| id | createTime | labId | pub ... -
mysql中sql语句=,>的时候的索引设置
2015-05-02 12:27 1308在 https://www.percona.com/blog/ ... -
mysql中profile的使用
2015-04-30 11:11 2230mysql 的 sql 性能分析器主要用途是显示 sql 执行 ... -
mysql中的sql mode
2015-04-13 11:29 1152mysql sql mode小结 1 sql mode可以 ... -
PROCEDURE ANALYSE()为mysql提高性能提供建议
2015-04-02 16:37 1466procedure analyse();语法如下 select ... -
mongodb中意外退出的问题
2015-02-11 14:32 1340mongodb启动的时候,意外退出: Unclean shut ... -
mysql 5.5中保留字查询
2014-06-05 23:16 1487mysql 5.5中保留字查询 http://www.5is ... -
(转)oracle 临时表空间的增删改查
2014-03-18 12:44 1144oracle 临时表空间的增删改查 1、查看临时表空间 (d ... -
pl-sql developer安装
2014-02-07 09:16 1133一直都是机器本机上有oracle,所以装pl sql deve ... -
oracle中的nvl,nvl2等参数
2013-12-26 11:18 22831.nul函数将一个null值转换为一个实际的值。 数据类型可 ... -
Oracle中的ROWNUM rowid 以及MySQL中实现rownum功能类似的语句
2013-12-26 11:08 2362http://gong-10140.iteye.com/blo ... -
ORACLE XE版本的限制
2013-12-07 08:11 366910g中用户数据最大为4G, 11G中最大为11G,如果超出大 ... -
oracle中监控索引是否可用
2013-11-04 07:22 1077在oracle中,可以使用如下的方法监控索引是否可用: a ... -
mysql 5.6中的时间类型的新精度介绍
2013-10-28 09:33 8413留意到mysql 5.6中,可以使用select now(6) ... -
<<oracle索引技术》读书笔记1
2013-08-25 16:23 1327expert indexing in oracle datab ...
相关推荐
根据给定的文件信息,“Mysql5.5数据库双向同步”这一主题深入探讨了如何在两个MySQL 5.5服务器之间建立稳定的数据同步机制,确保数据的一致性和高可用性。以下是对该知识点的详细解析: ### 一、理解MySQL双向同步...
3. **复制功能强化**:MySQL 5.5提供了半同步复制(Semi-Synchronous Replication),确保主服务器上的事务在被复制到至少一个从服务器之前不会提交,增强了数据的一致性。 4. **查询优化器改进**:优化器加入了新...
8. **复制与集群**:MySQL的复制功能使得数据可以在多个服务器间同步,提高可用性和容错性。手册会讲述主从复制的配置和故障切换策略。同时,也会涉及MySQL Cluster,这是一种分布式多节点的高可用解决方案。 9. **...
4. **并行复制**:MySQL 5.5引入了半同步复制,确保数据在主从复制中的可靠性,防止数据丢失。此外,支持多个线程并行复制,提高了复制性能。 5. **性能优化**:包括查询缓存的改进,更有效的内存管理,以及查询...
5. **复制改进**:增强了主从复制功能,支持半同步复制,确保数据在主从之间的一致性。 6. **并行复制**:在MySQL5.5中,可以配置多个线程来并行复制二进制日志事件,提高数据复制速度。 7. **更大的元数据限制**:...
4. **复制改进**:支持半同步复制,确保主库和从库的数据一致性。 5. **查询优化器升级**:更智能的查询优化策略,提高了查询速度。 6. **Full-text搜索增强**:支持短语搜索和自然语言搜索。 在日常使用中,对...
5. **复制功能**:MySQL 5.5改进了复制特性,包括半同步复制,确保主库上的事务在被复制到从库之前已经提交,增强了数据一致性。 6. **Performance Schema**:MySQL 5.5引入了Performance Schema,这是一个内置的...
这个“mysql5.5免安装.rar”文件是一个绿色免安装版的MySQL 5.5.22,适用于那些希望快速部署数据库而不想经历传统安装过程的用户。下面我们将详细探讨MySQL 5.5的一些关键知识点。 首先,MySQL 5.5在性能上的提升...
- 数据库复制功能在5.5版本中得到改进,支持半同步复制(Semi-Synchronous Replication),以确保主从复制的数据一致性。 8. **安全性和权限**: - MySQL5.5加强了安全机制,提供了更细粒度的权限控制,包括GRANT...
这个版本引入了半同步复制,确保至少有一个从服务器接收到并写入数据后,主服务器才确认事务的完成,从而提高了数据的一致性。同时,复制也支持多线程,使得从服务器可以并行处理主服务器的binlog事件,加快了数据...
3. **增强的复制功能**:引入半同步复制,确保数据在主从服务器间的一致性。 4. **InnoDB默认存储引擎**:从这个版本开始,InnoDB成为默认的存储引擎,提供事务处理和行级锁定。 5. **分区功能的增强**:支持更多...
4. **复制功能改进**:增强了主从复制的可靠性,支持半同步复制,以减少数据丢失风险。 5. **线程池支持**:对于高并发场景,线程池可以有效地限制并发连接,降低系统资源消耗。 6. **内存管理优化**:减少了内存...
5. **复制功能强化**:增加了半同步复制(Semi-Synchronous Replication)选项,确保主服务器上的事务在被复制到从服务器之前已经完成,增强了数据的一致性。 6. **更多的SQL优化**:包括查询优化器的改进,如更好...
7. **半同步复制**:为了解决数据丢失问题,MySQL 5.5提供了半同步复制选项,确保在主节点上的事务提交后,至少有一个从节点接收到这些更改。 8. **支持更多的Unicode字符集**:MySQL 5.5支持更多Unicode字符集,如...
3. **半同步复制**:此版本引入了半同步复制(Semi-Synchronous Replication),确保至少有一个从服务器接收到主服务器的数据更改,提高了数据的一致性。 4. **分区功能增强**:MySQL 5.5对分区表进行了扩展,支持...
4. **半同步复制**:新引入的半同步复制确保了主库上的事务在被复制到从库之前至少被一个从库确认,从而提高了数据一致性和安全性。 5. **存储过程和触发器**:MySQL 5.5提供了更多高级的数据库编程特性,如存储...
MySQL 5.5引入了更强大的SQL查询优化器,提升了InnoDB存储引擎的性能,并增强了复制功能,使得数据同步更加可靠。 总之,MySQL 5.5是一个强大且广泛使用的数据库管理系统,其安装过程相对简单,但配置和管理需要...
- **复制功能增强**:添加了半同步复制选项,确保主库的数据被复制到从库后才返回确认,增强了数据一致性。 2. **安装过程**: - **下载**:可以从MySQL官方网站下载适用于Windows的安装包,如`mysql-5.5.28-win...