数据库的主从复制技术可以把用户的访问量均匀的分布在不同的服务器上,实现读写分离、负载均衡,每个服务器只承担其中一部分用户量,从而整体上保障了MYSQL的性能。而且还可以带来一定的容错性,如果其中一台数据库服务器挂了,只要其他服务器还在正常工作,用户的访问就不会受到影响。
MYSQL主从复制原理
![](https://frogvps.com/wp-content/uploads/2022/07/20220702a1.jpg)
![](https://frogvps.com/wp-content/uploads/2022/07/20220702a2.jpg)
![](https://frogvps.com/wp-content/uploads/2022/07/20220702a3-1024x538.jpg)
主从复制就是主节点和从节点的同步过程。首先,主节点负责数据的写操作,用户发起写操作→数据更新→写入二进制日志。同时主服务器上会生成一个dump线程,读取二进制日志然后通过网络发送给从节点。从节点开启I/O线程,负责接收主节点发送过来的二进制日志并写入RELAY LOG(中继日志),这时候从节点会再开启一个SQL线程读取日志,完成重放,更新数据。
MYSQL主从复制实现
一主一从实验
主节点配置
1.查看二进制日志是否开启
select @@sql_log_bin;
如果没有开启,需要在配置文件中开启
[mysqld]
log-bin
2.为节点设置一个全局唯一的ID号(为了区分不同的节点)
[mysqld]
server-id=#
log-basename=master
3.查看从二进制日志的文件和位置开始进行复制
SHOW MASTER STATUS;
4.创建有复制权限的用户账号(host为从节点IP地址)
CREATE USER repluser@host identified by '123456';
GRANT replication slave on *.* to repluser@host;
从节点配置
1.启动中继日志
[mysqld]
server_id=#
log-bin
read_only=ON
relay_log=relay-log
relay_log_index=relay-log.index
2.使用有复制权限的用户账号连接至主服务器,并启动复制线程
CHANGE MASTER TO MASTER_HOST='masterhost',
MASTER_USER='repluser',
MASTER_PASSWORD='replpass',
MASTER_LOG_FILE='binlog.xxxxxx',
MASTER_LOG_POS=#;
START SLAVE [IO_THREAD|SQL_THREAD];
SHOW SLAVE STATUS;
或者
CHANGE REPLICATION SOURCE TO SOURCE_HOST='masterhost',
SOURCE_USER='repluser',
SOURCE_PASSWORD='replpass',
SOURCE_LOG_FILE='binlog.xxxxxx',
SOURCE_LOG_POS=#;
START REPLICA [IO_THREAD|SQL_THREAD];
SHOW REPLICA STATUS;