- 浏览: 286228 次
文章分类
- 全部博客 (148)
- Shell (2)
- Python (4)
- Java (31)
- Javascript (4)
- Android (7)
- SQL优化 (0)
- Linux (5)
- webOS (4)
- MySQL (18)
- memcach redis (1)
- memcach (0)
- redis (3)
- memcache (2)
- svn (1)
- UED (1)
- 网络 (1)
- virtual box (1)
- git (1)
- Gitosis (1)
- 云计算 (2)
- 12306 (1)
- google (1)
- spdy (1)
- nginx (1)
- tomcat (2)
- SSL (2)
- lucene (2)
- 空间搜索 (1)
- lzo (1)
- 数据压缩 (1)
- ios (1)
- maven (1)
- elasticsearch (1)
- scribe (1)
- flume (1)
- jni (1)
- jna (1)
- hadoop (2)
- 大数据 (1)
最新评论
-
aa80303857:
不错,学习了。互相关注一下。
Sitemesh学习笔记 -
xiaozang:
...
关于nginx的rewrite重写规则 -
coderuncle:
楼主有没有研究过cloudera flume和apache f ...
scribe,flume -
奔跑的犀牛:
...
linux下自动启动mysql -
lsn_1212:
网上装svn的资源太多了,这个挺好的,说的挺全的。
SVN Server安装部署攻略(Linux+SubVersion+Apache)
一、半同步复制原理介绍
如果还不了解Semi-sync可以阅读(Mannul | 概述)
1. 优点
当事务返回客户端成功后,则日志一定在至少两台主机上存在。
MySQL在加载并开启Semi-sync插件后,每一个事务需等待备库接收日志后才返回给客户端。如果做的是小事务,两台主机的延迟又较小,则Semi-sync可以实现在性能很小损失的情况下的零数据丢失。
2. 缺点
完成单条事务增加了额外的等待延迟,延迟的大小取决于网络的好坏。
Semi-sync不是分布式事务,主库会在自己完成事务后,等待备库接收事务日志。
3. 主机Crash时的处理
备库Crash时,主库会在某次等待超时后,关闭Semi-sync的特性,降级为普通的异步复制,这种情况比较简单。
主库Crash后,那么可能存在一些事务已经在主库Commit,但是还没有传给任何备库,我们姑且称这类事务为"墙头事务"。"墙头事务"都是没有返回给客户端的,所以发起事务的客户端并不知道这个事务是否已经完成。
这时,如果客户端不做切换,只是等Crash的主库恢复后,继续在主库进行操作,客户端会发现前面的"墙头事务"都已经完成,可以继续进行后续的业务处理;另一种情况,如果客户端Failover到备库上,客户端会发现前面的“墙头事务”都没有成功,则需要重新做这些事务,然后继续进行后续的业务处理。
4. 其他
可以做多个备库,任何一个备库接收完成日志后,主库就可以返回给客户端了。
网络传输在并发线程较多时,一次可能传输很多日志,事务的平均延迟会降低。
"墙头事务"在墙头上的时候,是可以被读取的,但是这些事务在上面Failover的场景下,是被认为没有完成的。
5. 半同步复制插件安装
1. 安装
-------------------------------------
在master上安装master插件:
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
在slave上安装slave插件;
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
2. 必须同时两端激活
-------------------------------------
在运行时:
在master上执行:
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1; mysql> SET GLOBAL rpl_semi_sync_master_timeout = 3000;
在slave上执行:
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1; mysql> STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;
3. 监视
-------------------------------------
看配置
SHOW VARIABLES LIKE 'rpl_semi_sync%';
看状态:
SHOW STATUS LIKE 'rpl_semi_sync%';
二、主从复制原理介绍
一、MySQL复制概述
MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。MySQL复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器从主服务器接收主服务器上已经记录到其二进制日志的保存的更新。当一个从服务器连接主服务器时,它通知主服务器定位到从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,并在本机上执行相同的更新。然后封锁并等待主服务器通知新的更新。从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。
二、复制实现细节
MySQL使用3个线程来执行复制功能,其中两个线程(Sql线程和IO线程)在从服务器,另外一个线程(IO线程)在主服务器。当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句。主服务器创建一个线程将二进制日志中的内容发送到从服务器。该线程可以即为主服务器上SHOW PROCESSLIST的输出中的Binlog Dump线程。从服务器I/O线程读取主服务器Binlog Dump线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中,即中继日志。第3个线程是SQL线程,由从服务器创建,用于读取中继日志并执行日志中包含的更新。在从服务器上,读取和执行更新语句被分成两个独立的任务。当从服务器启动时,其I/O线程可以很快地从主服务器索取所有二进制日志内容,即使SQL线程执行更新的远远滞后。
1、复制线程状态
通过show slave status\G和show master status可以查看复制线程状态。常见的线程状态有:
(1)主服务器Binlog Dump线程
Has sent all binlog to slave; waiting for binlog to be updated
线程已经从二进制日志读取所有主要的更新并已经发送到了从服务器。线程现在正空闲,等待由主服务器上新的更新导致的出现在二进制日志中的新事件。
(2)从服务器I/O线程状态
Waiting for master to send event
线程已经连接上主服务器,正等待二进制日志事件到达。如果主服务器正空闲,会持续较长的时间。如果等待持续slave_read_timeout秒,则发生超时。此时,线程认为连接被中断并企图重新连接。
(3)从服务器SQL线程状态
Reading event from the relay log
线程已经从中继日志读取一个事件,可以对事件进行处理了。
Has read all relay log; waiting for the slave I/O thread to update it
线程已经处理了中继日志文件中的所有事件,现在正等待I/O线程将新事件写入中继日志。
2、复制过程中使用的传递和状态文件
默认情况,中继日志使用host_name-relay-bin.nnnnnn形式的文件名,其中host_name是从服务器主机名,nnnnnn是序列号。中继日志与二进制日志的格式相同,并且可以用mysqlbinlog读取。
从服务器在data目录中另外创建两个小文件。这些状态文件默认名为主master.info和relay-log.info。状态文件保存在硬盘上,从服务器关闭时不会丢失。下次从服务器启动时,读取这些文件以确定它已经从主服务器读取了多少二进制日志,以及处理自己的中继日志的程度。
如果要备份从服务器的数据,还应备份这两个小文件以及中继日志文件。它们用来在恢复从服务器的数据后继续进行复制。如果丢失了中继日志但仍然有relay-log.info文件,可以通过检查该文件来确定SQL线程已经执行的主服务器中二进制日志的程度。然后可以用Master_Log_File和Master_LOG_POS选项执行CHANGE MASTER TO来告诉从服务器重新从该点读取二进制日志。
三、主从复制的配置方法
1. 在master创建复制用户
grant replication slave on *.* to 'replication'@'192.168.1.%' identified by '000000'; flush privileges;
2. 修改master的配置文件,开启binlog日志和设置需要复制的数据库
[mysqld] server-id = 1 log-bin=/opt/mysql/binlog/mysql-bin binlog_do_db=db1 binlog_ignore_db=mysql binlog_format=mixed
3. 修改slave 配置,指定需要复制的数据库和relaylog的路径
[mysqld] server-id = 2 replicate-do-db=db1 replicate-ignore-db = mysql,information_schema relay-log=/opt/mysql/data/mysqlb-relay-bin relay-log-index=/opt/mysql/data/mysqlb-relay-bin.index
4. 重启master和slave数据库服务器
5. 在master上执行
mysql>flush tables with read lock; mysql>show master status\G *************************** 1. row *************************** File: binlog.000006 Position: 107 Binlog_Do_DB: test Binlog_Ignore_DB: mysql 1 row in set (0.00 sec) mysql>unlock tables;
注:这里锁表的目的是为了生产环境中不让进新的数据,好让从服务器定位同步位置。初次同步完成后,记得解锁。
6. 在slave上,使用change master指向同步位置
mysql>change master to master_host='192.168.1.106',master_port=3307, master_user='replication', master_password='000000', master_log_file='binlog.000006', master_log_pos=107;
注:master_log_file,master_log_pos由上面主服务器查出的状态值中确定。master_log_file对应File,master_log_pos对应Position。mysql 5.x以上版本已经不支持在配置文件中指定主服务器相关选项。
7. 启动从服务器复制线程
mysql>start slave;
发表评论
-
mysql binlog分析工具
2013-01-26 22:45 1491https://github.com/tangfl/jbinl ... -
MySQL 百万级分页优化(Mysql千万级快速分页)
2012-12-07 22:30 0以下分享一点我的经验 一般刚开始学SQL的时候,会这样写 ... -
mysql共享表空间和独立表空间
2012-12-07 22:12 0innodb表的数据结构 innodb这种引擎 ... -
InnoDB之表空间
2012-12-07 22:12 0innoDB是MySQL的重要存储引擎,为数据提供了很好 ... -
MySQL 系统架构 说明
2012-12-07 22:07 847说明:本文转自 简朝阳(MySQL ACE)的 《MyS ... -
基于InnoDB存储引擎的mysql数据库表结构详解
2012-12-07 22:05 3542前言 前一篇文章基于InnoDB存储引擎的mysql数 ... -
MySQL技术内幕:InnoDB存储引擎读书笔记(下)
2012-12-07 21:58 1298第六章、锁 锁是区别文件系统和数据库系统的一个关键 ... -
MySQL技术内幕:InnoDB存储引擎读书笔记(中)
2012-12-07 21:54 1481第四章、表 4.1 ... -
MySQL技术内幕:InnoDB存储引擎读书笔记(上)
2012-12-07 21:53 1614第一章、mysql体系结构和存储引擎 1.1、数据 ... -
由12306.cn谈谈网站性能技术
2012-10-17 16:35 91812306.cn网站挂了,被 ... -
mysql水平切分
2012-10-17 13:22 1236在大中型项目中,在 ... -
淘宝开源 mysql 插件,让mysql像nosql一样使用
2012-06-29 17:28 1165http://rdc.taobao.com/team/jm/a ... -
mysql的几个主要分支
2012-06-29 17:11 1322http://www.percona.com/software ... -
mysql 添加用户,并对数据库授权
2011-12-07 11:46 982use mysql; insert into user ... -
MySQL server has gone away 问题的解决方法
2011-04-11 11:27 9731、应用程序(比如PHP)长时间的执行批量的MYSQL语句。 ... -
DRBD 提升了 MySQL 的集群能力
2011-03-02 23:00 985前几天 MySQL 站点上 ... -
快速/简单实现mysql数据库集群(mysql cluster)
2011-03-02 22:58 1820最近一直在研究mysql的高可用性和负载均衡技术,对于数据库/ ... -
MySQL复制实现互为主从双机热备
2011-03-02 22:55 1829A B 为两台MySQL服务器,均开启二进制日志,数据库版本 ... -
Mysql, DRBD, Heartbeat 实现数据库复制和数据库系统HA
2011-03-02 22:51 1503使用了两种技术来实现数据库之间的复制和高可用性(HA) DR ... -
Drbd + heartbeat + mysql replication来构建mysql的高可用性
2011-03-02 22:50 1362A(M)[192.168.33.11\192.168.43.1 ...
相关推荐
如何实现MySQL的主从复制和半同步复制对普通用户来说可能比较难懂,但只要您接触了MYSQL,就没理由不去学。
MySQL主从复制类型简介入门
Mysql主从复制&半同步复制原理
MySQL借助Google提供的插件,完成半同步复制模型,大家可以学习配置下
MySQL主从复制原理 _ 异步复制 _ 半同步复制 _ GTID复制
导读: 作者:高鹏(网名八怪),《深入理解...八怪写作风格很是严谨,几乎每篇都是从源码入手去剖析MySQL主从复制相关的知识点。 强烈推荐大家订阅本专栏 业界大咖推荐序 从2016年开始八怪(本名高鹏)经常向我请教一
Linux 下MYsql数据库主从复制详细配置
MySQL的主从复制、半同步复制、主主复制详解,很不错,可以下载看看
Debian系统下MySQL主从同步复制,仅供参考哈
二、MySQL主从复制配置 4 1、MySQL主从复制配置 4 2、MySQL主从复制的原理 6 三、Atlas代理配置 7 1、Atlas安装 7 2、修改test.cnf配置文件 7 3、创建Atlas启动脚本 9 4、启动Atlas代理 10 5、Atlas配置说明 10 四、...
MySQL实践备份恢复与主从复制
Mysql主从同步备份策略 五月 18th, 2009 at 17:30 - 3,803 views 环境: 主从服务器上的MySQL数据库版本同为5.1.34 主机IP:192.168.0.1 从机IP:192.168.0.2 一. MySQL主服务器配置 1.编辑配置文件/etc/my.cnf # ...
本文档详细介绍了MySQL主从复制和主主复制的步骤。文档共分为3部分:1.主从复制 2.主主复制 3.常用明命令。希望对大家有所帮助。
从其他地方复制的,不是用来赚分的,存粹是自己备份在网上,请下载的人自己看清楚
mysql的主从复制(同步)基础知识-详细笔记文档总结
LNH_MySQL 11-忽略MySQL主从复制主库授权表同步实战.mp4
LNH_MySQL 11-忽略MySQL主从复制主库授权表同步实战2.mp4
LNH_MySQL 12-MySQL主从复制指定不同库表同步参数说明.mp4
mysql主从复制与分区技术: 主讲:李健; QQ:89267659; 1、mysql用户授权; 2、mysql bin-log日志; 3、mysql主从复制; 4、mysql分区技术;