网上真的很多这种资料了,但是大多数都是不全面的,有的甚至纯文本文字,我的天,纯文字你叫别人凭空想象你这门技术怎么实现?有的踩坑又不说,更多的是复制粘贴,佩服了,还是那句话,自己根本没实现过的技术,拿别人的东西当自己原创,佩服。
一:Mysql主从复制同步的优点:
1:读写分离,缓解服务器访问压力!更加有利于做报表系统!
主从复制就是对主库master进行增删改操作;同时数据的变化会默认毫秒级同步到slave从库;数据是一样的;那么我们就可以在项目中配多数据源拆分处理读写请求;如果是增删改,那就在主库进行。大多数数据库都是大量的查操作造成的性能瓶颈,这里就让读的请求全部去从库。
从库的操作不会同步回主库;所以我们在一主多从的情况下可以拆分项目线进行生产数据的开发测试。
2:有利于测试和本地开发。
这一点我深有体会;开发库测试库的脏数据问题严重;给开发测试工作带来很多不方便。有的接口会有性能问题但是少量的开发库测试库数据根本没法复现。之前在某厂订单数据单表去到了六千万,那张表的操作都是非常慢。开发的接口也是要非常注意。
3:失败迁移;有利于容灾;Plan B计划可减少损失。
缺点:
1: 提高了生产成本!要新加服务器;某主管就明确告诉我提议不错但是公司不考虑增加这笔生产成本。
2:维护成本增加;对开发人员有一定难度系数。每一个简单的demo当真的放到了生产环境去面对复杂的生产;那么对开发员人要求还是较高的。
主从复制可通过配置,在主库服务器崩溃或者不可用的时候,把请求转移到从库中;因为有binlog日志的存在,对一些误操作也好做数据清洗!(阿里云日志CSV格式的也行)。
二:主从复制同步的原理:
原理其实非常简单:
1.数据库通过bin-log二进制文件,记录下master主库所有sql 操作。
2.读取bin-log文件里面的sql操作。
3.Slave_IO这条线程把binlog操作写到了从库专属的relay-log重做日志。
4.Slave_SQL这条线程,把relay-log重做日志的操作读出来,并按照日志说的操作开始对从库动手动脚。
这就是同步的底层原理(个人理解,如果有误,请告诉我,一起讨论)。
三:主从复制的手把手实操:
这里用Mac电脑上的mysql做主库,Windows系统做从库。注意两台机器一定要关闭防火墙相互ping得通。mysql的主从机制,与什么操作系统毫无关系,一点鸡毛关系都没有,最多就是用惯了的操作系统忽然变就不适应而已,对功能没有半毛钱关系,但是一定一定跟网络会有关系,ping不通,就玩不起。
(1)Mac 主库配置:
Mac系统的mysql重启在这个位置。stop按完后你就会看到按钮变成了start。在修改了配置文件都记得要重启一下mysql。