陕西省建设厅特种工报名网站,互联网营销的十五种方式,wordpress顶踩代码,国际热点新闻20201.理解MySQL主从复制原理。
1.1MySQL支持的复制类型
MySQL支持以下几种常见的复制类型#xff1a;
基于语句的复制#xff08;Statement-based Replication#xff0c;SBR#xff09;#xff1a;基于语句的复制是MySQL最早支持的复制方式#xff0c;它通过复制和执行S…1.理解MySQL主从复制原理。
1.1MySQL支持的复制类型
MySQL支持以下几种常见的复制类型
基于语句的复制Statement-based ReplicationSBR基于语句的复制是MySQL最早支持的复制方式它通过复制和执行SQL语句来实现数据的复制和同步即在主服务器上执行SQL语句在从服务器上执行同样的语句。这种方式简单高效但在一些特殊情况下可能会导致数据不一致。默认情况下都是基于语句的复制。基于行的复制Row-based ReplicationRBR基于行的复制是MySQL较新支持的复制方式它将每一行的改变记录下来然后在备库上重放这些改变以实现数据的复制和同步即:把改变的内容复制过去而不是把命令在从服务器上执行一遍。这种方式可以更精确地复制数据的改变但会增加网络传输和存储成本。从MySQL5.0开始支持。混合复制Mixed Replication混合复制是基于语句的复制和基于行的复制的结合MySQL会根据具体情况自动选择使用哪种方式进行复制。默认采用基于语句的复制不行就采用基于行的复制。
1.2为什么要做主从复制
1. 提高读性能通过设置从服务器Slave读操作可以被分摊到主服务器Master和从服务器上从而提高整体的读取性能。主服务器负责处理写操作从服务器负责处理读操作从而降低主服务器的负载提升整个系统的吞吐量。
例如在业务复杂的系统中有这么一个情景有一句sql语句需要锁表导致暂时不能使用读的服务那么就很影响运行中的业务使用主从复制让主库负责写从库负责读这样即使主库出现了锁表的情景通过读从库也可以保证业务的正常运作。
2. 数据冗余和备份通过主从复制从服务器上的数据是主服务器的冗余副本。在主服务器发生故障时从服务器仍然可以提供服务并且可以通过将某个从服务器提升为新的主服务器来快速恢复服务。此外从服务器也可以用于定期的备份操作以确保数据的安全性和可恢复性。
3. 高可用性通过主从复制可以实现数据库的故障转移和高可用性。当主服务器发生故障时可以手动或自动将某个从服务器提升为新的主服务器继续提供数据库服务从而实现快速的故障恢复。
4. 数据分析和报表生成由于从服务器可以处理读操作可以将其用于数据库的数据分析和报表生成等工作。这样可以避免对主服务器造成额外的负载同时提供实时的数据分析和报表服务。
5. 数据分发和跨地域部署主从复制可以用于将数据分发到不同的地理位置的从服务器上从而实现跨地域的数据访问和部署。这对于全球化的应用程序和多地域灾备是非常有用的。
3、架构的扩展。业务量越来越大I/O访问频率过高单机无法满足此时做多库的存储降低磁盘I/O访问的频率提高单个机器的I/O性能。
1.3主从复制基本架构
主从复制是一种常用的数据备份和恢复方法。它的基本架构包括主服务器master和从服务器slave两部分。主服务器负责写操作而从服务器负责读操作。Mysql的主从复制中主要有三个线程masterbinlog dump thread、slaveI/O thread 、SQL thread
1.4主从复制原理
主从复制的原理是通过基于日志的复制方式实现数据的同步。当主服务器上发生数据变更时会将这些变更写入二进制日志Binary Log中。从服务器通过连接到主服务器请求从主服务器获取二进制日志并将这些日志应用到自己的数据库中。
主从复制的基本原理
1. 主服务器生成二进制日志在主服务器上所有的写操作例如插入、更新、删除都会被记录在二进制日志中。这些写操作以事件event的形式被记录下来二进制日志包含了数据库变更的详细信息。
2. 从服务器连接到主服务器从服务器通过连接到主服务器建立一个复制连接。在连接建立时从服务器会获取到主服务器上当前的二进制日志文件名和位置作为复制的起点。
3. 从服务器请求复制数据从服务器会向主服务器发送一个复制请求请求从当前的二进制日志位置之后的写操作事件。主服务器根据复制请求将二进制日志中的事件发送给从服务器。
4. 从服务器应用复制日志从服务器接收到主服务器发送的二进制日志后会解析并应用这些事件到自己的数据库中。从服务器会按照事件的顺序依次执行以保持数据的一致性。
5. 复制链路的维护和监控主从复制过程中主服务器会持续记录二进制日志而从服务器会持续请求和应用这些日志。复制链路需要进行监控和维护以确保复制的正常运行和数据的可靠性。
注主从复制是异步的从服务器在应用写操作之前并不等待主服务器的确认。因此从服务器上的数据可能会有一定的延迟。
1.5MySQL复制常用的拓扑结构
主从类型Master-Slave是MySQL复制中最常见和基本的拓扑结构。在主从复制中主服务器Master是写入和修改数据的主要服务器而从服务器Slave则是主服务器的副本。主服务器将更新的数据记录在二进制日志中并通过网络将这些日志传输到从服务器从服务器会将这些日志应用到自己的数据库中使得从服务器的数据保持与主服务器一致。主主类型Master-Master是一种更高级的复制拓扑结构。在主主复制中有两个或多个服务器被配置为主服务器每个服务器既是主服务器又是从服务器。这意味着每个服务器都可以独立地接收和处理写入操作并将更新的数据传输给其他服务器。主主复制通常用于实现高可用性和负载均衡。级联类型Master-Slave-Slave是一种更复杂的复制拓扑结构。在级联复制中有一个主服务器和多个从服务器。从服务器不仅复制主服务器的数据还充当其他从服务器的主服务器。这种拓扑结构允许级联的复制链其中一个从服务器可以作为另一个从服务器的主服务器以便分散读取请求的负载。
1.6如何实现主从复制
主从复制的基本架构流程
1. 配置主服务器在主服务器上需要开启二进制日志Binary Log功能该功能记录了主服务器上的所有写操作包括更新、删除和插入。同时需要配置主服务器的唯一标识server_id。
2. 配置从服务器在从服务器上需要配置正确的主服务器地址和连接参数包括主服务器的IP地址、端口号、用户名和密码等。同时也需要配置从服务器的唯一标识server_id。
3. 启动复制在从服务器上启动复制进程连接到主服务器并请求复制数据。主服务器将发送二进制日志文件中的写操作事件event给从服务器从服务器接收并应用这些事件将数据复制到自己的数据库。
4. 复制过程复制过程主要包括两个步骤从服务器请求主服务器的二进制日志主服务器将日志发送给从服务器从服务器解析并应用日志中的事件到自己的数据库保持与主服务器的数据一致性。
5. 复制链路的监控和维护可以通过监控工具或命令来查看主从服务器的复制状态和延迟情况。同时也需要定期备份和维护从服务器确保数据的安全性和可恢复性。 2.完成MySQL主从复制。
2.1环境准备
两台机器一主一从。
主master192.168.136.134 port3306
从slave192.168.136.135 port3306
2.2主库配置
设置server-id值并开启binlog参数
[mysqld]
log_bin mysql-bin
server_id 120设置完成并保存后记得重启服务
systemctl restart mysqld建立同步账号
grant replication slave on *.* to slave_test192.168.136.% identified by 123456;grant replication slave: 授予复制从服务器权限on *.*: 应用于所有数据库to ‘slave_test’‘192.168.136.%’: 授权给用户名为’slave_test’只能从IP地址为192.168.136.开头的主机访问identified by ‘123456’: 设置用户的密码为’123456’
注这里的密码为简易密码需要更改密码策略否则会报错可以使用上一步骤中的validate_passwordoff关闭密码策略同样地方修改。
mysql show grants for slave_test192.168.136.%;该命令用于查看用户的授权信息。 锁表设置只读
为后面备份准备注意生产环境要提前申请停机时间
mysql flush tables with read lock;
#提示如果超过设置时间不操作会自动解锁。mysql show variables like %timeout%;FLUSH TABLES WITH READ LOCK; 是一个MySQL语句它的作用是在当前会话中锁定所有表并使它们处于只读状态。这个命令常用于备份数据库或进行一些需要确保数据一致性的操作。 当执行这个命令时MySQL将锁定所有的表防止其他会话对这些表进行写入操作从而保证了数据的一致性。只有在当前会话释放这些表的锁之后其他会话才能对这些表进行写入操作。 需要注意的是执行FLUSH TABLES WITH READ LOCK;之后如果需要对表进行任何修改操作都需要先执行UNLOCK TABLES;来释放表的锁定状态。这样其他会话才能对表进行写入操作。 SHOW VARIABLES LIKE ‘%timeout%’; 是一个MySQL查询语句用于查看与超时相关的变量配置。执行该语句后MySQL将返回所有包含timeout关键字的系统变量和它们的值。 查看主库状态
查看主库状态即当前日志文件名和二进制日志偏移量
show master status;备份数据库数据
mysqldump -uroot -p -A -B | gzip /backup/mysql_bak.$(date %F).sql.gzmysqldump: 是一个MySQL提供的工具用于导出数据库结构和数据。-uroot: 指定了MySQL的用户名为root用于授权访问数据库。-p: 告诉mysqldump以交互方式提示输入密码。-A: 表示导出所有数据库。-B: 表示导出全部表结构和数据。|: 管道操作符将前一个命令的输出作为后一个命令的输入。gzip: 使用gzip工具对数据进行压缩。 : 重定向操作符将输出结果保存到指定的文件中。/backup/mysql_bak.$(date %F).sql.gz: 指定了备份文件的路径和名称其中使用了date命令的参数%F表示当前日期的完整格式例如2023-07-25以保证每次备份都有唯一的文件名。 解锁
释放表的锁定状态。这样其他会话才能对表进行写入操作。
mysql unlock tables;主库备份数据上传到从库
scp /backup/mysql_bak.2023-07-17.sql.gz 192.168.136.135:/backups/scp: 是一个用于在不同主机之间安全地进行文件传输的命令。/backup/mysql_bak.2023-07-17.sql.gz: 是本地的要传输的文件路径和名称。192.168.136.135: 是远程服务器的IP地址或主机名。:/backups/: 是远程服务器上接收文件的目录路径。 2.3从库上设置
设置server-id值并关闭binlog参数 [mysqld]server-id130
我这里是新开的虚拟机还没设置bin_log参数所以没有关闭有的话只需要注释掉即可。 还原从主库备份数据
cd /server/backup/
gzip -d mysql_bak.2015-11-18.sql.gz
mysql -uroot -p mysql_bak.2015-11-18.sql
#检查还原
mysql -uroot -p -e show databases; 主库的数据库如下 从库的数据库 设定从主库同步
mysql change master to
MASTER_HOST192.168.136.134,
MASTER_PORT3306,
MASTER_USERslave_test,
MASTER_PASSWORD123456,
MASTER_LOG_FILEmysql-bin.000001,
MASTER_LOG_POS455; 启动从库同步开关
mysql start slave;
# 检查状态
mysql show slave status\G