文章目录
- 一、先辟谣:主从复制和分布式没有绑定关系
- 二、主从复制到底是干啥的?大白话一句话讲懂
- 1、什么是MySQL主从复制?
- 2、主从复制核心就两个使命,跟分布式没关系
- 三、重点来了:不分库、不分布式,为啥也要做主从?
- 1、单机数据库没有容错,一出事就是线上重大事故
- 2、数据备份更安全,不怕误删、不怕数据损坏
- 3、读多写少是所有项目常态,单库扛不住查询压力
- 四、主从复制 和 分布式、分库分表 到底啥关系?
- 第一层基础:主从复制
- 第二层进阶:分库分表
- 第三层终极:分布式数据库
- 五、MySQL主从复制底层原理(新手极简版,一看就懂)
- 1、主库记录Binlog日志
- 2、从库主动拉取日志
- 3、从库本地重放执行
- 六、生产环境标准用法(不管项目大小,统一这么搭)
- ✅ 一主一从 标配架构
- 七、新手手把手实操:一主一从快速搭建(生产最简版,照着就能搭)
- 前提准备
- 第一步:主库修改配置,开启Binlog
- 第二步:主库创建专门同步账号
- 第三步:从库修改配置,设置唯一ID
- 第四步:从库绑定主库,开启同步
- 第五步:检查主从同步是否成功
- 第六步:代码简单读写分离(不用中间件)
- 八、新手必避的3个主从复制误区
- ❌ 误区1:小项目不用做主从
- ❌ 误区2:主从复制就是分布式
- ❌ 误区3:做主从就是为了分库分表
- 九、搭建后主从日常运维小提醒
- 十、全文核心总结(记住两句就够用)
很多刚接触后端开发、数据库运维的小伙伴,都有一个一模一样的疑惑:
主从复制、一主多从这些东西,是不是只有做分库分表、搞分布式集群的大型项目才需要?
自己平时写个小项目、普通业务系统,单机MySQL跑着好好的,是不是压根没必要折腾主从复制?
今天把话直接撂这:主从复制根本不是分布式专属功能!
不管你的项目是个人小Demo、中小企业普通业务,还是大厂分布式大集群,只要项目上线正式环境、存重要数据,主从复制就是标配刚需。
分布式只是主从复制的一个延伸用法而已,不是前提。
1、主从复制到底是干嘛的?核心作用一句话讲透;
2、为啥不是分布式、不分库分表,也必须搭主从;
3、主从复制底层原理+实操搭建+运维避坑全套干货。
一、先辟谣:主从复制和分布式没有绑定关系
先给所有人纠正一个核心误区:
不要把「主从复制」和「分布式、分库分表」捆绑在一起。
很多人误以为:
只有项目做大了、数据上亿、搞分库分表做分布式架构,才需要主从复制。
❌完全搞反了!
主从复制是MySQL最基础的高可用、数据备份方案;
分布式、分库分表,才是后来搭在主从基础上的高级扩展方案。
简单说:
✅ 小项目上线:单机也要做主从,为了不丢数据、数据库崩了不瘫痪;
✅ 大项目分布式:先做主从,再搞分库分表,主从是地基,分布式是高楼。
地基不打好,高楼根本不稳。
二、主从复制到底是干啥的?大白话一句话讲懂
1、什么是MySQL主从复制?
两台或多台MySQL数据库,一台当主库(Master),专门负责干活写数据;
一台或多台当从库(Slave),专门实时同步主库所有数据。
主库新增、修改、删除任何数据,从库自动跟着同步,数据和主库一模一样,毫秒级延迟,全程自动不用人工干预。
2、主从复制核心就两个使命,跟分布式没关系
第一:保命(高可用,防止数据库挂了服务崩)
单机MySQL最大的风险就一个:数据库一宕机,全站直接瘫痪。
主库万一断电、死机、硬盘坏了,从库数据完好无损,随时能顶上当新主库,业务不用停、数据不会丢。
第二:减负(读写分离,查询不卡写操作)
绝大多数项目都是读多写少,看数据的人多,改数据的人少。
主库专门负责新增、修改、删除写操作;
所有查询、列表、后台统计全部扔给从库。
读写分开,互不影响,系统瞬间丝滑,不用升级昂贵硬件。
三、重点来了:不分库、不分布式,为啥也要做主从?
很多新手疑惑:我项目数据不多、也不分库分表、不搞分布式,就一台数据库跑业务,为啥多此一举搭主从?
给你三个非做不可的真实理由,每个都是生产环境踩坑踩出来的经验。
1、单机数据库没有容错,一出事就是线上重大事故
单机MySQL就相当于:鸡蛋全放一个篮子里。
服务器重启、硬盘故障、误删数据、升级维护,随便出一点问题:
网站打不开、小程序崩了、用户用不了、业务直接停摆。
有主从就不一样:主库随便维护、升级、重启,从库兜底顶上去,用户完全感知不到,业务零中断。
2、数据备份更安全,不怕误删、不怕数据损坏
很多人只靠手动备份数据库,这种方式太慢、太滞后,误删数据根本来不及恢复。
主从复制是实时热备份,数据秒级同步,主库数据丢了、误删了,从库完好无损,随时能恢复,数据绝对安全。
3、读多写少是所有项目常态,单库扛不住查询压力
哪怕你的项目不算大,用户一多,订单列表、用户查询、后台报表全挤在一个库里查:
查询慢、页面卡顿、写操作被阻塞,下单都卡半天。
搭个主从,读写一分离,查询压力全丢从库,主库安心处理写业务,性能直接翻倍,不用加钱升级服务器配置。
四、主从复制 和 分布式、分库分表 到底啥关系?
给大家捋清楚层级关系,一眼就懂:
第一层基础:主从复制
解决:数据库不宕机、数据不丢失、读写压力分流。
适用:所有上线项目,不管大小。
第二层进阶:分库分表
解决:单表数据量太大、写入并发太高。
适用:大数据量、高并发核心业务。
第三层终极:分布式数据库
解决:超大规模集群、自动扩容、全自动高可用。
适用:大厂超级流量业务。
总结一句话:
主从复制是打底必备,分库分表和分布式是后期升级,不要搞反顺序,不要混淆使用场景。
五、MySQL主从复制底层原理(新手极简版,一看就懂)
不用记复杂源码,记住三个步骤就行:
1、主库记录Binlog日志
主库所有增删改写操作,全部记录在Binlog日志里,相当于数据库的操作流水账。
2、从库主动拉取日志
从库专门开一个线程,实时监听主库Binlog日志,有新操作就立刻拉过来。
3、从库本地重放执行
从库把拉过来的日志,在自己本地重新执行一遍,数据就和主库一模一样了。
整个过程全自动、实时同步,开发代码不用改一行,完全零侵入。
六、生产环境标准用法(不管项目大小,统一这么搭)
不用搞复杂一主多从,新手和中小企业标准配置就够:
✅ 一主一从 标配架构
1、主库:只负责 INSERT、UPDATE、DELETE 写操作;
2、从库:负责所有 SELECT 查询、后台列表、报表统计;
3、代码层面简单做读写分离,写走主库,读走从库。
成本低、配置简单、维护省事,安全和性能全都有。
七、新手手把手实操:一主一从快速搭建(生产最简版,照着就能搭)
不讲花里胡哨配置,就搞最实用的一主一从,两台MySQL即可,单机虚拟机、云服务器都能搞,5分钟就能搭完。
前提准备
两台MySQL节点,版本保持一致就行(5.7、8.0都没问题):
主库Master:192.168.1.100
从库Slave:192.168.1.101
两台库数据初始状态一样,提前把历史数据导一份到从库,避免同步对不上。
第一步:主库修改配置,开启Binlog
编辑主库my.cnf(Windows就是my.ini),加下面几行核心配置:
# 数据库唯一ID,主从必须不一样,主库设1就行 server-id=1 # 开启binlog日志,同步核心靠这个 log-bin=mysql-bin # 日志格式必须ROW,数据同步精准不出错 binlog-format=ROW # 不需要同步的库可以忽略,减少没必要同步压力 binlog-ignore-db=mysql改完保存,重启MySQL主库生效。
第二步:主库创建专门同步账号
别用root账号同步,安全规范,单独建一个同步专用账号:
# 创建同步用户,密码自己设CREATEUSER'slave_sync'@'%'IDENTIFIEDBY'123456';# 给用户复制同步权限GRANTREPLICATIONSLAVEON*.*TO'slave_sync'@'%';# 刷新权限FLUSHPRIVILEGES;# 查看主库状态,记录文件名和偏移量,后面从库要用SHOWMASTERSTATUS;执行完记住两个值:File文件名和Position偏移量,不要关闭窗口,等下配置从库要填。
第三步:从库修改配置,设置唯一ID
从库只需要改一个地方,server-id必须和主库不一样:
# 从库ID不能和主库重复,设2 server-id=2 # 一般从库不开binlog,不需要再往下同步就不用加 # log-bin不用开,节省资源改完重启从库MySQL。
第四步:从库绑定主库,开启同步
从库执行下面SQL,把上面主库查到的文件名、偏移量替换进去:
# 停止从库原有同步STOP SLAVE;# 绑定主库信息、同步账号、日志文件和位置CHANGE MASTERTOMASTER_HOST='192.168.1.100',MASTER_USER='slave_sync',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=156;# 开启从库同步STARTSLAVE;第五步:检查主从同步是否成功
从库执行查看状态:
SHOWSLAVESTATUS\G只要看到这两个参数为Yes,就代表搭建成功:
✅ Slave_IO_Running: Yes
✅ Slave_SQL_Running: Yes
两个都是Yes,主从就通了。主库新增修改数据,从库秒级自动同步。
第六步:代码简单读写分离(不用中间件)
新手不用上Sharding-JDBC那么复杂,代码里简单处理就行:
新增、修改、删除 → 连接主库
查询、列表、后台统计 → 连接从库
简单粗暴,零复杂度,够用、稳、好维护。
八、新手必避的3个主从复制误区
❌ 误区1:小项目不用做主从
错!项目越小越扛不住事故,单机一崩直接凉凉,主从是最低成本保命方案。
❌ 误区2:主从复制就是分布式
错!主从只是数据同步和高可用,跟分布式半毛钱直接关系,只是分布式的基础而已。
❌ 误区3:做主从就是为了分库分表
错!分库分表是扩容用的,主从是保命+减负用的,目的完全不一样。
九、搭建后主从日常运维小提醒
1、平时开发、改业务只操作主库,千万别手写改从库数据,会直接同步错乱;
2、主从延迟正常毫秒级,不用慌,业务不用强一致性完全够用;
3、定期备份还是要做,主从是高可用,备份是最后兜底,两个不冲突。
十、全文核心总结(记住两句就够用)
1、MySQL主从复制不是分布式专属,所有上线项目都要做,核心是保数据安全、保服务不宕机、做读写分离;
2、主从是基础打底,分库分表、分布式是后期升级,先做主从,再谈架构扩容。