MySQL主从复制

如题所述

第1个回答  2024-09-19
前言:

我们在平时工作中,使用最多的数据库就是MySQL了,随着业务的增加,如果单单靠一台服务器的话,负载过重,就容易造成宕机。

这样我们保存在MySQL数据库的数据就会丢失,那么该怎么解决呢?

其实在MySQL本身就自带有一个主从复制的功能,可以帮助我们实现负载均衡和读写分离。

对于主服务器(Master)来说,主要负责写,从服务器(Slave)主要负责读,这样的话,就会大大减轻压力,从而提高效率。

什么是MySQL的主从复制?

MySQL主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。

MySQL默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。

主从复制的原理

①当Master节点进行insert、update、delete操作时,会按顺序写入到binlog中。

②salve从库连接master主库,Master有多少个slave就会创建多少个binlogdump线程。

③当Master节点的binlog发生变化时,binlogdump线程会通知所有的salve节点,并将相应的binlog内容推送给slave节点。

④I/O线程接收到binlog内容后,将内容写入到本地的relay-log。

⑤SQL线程读取I/O线程写入的relay-log,并且根据relay-log的内容对从数据库做对应的操作。

MySQL主从形式

一主一从

主主复制

一主多从

多主一从

联级复制

主从复制延时解决方案

半同步复制

从MySQL5.5开始,MySQL已经支持半同步复制了,半同步复制介于异步复制和同步复制之间,主库在执行完事务后不立刻返回结果给客户端,需要等待至少一个从库接收到并写到relaylog中才返回结果给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一个TCP/IP往返耗时的延迟。

主库配置sync_binlog=1,innodb_flush_log_at_trx_commit=1

sync_binlog的默认值是0,MySQL不会将binlog同步到磁盘,其值表示每写多少binlog同步一次磁盘。

innodb_flush_log_at_trx_commit为1表示每一次事务提交或事务外的指令都需要把日志flush到磁盘。

注意:将以上两个值同时设置为1时,写入性能会受到一定限制,只有对数据安全性要求很高的场景才建议使用,比如涉及到钱的订单支付业务,而且系统I/O能力必须可以支撑!

解决从库复制延迟的问题:

优化网络

升级Slave硬件配置

Slave调整参数,关闭binlog,修改innodb_flush_log_at_trx_commit参数值

升级MySQL版本到5.7,使用并行复制

logo设计

创造品牌价值

¥500元起

APP开发

量身定制,源码交付

¥2000元起

商标注册

一个好品牌从商标开始

¥1480元起

公司注册

注册公司全程代办

¥0元起

    官方电话官方服务
      官方网站八戒财税知识产权八戒服务商企业需求数字市场
相似回答
大家正在搜