我们在平时工作中,使用最多的数据库就是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元起
查
看
更
多