在当前系统中,后台管理系统及移动端的用户在进行数据访问时都是直接操作数库MySQL的。
而MySQL只有一台,那么就可能会存在如下问题:
读(select)和写(insert update delete)所有压力都由一台数据库承担,压力大
数据库服务器磁盘损坏则数据丢失,单点故障
为了解决上述提到的两个问题,我们可以准备多台MySQL,其中一台主(Master)服务器,多台从(Slave)服务器,同时对外提供服务。
主数据库负责数据的写入操作,而从数据库则负责数据的查询操作,我们把这种思路称之为读写分离,
而在这里存在一个问题,就是主库中的数据要实时的向各个从库进行同步,以保证整个数据系统的完整性,我们把这个过程称为主从复制。
MySQL数据库默认是支持主从复制的,底层基于MySQL数据库自带的 二进制日志 功能实现。
二进制日志: 也成为binlog,这是MySQL自带的一种日志功能,它会记录下所有的增删改语句,但是不包括查询语句。
主从复制原理:
MySQL的主从复制其实就是由主库生成binlog,里面记录用户对数据库产生影响的操作。
从库负责读取这个日志,并进行解析得到对应的SQL语句,然后在自己所在的服务器上执行,就可以得到跟主库一致的数据了。

MySQL复制过程分成三步:
- master将数据变更写入二进制日志
- slave将master的二进制日志拷贝到它的中继日志(relay log)
- slave重做中继日志中的事件,生成对应的数据存储到自己的数据区
1.准备Master和Slave两台数据库准备配置读写分离,Master为主库
2.配置两台服务器防火墙放行3306端口
3.主库(Master)mysql配置文件配置:
# 1. 修改mysql的配置文件/etc/my.cnf,保证下面两项
vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin #[必须]启用二进制日志(当前默认已开启)
server-id=1 #[必须]服务器唯一ID(当前默认就是1)
# 2. 重启mysql服务
systemctl restart mysql
# 3. 登录mysql
mysql -uroot -p1234
# 4. 在mysql命令行中,创建数据同步的用户并授权
# 本操作会在mysql中创建一个账户xiaoming,密码为Root@123456,并且给xiaoming用户授予REPLICATION SLAVE权限。
# 常用于建立复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制。
GRANT REPLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by 'Root@123456';
# 在mysql命令行中,查看master同步状态
show master status;
(从库配置用)

4.从库配置
# 1. 修改mysql的配置文件/etc/my.cnf,保证下面两项
vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin #[必须]启用二进制日志(当前默认已开启)
server-id=2 #[必须]服务器唯一ID(当前默认1,必须手动修改成2)
# 2. 重启mysql服务
systemctl restart mysql
# 3. 登录mysql
mysql -uroot -p1234
# 4. 在mysql命令行中,执行复制的操作
# 注意,这条命令中各项参数,需要根据实际情况进行修改
change master to
master_host='192.168.136.128', -- 主节点ip地址(需要改)
master_user='xiaoming', -- 主节点创建的用于主从复制的账号
master_password='Root@123456', -- 上面账号的密码
master_log_file='mysql-bin.000002', -- 从主节点哪个日志文件开始同步(需要改)
master_log_pos=537; -- 从主节点日志文件的哪个位置开始同步(需要改)
# 5. 在mysql命令行中,开始复制操作
# 启动I/O线程从主库读取binlog,并存储到relaylog中继日志文件中。
# 启动SQL线程读取中继日志,解析后在从库重放。
start slave;
# 6. 在mysql命令行中,查看主从复制的状态
show slave status;

到此为止,主从复制环境已经搭建好了,接下来,我们可以连接上两台MySQL服务器进行测试。
测试时,我们只需要在主库Master执行操作,查看从库Slave中是否将数据同步过去即可。