主从复制的介绍
MySQL 主从复制是指将一个 MySQL 服务器的数据复制到其他 MySQL 服务器上的过程。在主从复制中,一个 MySQL 服务器(称为“主服务器”或“主节点”)充当源,另一个或多个 MySQL 服务器(称为“从服务器”或“从节点”)充当目标。主服务器将更新和更改记录到二进制日志(binary log)中,并将其发送到从服务器,从服务器然后在自己的副本中执行相同的操作,以保持与主服务器同步。
主从复制的好处是可以将负载分散到多个服务器上,从而提高整个应用程序的性能。此外,可以将主服务器用作备份,以保证数据的安全性。
主从复制过程中需要注意以下几点:
首先需要在主服务器上启用二进制日志,以记录所有的更改操作。
然后需要在主服务器上创建一个可供从服务器使用的账户,并赋予它复制权限。
在从服务器上需要配置主服务器的连接信息和二进制日志的位置,以便从服务器能够正确地获取并应用主服务器上的更改。
在主服务器上进行更改时需要注意潜在的主从同步延迟,以避免在从服务器上执行与主服务器不一致的操作。
从服务器上可以使用“只读”模式来防止在从服务器上执行写操作,以保证数据的一致性
主从复制的可用场景
通过主从复制,可以实现多种应用场景,例如:
1、实现数据备份和灾难恢复。可以将主服务器上的数据复制到多个从服务器上,当主服务器发生故障时,可以快速切换到从服务器上,保障业务的连续性。
2、支持读写分离。可以将读操作分发到从服务器上执行,从而减轻主服务器的压力,提高系统的读取性能。
支3、持分布式计算。可以将不同的业务逻辑部署到不同的服务器上,并通过主从复制实现数据同步,从而实现分布式计算。
主从复制的架构
在 MySQL 中,有以下几种主从复制架构:
1、一主一从复制:即一台 MySQL 服务器作为主服务器,一台 MySQL 服务器作为从服务器,主服务器上的数据更新会同步到从服务器。
2、一主多从复制:即一台 MySQL 服务器作为主服务器,多台 MySQL 服务器作为从服务器,主服务器上的数据更新会同步到所有从服务器。
3、多主一从复制:即多台 MySQL 服务器作为主服务器,一台 MySQL 服务器作为从服务器,所有主服务器上的数据更新会同步到从服务器。
4、环形复制:即多台 MySQL 服务器互相作为主从服务器,形成一个环形的复制拓扑结构。
5、级联复制:指在主从复制的基础上,再增加从服务器,并将其中一台从服务器作为其他从服务器的主服务器,实现多层级的数据复制。
主从复制原理
MySQL主从复制是一种异步复制模型,主要包括以下几个组件:
主服务器:主数据库,负责处理所有写操作。
从服务器:副本数据库,主要负责读操作,并从主服务器复制数据。
- 二进制日志(Binary Log):主服务器的二进制日志记录了所有更改的数据。
- 中继日志(Relay Log):从服务器的中继日志记录了从主服务器复制的数据。
- dump线程:为每个Slave的I/O Thread启动一个dump线程,用于向其发送binary log events。
- SQL线程:从服务器上运行的线程,在中继日志中执行主服务器的更改操作。
- I/O线程:从服务器上运行的线程,负责从主服务器读取二进制日志。
MySQL主从复制的工作原理如下:
- 主服务器捕获所有更改的数据,并将这些数据写入二进制日志,通过dump Thread 线程向一个从节点发送日志。
- 从服务器上的I/O线程连接到主服务器并应用二进制日志记录数据的更改。
- I/O线程将数据写入从服务器的中继日志。
- 从服务器上的SQL线程读取中继日志,并在从服务器上执行主服务器的更改操作。
除了以上组件外,MySQL主从复制还有以下几个重要的概念:
- 主服务器的位置标识(文件名和位置):标识了主服务器的最后写入二进制日志的位置,从服务器将从主服务器的这个位置开始继续读取二进制日志。
- 复制过滤器:可以在主服务器和从服务器上配置,以过滤不需要复制的数据或表。
- 多个从服务器:可以配置多个从服务器,以应对大量并发读取请求的场景。
总之,MySQL主从复制通过异步复制将主数据库的数据复制到副本数据库上,从而实现数据备份和读取负载平衡的效果。
主从复制配置
主从服务器mysql版本保持一致
主服务器配置
1、启用二进制日志,并设置全局唯一的ID号
[mysqld]
log_bin
server-id=#
log-basename=master #可选项,设置datadir中日志名称,确保不依赖主机名
server-id的取值范围
1 to 4294967295 (>= MariaDB 10.2.2),默认值为1
0 to 4294967295 (<= MariaDB 10.2.1),默认值为0,如果从节点为0,所有master都将拒绝此slave的连接
2、创建复制账户
grant replication slave on *.* to "copy"@"10.0.0.%" identified by "lgw@1234";
3、备份主服务器文件(该步骤主要用于已经使用一段时间的mysql服务器添加从服务器)
mysqldump -uroot -p -A -F --single-transaction --master-data=1 >/mnt/all.sql
4、查看二进制日志的文件和位置开始复制
show master logs;
从服务器配置
1、启动中继日志
[mysqld]
server_id=# #为当前节点设置一个全局惟的ID号
log-bin
read_only=ON #设置数据库只读,针对supper user无效
relay_log=relay-log #relay log的文件路径,默认值hostname-relay-bin
relay_log_index=relay-log.index #默认值hostname-relay-bin.index
2、重启重服务器mysqld
service mysqld restart
3、编辑备份的sql文件,配置主服务器地址和二级制日志,还原数据库备份
4、查看从服务器配置信息
show slave
5、启动从服务器线程
start slave;
主从服务器相关
1. 限制从服务器为只读
read_only=ON
#注意:此限制对拥有SUPER权限的用户均无效
注意:以下命令会阻止所有用户, 包括主服务器复制的更新
FLUSH TABLES WITH READ LOCK;
2、复制功能相关的文件
- master.info:用于保存slave连接至master时的相关信息,例如账号、密码、服务器地址等
- relay-log.info:保存在当前slave节点上已经复制的当前二进制日志和本地relay log日志的对应关系
- mariadb-relay-bin.00000#: 中继日志,保存从主节点复制过来的二进制日志,本质就是二进制日志
注意:在 MySQL 主从复制中,Master 服务器的二进制日志是不能随意截断的。如果截断了,那么 Slave 服务器就无法正确地进行数据同步,可能会导致数据不一致或丢失;因此,在进行二进制日志清理时,应当先停止数据同步,等待 Slave 服务器将所有需要的数据同步完成后再进行清理操作
总结:创建账户时,需要使用flush privileges;提交刷新权限,不然后导致远程连接情况,出现报错