概述
1.什么是主从复制
主从复制是指将主库的 DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持一致。
2.主从复制作用
-
数据备份:通过主从复制,可以将主数据库的数据复制到一个或多个从数据库中,以实现数据备份和灾难恢复。当主数据库出现故障时,可以快速地将从数据库提升为主数据库,并继续提供服务。
-
负载均衡:通过主从复制,可以将读操作分发到从数据库上,从而减轻主数据库的负载,提高系统的并发能力和性能。
-
数据分析:通过主从复制,可以将主数据库中的数据复制到从数据库中进行分析,避免对主数据库产生影响。
-
高可用性:通过主从复制,可以实现数据库的高可用性,当主数据库出现故障时,可以快速地将从数据库提升为主数据库,保证系统的持续可用性。
3.原理
1、主从同步的过程中,主库会将所有的操作事件记录在 binlog 中,
2、如果binlog 日志发生了变化,主库生成一个 binlog dump 线程向从库 I/O 线程传送 binlog
3、从库上的 I/O 线程将 binlog 复制到自己的 relay log 中
4、最终由从库中的 SQL 线程读取 relay log 中的事件重放到从库上
4.同步策略
- 异步复制:默认同步方式,客户端在向服务端发送请求后,master 处理完之后,直接返回客户端结果,接着在将对应的 log 信息发送给 slave 节点。主库不会等待从库的确认,因此效率较高。但在主库故障时可能会丢失一部分数据。
- 半同步复制:master 处理完自身操作,将对应的 binary log 发送给从服务器,从服务器通过 io thread 写入到 relay log 中,然后将结果返回给 master,master 在收到 salve 的响应之后在返回给客户端。这样可以减少数据丢失的可能性,但会增加主库的延迟。
- 同步复制:主库将变更写入二进制日志后,等待所有从库确认已收到并应用了这些变更,主库才会认为事务提交成功。这样可以确保所有从库与主库的数据完全一致,但会显著增加主库的延迟,并且如果有任何一个从库出现故障或网络延迟,整个系统的性能都会受到影响。
- 并行复制:在MySQL 5.6及以后的版本中引入了并行复制的功能,可以通过多线程并发地将变更发送给多个从库,从而提高复制性能。
选择适合的主从同步策略需要根据具体的业务需求和系统性能来进行权衡。异步复制适用于对数据一致性要求不高,但对性能要求较高的场景;半同步复制适用于对数据一致性和性能都有一定要求的场景;同步复制适用于对数据一致性要求非常高的场景,但会带来较大的延迟。并行复制可以在高负载情况下提升复制性能。
部署
1.安装
首先安装两台数据库,这里我是采用的虚拟机进行实现就不过多叙述,安装过程可以参考另外一篇博客:Linux(centos)安装 MySQL 8 数据库(图文详细教程)。
2.主数据库修改配置信息
选择一台为主机,修改配置文件信息
vim /etc/my.cnf
添加配置内容
#服务器 id,随意,但要唯一
server-id = 1
#二进制文件存放路径
log-bin = mysql-bin
#参数用于排除自带的数据库。
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
#二进制日志格式,建议使用ROW格式以获得更好的兼容性和可靠性。
binlog-format = ROW
重启主机服务器
systemctl restart mysqld
配置一个从机连接账户
配置权限账号
CREATE USER 'test'@'%' IDENTIFIED BY '123456';
#授权账号复制权限
GRANT REPLICATION SLAVE ON *.* TO 'test'@'%';
#刷新配置
FLUSH PRIVILEGES;
获取当前二进制日志文件的名称和位置
SHOW MASTER STATUS;
结果需要记录一下,后面从机连接的时候需要使用
3.从数据库配置信息
修改配置文件信息
vim /etc/my.cnf
添加配置信息
#注意和主库的id不一致并且唯一就可以
server-id = 2
#不同步相关的库
replicate-ignore-db = mysql
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
重启从数据库
systemctl restart mysqld
连接主从数据库
参数解释:
MASTER_HOST : 设置要连接的主服务器的ip地址
MASTER_USER : 设置要连接的主服务器的用户名
MASTER_PASSWORD : 设置要连接的主服务器的密码
MASTER_LOG_FILE : 设置要连接的主服务器的bin日志的日志名称,即第2步得到的信息
MASTER_LOG_POS : 设置要连接的主服务器的bin日志的记录位置,即第2步得到的信息,(这里注意,最后一项不需要加引号。否则配置失败)
change master to master_host='192.168.137.100',master_user='test',master_password='123456',master_log_file='binlog.000006',master_log_pos=155;
开启同步
start slave
查看启动状态
show slave status\G;
下面两项必须都是yes才表示配置成功,否则必须stop slave,检查配置修改正确后再次start slave ,直到都是yes为止。
测试
在主表增删改,从表也会对应的相关操作,表示成功搭建主从复制。