当前位置: 移动技术网 > IT编程>数据库>Mysql > 如果有一个特别大的访问量到数据库上,怎么做优化?主从复制、读写分离

如果有一个特别大的访问量到数据库上,怎么做优化?主从复制、读写分离

2020年03月24日  | 移动技术网IT编程  | 我要评论
第一个就是使用优化查询的方法。这个在前期的内容中有具体说明,这里不再做说明。 第二、这里简要说明一个以下几个方法: 主从复制、读写分离、负载均衡 目前,大部分的主流关系型数据库都提供了主从复制的功能,通过配置两台(或多台)数据库的主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。网站可 ...

第一个就是使用优化查询的方法。这个在前期的内容中有具体说明,这里不再做说明。

第二、这里简要说明一个以下几个方法:

  主从复制、读写分离、负载均衡

  目前,大部分的主流关系型数据库都提供了主从复制的功能,通过配置两台(或多台)数据库的主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。网站可以利用数据库的这一功能,实现数据库的读写分离,从而改善数据库的负载压力。一个系统的读操作远远多于其写操作,因此写操作发向master,读操作发向slaves进行操作(简单的轮循算法来决定使用哪个slave)。

  利用数据库的读写分离,web服务器在写数据的时候,访问著数据库(master),主数据库通过主从复制机制将数据更新同步到从数据库(slave),这样web服务器读数据的时候,就可以通过从数据库获得数据。这一方案使得在大量读操作的web应用可以轻松地读取数据,而主数据库也只会承受少量的写入操作,还可以实现数据热备份,可谓是一举两得的方案。

1.复制的基本原则

  mysql复制是异步的且串行化的;

  每个slave只有一个master;

  每个slave只有一个唯一的服务器id;

  每个master可以有多个slave;

2.一主一从常见配置:

  mysql版本一致且后台以服务运行;

  主从都配置在[mysqld]结点下,都是小写,主机修改my.ini配置文件,从机修改my.cnf配置文件,因修改过配置文件,请主机+从机都重启后台mysql服务;

  主机从机都关闭防火墙;

  在windows主机上建立账户并授权slave;

  在linux从机上配置需要复制的主机;

  主机新建库,新建表,insert记录,从机复制;

  通过stop slave 停止从机复制;

 

       

 主从复制的原理:

  影响mysql-a数据库的操作,在数据库执行后,都会写入本地的日志系统a中。假设,实时的将变化了的日志系统中的数据库事件操作,通过网络发给mysql-b。mysql-b收到后,写入本地日志系统b,然后一条条地将数据库事件在数据库中完成。那么mysql-a的变化,mysql-b也会变化,这样就是所谓的mysql的复制。

  在上面的模型中,mysql-a就是主服务器,即master,mysql-b就是从服务器,即slave。

  日志系统a,其实它是mysql的日志类型的二进制日志,也就是专门用来保存修改数据库的所有动作,即bin log。【注意mysql会在执行语句之后,释放锁之前,写入二进制日志,确保事务安全。】

  日志系统b,并不是二进制日志,由于它是从mysql-a的二进制日志复制过来的,并不是自己的数据库变化产生的,有点接力的感觉,称为中继日志,即relay log。

  可以发现,通过上面的机制,可以保证mysql-a和mysql-b的数据库数据一致,但是时间上肯定有延迟,即mysql-b的数据是滞后的。

简化版:

mysql主(称master)从(称slave)复制的原理:

  1.master将数据改变记录到二进制日志(binary log)中,也即是配置文件log-bin指定的文件(这些记录叫做二进制日志事件,binary log events)

    ps:从图中可以看出,slave服务器中有一个i/o线程(i/o thread)在不停地监听master的二进制日志(binary log)是否有更新:如果没有,它会睡眠等待master产生新的日志事件;如果有新的日志事件(log events),则会将其拷贝至slave服务器中的中继日志(relay log)。

  2.slave将master的二进制日志事件(binary log events)拷贝到它的中继日志(relay log)。

  3.slave重做中继日志中的事件,将master上的改变反映到它自己的数据库中。所以两端的数据是完全一样的。

    ps:从图中可以看出,slave服务器有一个sql线程(sql thread)从中继日志读取事件,并重做其中的事件,从而更新slave的数据,使其与master中的数据一致。只要该线程与i/o线程保持一致,中继日志通常会位于os的缓存中,所以中继日志的开销很小。

  

 主从复制的几种方式:

 1.同步复制

  主服务器在将更新的数据写入它的二进制日志(binlog)文件中后,必须等待验证所有的从服务器的更新数据是否已经复制到其中,之后才可以自由处理其他进入的事务处理请求。

