浅谈MySQL备份、 MySQL 读写分离 、主从复制 、优化

==================================================================

本文主要链接地址:

mysql数据备份:https://www.cnblogs.com/coshaho/p/7302419.html
读写分离:https://blog.csdn.net/qq_39478853/article/details/80623612
https://baike.baidu.com/item/读写分离/10233941?fr=aladdin
主从复制:https://www.cnblogs.com/Aiapple/p/5792939.html
优化:https://blog.csdn.net/jaryle/article/details/73824572

==================================================================

1·为什么需要备份数据?

数据即价值

2.增量与差异备份

**浅谈 MySQL 读写分离 、主从复制 、MySQL备份、优化**

1、what 读写分离

读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

2、why 那么为什么要读写分离呢?

因为数据库的“写”(写10000条数据到oracle可能要3分钟)操作是比较耗时的。
但是数据库的“读”(从oracle读10000条数据可能只要5秒钟)。
所以读写分离,解决的是,数据库的写入,影响了查询的效率。

在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在 安全性、高可用性还是高并发,等各个方面都是完全不能满足实际需求的
因此 通过主从复制的方式来同步数据再通过读写分离来提升数据库的并发负载能力 。有点类似于前面我们学习过的rsync,但是不同的是rsync是对磁盘文件做备份,而mysql主从复制是对数据库中的数据、语句做备份。

2.1 为了确保数据库产品的稳定性,很多数据库拥有双机热备功能。也就是,第一台数据库服务器,是对外提供增删改查业务的生产服务器;第二台数据库服务器,仅仅接收来自第一台服务器的备份数据 (注意,不同数据库产品,第一台数据库服务器,向第二台数据库服务器发送备份数据的方式不同)。 当第一台数据库崩溃后,第二台数据库服务器,可以立即上线来代替第一台数据库服务器,并且,在第一台数据库服务器崩溃后,宝贵的数据,依然会存在于第二台数据库服务器里**(根据目前业界的备份数据发送方式来看,当第一台数据库崩溃后,第一台数据库里的仍然会有少量的新数据,没能来得及被发送到第二台数据库服务器,所以,这部分数据就丢失了)**。

2.2 一般来说,为了配置方便,以及稳定性,这两台数据库服务器,都用的是相同的配置(思考一下,如果两台服务器的配置不同,会导致什么结果)。

2.3 从上文的描述中,大家能看到,在实际运行中,第一台数据库服务器的压力,远远大于第二台数据库服务器。因此,很多人希望合理利用第二台数据库服务器的空闲资源。那么,第二台数据库服务器能做些什么事情呢?

2.4 从数据库的基本业务来看,数据库的操作无非就是增删改查这4个操作。但对于“增删改”这三个操作,如果是双机热备的环境中做,一台机器做了这三个操作的某一个之后,需要立即将这个操作,同步到另一台服务器上。单向的同步,不复杂。但如果两台机器都需要向对方进行同步,那逻辑就非常复杂,而且还会大大降低性能。(从保证ACID特性的角度,思考一下为什么双向同步会非常复杂且低性能?而单向同步却不会?)出于这个原因,第二台备用的服务器,就只做了查询操作。进一步,为了降低第一台服务器的压力,干脆就把查询操作全部丢给第二台数据库服务器去做,第一台数据库服务器就只做增删改了。

2.4 到这一步,就实现了所谓的读写分离。这样做,缺点也非常明显了。本来第二台数据库服务器,是用来做热备的,它就应该在一个压力非常小的环境下,保证运行的稳定性。而读写分离,却增加了它的压力,也就增加了不稳定性。因此,读写分离,实质上是一个在资金比较缺乏,但又需要保证数据安全的需求下,在双机热备方案上,做出的一种折中的扩展方案。

**浅谈 MySQL 读写分离 、主从复制 、MySQL备份、优化**
**浅谈 MySQL 读写分离 、主从复制 、MySQL备份、优化**

3、when 什么时候要读写分离?

数据库不一定要读写分离,如果程序使用数据库较多时,而更新少,查询多的情况下会考虑使用,利用数据库 主从同步 。可以减少数据库压力,提高性能。当然,数据库也有其它优化方案。memcache 或是 表折分,或是搜索引擎。都是解决方法。

4、how 怎么实现

通过RAID技术
RAID是英文Redundant Array of Independent Disks的缩写,翻译成中文意思是“独立磁盘冗余阵列”,有时也简称磁盘阵列(Disk Array)。
简单的说,RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术。
无盘应用编辑
在这里我们将工作站需要读的数据如系统包,游戏包存放于阵列0通道中,将工作站使用过程中写的数据存放于阵列1通道中。基于RAID的物理特性从而达到提高无盘工作站读写速度的效果。这里的读写分离主要是指单台服务器下的PXD无盘如何实现读写分离,无盘应用中的读写分离技术远不止步于单台服务器,双台或多台的读写分离才是重点,才是进一步体现效能的高效利用,即多服备份和分服回写的概念,将在其它词条中进行说明。

=================================================================

主从复制用途及条件

mysql 的主从是异步的 只有当 主服务器的写执行完成后才会立马复制给从服务器,mysql被Oracle 异步之间的时间可以控制在0.0? 秒之内。

mysql主从复制用途

  • 实时灾备,用于故障切换
  • 读写分离,提供查询服务
  • 备份,避免影响业务

主从部署必要条件:

  • 主库开启binlog日志(设置log-bin参数)
  • 主从server-id不同
  • 从库服务器能连通主库
    **浅谈 MySQL 读写分离 、主从复制 、MySQL备份、优化**

MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信

并监控master的二进制日志文件的变化show slave status

如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。

从库生成两个线程,一个I/O线程,一个SQL线程:

  • i/o线程
    去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中,用来给从库 i/o线程传binlog;Slave将master的binary log复制到其中继日志。首先slave开始一个工作线程(I/O),I/O线程在master上打开一个普通的连接,然后开始binlog dump process。binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件,I/O线程将这些事件写入中继日志。

  • SQL 线程
    会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致; Sql slave thread(sql从线程)处理该过程的最后一步,sql线程从中继日志读取事件,并重放其中的事件而更新slave数据,使其与master中的数据一致,只要该线程与I/O线程保持一致,中继日志通常会位于os缓存中,所以中继日志的开销很小。

遇到的问题:

mysql主从复制,数据量大, 高并发时,会出现数据不一致 (延迟)

相关文章: