mysql数据库备份方案_Mysql实战(1):数据库间的备份方案

一、数据库备份的方案及意义

1、数据库备份的意义和用途

实时灾备,用于故障切换

读写分离,提高查询速度,减轻服务器负载

备份,避免影响业务

2、Mysql实现主从部署的必要条件:

主库开启binlog日志(设置log-bin参数)

主从server-id不同

从库服务器能连通主库

3、备份方案,有以下五种方式:

一主一从

主主复制

一主多从:扩展系统读取的性能,因为读是在从库读取的;

多主一从:5.7开始支持

联级复制

b7c7e2ff311318becf52ba35cb0235f1.png

二、主从备份的实现原理

Mysql的主库中数据修改后,会产生增量的二进制日志文件,从库通过监听主库增量的日志文件,并拉取日志文件,来实现更新从库数据的目的。

1、主从备份原理:

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

第二步:就是slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。

第三步:SQL slave thread处理该过程的最后一步。SQL线程从中继日志读取事件,更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。

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

2、从库拉取主库日志文件的步骤如下:

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

(2)从库的IO线程向主库的主进程发送请求,主库验证从库,交给主库IO线程负责数据传输;

(3)主库IO线程对比从库发送过来的master.info里的信息,将binlog文件信息,偏移量和binlog文件名等发送给从库

(4)从库接收到信息后,将binlog信息保存到relay-bin中,同时更新master.info的偏移量和binlog文件名

(5)从库的SQL线程不断的读取relay-bin的信息,同时将读到的偏移量和文件名写道relay-log.info文件,binlog信息写进自己的数据库,一次同步操作完成。

(6)完成上次同步后,从库IO线程不断的向主库IO线程要binlog信息

(7)从库如果也要做主库,也要打开log_bin 和log-slave-update参数

26b6a2ab92c8ae4a9c60bfdee51de02a.png

三、数据库备份,产生的新问题及解决方法

1、主从复制存在的问题,以及解决的办法

(1)主库宕机后,数据可能丢失的问题

解决办法:采用半同步复制的方式

(2)从库只有一个sqlThread,主库写压力大,复制很可能延时

解决办法:采用并行复制,解决从库复制延迟的问题

2、半同步复制方案:解决主库宕机后,数据可能丢失的问题

//修改数据库配置,增加半同步复制

mysql semi-sync

(1)半同步复制的特点:

5.5集成到mysql,以插件的形式存在,需要单独安装

确保事务提交后binlog至少传输到一个从库

不保证从库应用完这个事务的binlog

性能有一定的降低,响应时间会更长

网络异常或从库宕机,卡主主库,直到超时或从库恢复

(2)异步复制、半同步复制的原理图:

6d5d3dcb6e561a64861f032d79d2fac8.png

---------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------

5b7bb5f52ff46a551aba0d5d8feb57ba.png

3、并行复制:解决从库复制延迟的问题

//在数据库中增加并行复制设置

//设置sql线程数为10

set global slave_parallel_workers=10;

(1)并行复制的特点:

mysql并行复制

社区版5.6中新增

并行是指从库多线程apply binlog

库级别并行应用binlog,同一个库数据更改还是串行的(5.7版并行复制基于事务组)

四、Mysql数据各项配置说明

1、主从备份中,配置的server-id 有什么用?

在Mysql集群中,server-id是每一台数据库的身份标识,同步的数据中是包含server-id的,用于标识该语句最初是从哪个server写入的,所以server-id一定要有的。

在主库中,用来标识从库的线程id:每一个同步中的slave在master上都对应一个master线程,该线程就是通过slave的server-id来标识的;每个slave在master端最多有一个master线程,如果两个slave的server-id 相同,则后一个连接成功时,前一个将被踢掉。 该策略是基于以下情况的考虑:slave主动连接master之后,如果slave上面执行了slave stop;则连接断开,但是master上对应的线程并没有退出;当slave start之后,master不能再创建一个线程而保留原来的线程,那样同步就可能有问题。

在主主备份中,用来防止备份环的出现:在mysql做主主同步时,多个主需要构成一个环状,但是同步的时候又要保证一条数据不会陷入死循环,这里就是靠server-id来实现的。

2、mysql配置文件 /etc/my.cnf 详细解释

五、实战:配置主从备份

备份的方法,请参考以下资源:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值