2.异步复制

  主服务器在将更新的数据写入它的二进制日志(binlog)文件中后,无需等待验证更新数据是否复制到从服务器中,就可以自由处理其他进入的事务处理请求。

3.半异步复制

  主服务器在将更新的数据写入它的二进制日志(binlog)文件中后,只需等待验证其中一台从服务器的更新数据是否已经复制到其中,就可以自由处理其他进入的事务处理请求,其他的从服务器不用管。

数据库分表、分区、分库

  分表见上期描述。

  分区就是把一张表的数据分成多个区块,这些区块可以在一个磁盘上,也可以在不同的磁盘上,分区后,表面上还是一张表,但数据散列在多个位置,这样一来,多块硬盘同时处理不同请求,从而提高磁盘io读写性能,实现比较简单。包括水平分区和垂直分区。

  分库是根据业务不同把相关的表且分到不同的数据库中,比如web、bbs、blog等库。

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

  • Ubuntu上Vim安装NERDTree插件的详细操作步骤

    Ubuntu上Vim安装NERDTree插件的详细操作步骤

    nerdtree是vim的文件系统浏览器,使用此插件,用户可以直观地浏览复杂的目录层次结构,快速打开文件以进行读取或编辑,以及执行基本的文件系统操作。nerdt... [阅读全文]
  • MySQL 4种常用的主从复制架构

    MySQL 4种常用的主从复制架构

    一主多从复制架构在主库读取请求压力非常大的场景下,可以通过配置一主多从复制架构实现读写分离,把大量的对实时性要求不是特别高的读请求通过负载均衡分部到多个从库上(... [阅读全文]
  • 浅析MySQL 备份与恢复

    1、简介数据无价,mysql作为一个数据库系统,其备份自然也是非常重要且有必要去做。备份的理由千千万,预防故障,安全需求,回滚,审计,删了又改的需求等等,备份的... [阅读全文]
  • 保障MySQL数据安全的一些建议

    数据是企业核心资产,数据对企业而言是最重要的工作之一。稍有不慎,极有可能发生数据无意泄露,甚至被黑客恶意窃取的风险。每年业界都会传出几起大事件,某知名或不知名的... [阅读全文]
  • MySQL如何快速修改表的表结构

    快速修改mysql某张表的表结构--摘录自《mysql管理之道》alter table 表名 modify 列名 数据类型; 这个命令可以修改表结构此外,也可以... [阅读全文]
  • MySQL 行锁和表锁的含义及区别详解

    一、前言对于行锁和表锁的含义区别,在面试中应该是高频出现的,我们应该对mysql中的锁有一个系统的认识,更详细的需要自行查阅资料,本篇为概括性的总结回答。mys... [阅读全文]
  • MySQL 如何查询当前最新事务ID

    写在前面:在个别时候可能需要查看当前最新的事务 id,以便做一些业务逻辑上的判断(例如利用事务 id 变化以及前后时差,统计每次事务的响应时长等用途)。通常地,... [阅读全文]
  • 如何优雅、安全的关闭MySQL进程

    前言本文分析了 mysqld 进程关闭的过程,以及如何安全、缓和地关闭 mysql 实例,对这个过程不甚清楚的同学可以参考下。关闭过程1、发起 shutdown... [阅读全文]
  • 详解MySQL8.0​ 字典表增强

    详解MySQL8.0​ 字典表增强

    mysql中数据字典是数据库重要的组成部分之一,information_schema首次引入于mysql 5.0,作为一种从正在运行的mysql服务器检索元数据... [阅读全文]
  • 简述MySQL InnoDB存储引擎

    前言:存储引擎是数据库的核心,对于 mysql 来说,存储引擎是以插件的形式运行的。虽然 mysql 支持种类繁多的存储引擎,但最常用的当属 innodb 了,... [阅读全文]
验证码:
移动技术网