1、MySQL主从复制
但我们仔细观察我们会发现,当我们的项目都是用的单体数据库时,那么就可能会存在如下问题:
- 读和写所有压力都由一台数据库承担,压力大
- 数据库服务器磁盘损坏则数据丢失,单点故障
为了解决上述提到的两个问题,我们可以准备两 (多) 台MySQL,一台主(Master)服务器,一台从(Slave)服务器,主库的数据变更(写、更新、删除这些操作) ,需要同步到从库中 (主从复制) 。而用户在访问我们项目时,如果是写操作(insert、update、delete),则直接操作主库;如果是读操作(select) ,则直接操作从库,这种结构就是读写分离啦。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b1Di4XGO-1657800853974)(https://upload-images.jianshu.io/upload_images/28142708-48c8098f0912bbbb.pngimageMogr2/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重做中继日志中的事件,将数据变更反映它自己的数据
1.2、主从库搭建
在环境搭建之前,我们需要准备好两台服务器,如果生活富裕使用的是两台云服务器的时候记得要开放安全组,即防火