主从备份的实现细节

主从备份的实现细节
mysql
使用3个线程来执行复制功能(其中1个在主服务器上,另两个在从服务器上)。当发出start
slave时,从服务器创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句。主服务器创建一个线程将二进制日志中的内容发送到从服
务器。该线程可以即为主服务器上show processlist输出中的Binlog Dump线程。从服务器I/O线程读取主服务器Binlog
Dump线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中,即中继日志。第3个线程是sql线程,由从服务器创建,用于读取中继日志并执行
日志中包含的更新。在从服务器上,读取和执行更新语句被分成两个独立的任务。当从服务器启动时,其I/O线程可以很快地从主服务器索取所有二进制日志内
容。


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。状态文件保存在硬盘上,
从服务器关闭时不会丢失。下次从服务器启动时,读取这些文件以确定它已经从主服务器读取了多少二进制日志,以及处理自己的中继日志的程度。

附录1
关于log_bin日志 
 
 my.conf
文件中的[mysqld]标签下的log_bin指定日志文件,如果不提供文件名,mysql将自己产生缺省文件名。mysql会在文件名后面自动添加数
字引,每次启动服务时,都会重新生成一个新的二进制文件。此外,使用log-bin-index可以指定索引文件;使用binlog-do-db可以指定
记录的数据库;使用binlog-ignore-db可以指定不记录的数据库。注意的是:binlog-do-db和binlog-ignore-db一
次只指定一个数据库,指定多个数据库需要多个语句。而且,MySQL会将所有的数据库名称改成小写,在指定数据库时必须全部使用小写名字,否则不会起作
用。
  以后对数据库每做的一次操作,都会在binlog中有所记录。

来源: http://blog.chinaunix.net/uid-26610882-id-4083396.html

来自为知笔记(Wiz)

时间: 2024-10-11 07:10:51

主从备份的实现细节的相关文章

关于Subversion主从备份方式的调整(全量、增量脚本)更新

本文引用于http://blog.chinaunix.net/uid-25266990-id-3369172.html 之前对Subversion服务器作了迁移,关于SVN的架构也走了调整,有单一的服务器改为主从备份的方式.在"subversion迁移过程中增量备份脚本"中提到了增量备份的方式,但是运行一段时间,发现备份出错,提示导入的文件已存在,于是重新检查,修改了脚本.现在一直稳定运行着. 今天重新回顾,发现了之前文章很多错误的地方,对文章作了更新,附上Subsection 全量和

MySQL配置主从备份

MySQL主从备份配置实例 场景: 1.主服务器192.168.0.225.从服务器192.168.0.226.其中,主服务器上已有数据. 2.主从服务器上的mysql版本及安装配置相同. 一.主从备份的原理: 主服务器数据库的每次操作都会记录在二进制日志文件mysql-bin.xxx中.从服务器的I/O线程使用专用帐号登陆到主服务器中读取该二进制文件,并将文件内容写入到自己本地的中继日志relay-log文件中.然后从服务器的SQL线程会根据中继日志中的内容执行SQL语句. 这要求两台服务器有

Mysql的主主备份与主从备份--同步

Mysql的主主备份与主从备份--同步 一:实验目标 mysql主从原理 实战:mysql主从配置 实战:mysql主主配置 二:实验环境 导入测试数据库book: Mysql主xuegod63   IP:192.168.1.63 Mysql从xuegod64   IP:192.168.1.64 三:实验代码 实战:mysql主从配置  服务概述:主从复制 复制解决的基本问题是让一台服务器的数据和另外的服务器保持同步. 一台主服务器可以连接多台从服务器,并且从服务器也可以反过来作主服务器.主服务

单机部署redis主从备份

redis为了避免单点故障,也支持主从备份.个人在做主从备份的实验时,因为机器数量有限,一般非常少有多台机器做支撑. 本文就将叙述怎样在一台电脑上实现redis的主从备份. 同一台机器上部署多个redis实例,为了避免冲突,每一个实例须要使用不同的port号.非常easy.在启动redis时,指定不同的port号,或者在配置文件里指定port号.我的这个实验是在配置文件里指定的port号: 然后在启动时,指定配置文件启动: ./redis-server ./redis.conf 还能够以其它方式

linux下 mysql主从备份

在使用Ubuntu作为开发环境时经常需要在全局安装一些依赖框架等,这个时候就常常需要用到root权限,但是在Ubuntu下第一次使用su命令时会提示认证失败:查找资料后发现Ubuntu下root权限默认是锁定的,可能是处于安全考虑,但是作为开发人员肯定是需要root权限的. 在命令行中可以输入下面命令设置root密码,这样就能随时使用root权限了: [email protected]:~$ su 密码: su:认证失败 [email protected]:~$ sudo passwd [sud

mysql主从备份及常见问题处理

1.mysql主从备份基本原理 mysql支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.mysql复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新.删除等等).因此,要进行复制,必须在主服务器上启用二进制日志.每个从服务器从主服务器接收主服务器已经记录到的二进制日志,获取日志信息更新.通过设置在Master上的binlog,使其处于打开状态:Slave通过一个I/O线程从Master上读取binlog,然后传输到Slave的中继日志中,然后使

mongo数据库主从备份服务集群搭建

MongoDB 主从备份 环境: centos 7 ,mongodb x86_64 mongodb 官网下载页:https://www.mongodb.com/download-center#community 下载完毕,解压到指定的目录,我现在就把它放到/opt目录下(是绿色版的,不用安装) 在bin/这个目录下,都是mongodb的相关工具, 常用 工具说明: bsondump   --将Bson格式的文件转储为Json 格式的数据 mongo        --mongo客户端(用于连接m

Redis主从备份&哨兵设置

Redis 主从备份,哨兵设置 环境 Centos 7,redis 4.0.6 三个centos 7实例 节点 IP 端口 redis-master 172.31.193.221 6379 redis-slave 172.31.193.222 6379 redis-LBS 172.31.193.224 6379 redis-sentinel-master 172.31.193.221 26379 redis-sentinel-slave 172.31.193.222 26379 redis-se

django+centos+mariadb读写分离完美实现(上)-mysql主从备份实现

首先画图一张,用来展示今天要做的事情,读写分离,个人理解就是使用mysql主从备份的原理,让两个数据库同时为自己提供服务.其中主库负责数据保存,从库负责数据展示,可以一主一从,也可以一主多从.从而降低数据库同时处理读写的压力. 1.环境如下 master 10.10.101.83 slave 10.10.101.184 2.接着搭建数据库备份,使用的是centos7.4+mariadb 2-1-两台服务器安装Mariadb数据库 (ps:mariadb是免费版的mysql,操作很相似,注意,两台