1、MySQL主从复制
但我们仔细观察我们会发现,当我们的项目都是用的单体数据库时,那么就可能会存在如下问题:
- 读和写所有压力都由一台数据库承担, 压力大
- 数据库服务器磁盘损坏则 数据丢失 ,单点故障
为了解决上述提到的两个问题,我们可以准备两 (多) 台MySQL,一台主( Master )服务器,一台从( Slave )服务器,主库的 数据变更 (写、更新、删除这些操作) ,需要 同步 到从库中 (主从复制) 。而用户在访问我们项目时,如果是 写操作 (insert、update、delete),则直接操作 主库 ;如果是 读操作 (select) ,则直接操作从库,这种结构就是 读写分离 啦。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b1Di4XGO-1657800853974)(https://upload-images.jianshu.io/upload_images/28142708-48c8098f0912bbbb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
在这种读写分离的结构中,从库是可以有多个的
1.1、介绍
MySQL主从复制是一个 异步 的复制过程,底层是基于Mysql数据库自带的 二进制日志 功能。就是一台或多台MySQL数据库(slave,即 从库 )从另一台MySQL数据库(master,即 主库 )进行日志的复制,然后再解析日志并应用到自身,最终实现 从库 的数据和 主库 的数据保持一致。MySQL主从复制是 MySQL数据库自带功能,无需借助第三方工具。
二进制日志:
二进制日志(BINLOG)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但是不包括数据查询语句。此日志对于灾难时的数据恢复起着极其重要的作用,MySQL的主从复制, 就是通过该binlog实现的。默认MySQL是未开启该日志的。
MySQL复制过程分成三步:
- MySQL master 将数据变更写入二进制日志( binary log )
- slave将master的binary log拷贝到它的中继日志( relay log )
- slave重做中继日志中的事件,将数据变更反映它自己的数据