MySQL Replication

本文详细介绍了MySQLReplication的工作原理,包括主服务器记录更改、从服务器同步数据的过程,以及如何配置主从服务器、日常监控和维护,还包括常见问题的解决策略和主从服务器切换的步骤。
摘要由CSDN通过智能技术生成

0 序言

MySQL Replication 是 MySQL 中的一个功能,允许从一个 MySQL 数据库服务器(称为主服务器或 master)复制数据和数据库结构到另一个服务器(称为从服务器或 slave)。这种复制是异步的,意味着从服务器不需要一直连接到主服务器。主服务器上的数据更改(如 INSERT、UPDATE、DELETE 语句)会被记录在一个叫做二进制日志(binary log)的特殊日志文件中。然后,从服务器可以连接到主服务器并读取这些更改,并在自己的数据库上应用这些更改。

MySQL数据库复制操作大致可以分成3个步骤:

步骤01 主服务器将数据的改变记录到二进制日志(binary log)中。

步骤02 从服务器将主服务器的binary log events复制到它的中继日志(relay log)中。

步骤03 从服务器重做中继日志中的事件,将数据的改变与从服务器保持同步。

1 实现主从复制

1.1  配置主服务器(Master)

设置唯一的服务器 ID:在 my.cnf 或 my.ini 配置文件中,为每个服务器设置一个唯一的 server-id。
启用二进制日志:确保 log-bin 选项已启用,以记录所有更改。
创建复制用户:在主服务器上创建一个专门的复制用户,并为其分配复制权限。

1.2 配置从服务器(Slave)

 设置唯一的服务器 ID:同样,在 my.cnf 或 my.ini 配置文件中,为每个从服务器设置一个唯一的 server-id。
指定主服务器信息:在从服务器上,配置 master_host、master_user、master_password、master_log_file 和 master_log_pos 等参数,以指定主服务器的位置和复制起始点。
启动从服务器复制线程:在从服务器上执行命令,启动 SQL 线程和 IO 线程,开始复制过程。

2  日常管理和维护

2.1 了解服务器的状态

SHOW SLAVE STATUS\G

在SHOW SLAVE STATUS的输出中,关注以下几个字段来了解复制进度:

Slave_IO_Running: 显示IO线程的状态。它应该是Yes,表示IO线程正在运行并读取主服务器的二进制日志。
Slave_SQL_Running: 显示SQL线程的状态。它也应该是Yes,表示SQL线程正在运行并执行从IO线程读取的中继日志中的事件。
Seconds_Behind_Master: 显示从服务器复制延迟的秒数。如果这个数字很大,表示从服务器落后于主服务器很多。
Relay_Log_File 和 Relay_Log_Pos: 显示当前正在读取的中继日志文件和位置。
Master_Log_File 和 Master_Log_Pos: 显示主服务器上二进制日志的当前位置和文件名,从服务器将从这个位置开始读取。

2.2 服务器复制出错的原因

问题一:出现“log event entry exceeded max_allowed_pack”错误。

如果在应用中使用大的BLOG列或者长字符串,那么在从服务器上回复时可能会出现“log event entry exceeded max_allowed_pack”错误,这是因为含有大文本的记录无法通过网络进行传输,解决方法是在主从服务器上添加max_allowed_packet参数(默认设置是1MB),具体如下:

同时,在my.cnf里设置max_allowed_packet=16MB,数据库重新启动之后该参数将有效。

问题二:多主复制时的自增长变量冲突问题。

大多数情况下使用一台主服务器对一台或者多台从服务器,但是在某些情况下可能会将多个服务器配置为复制主服务器,所以使用auto_increment时应采取特殊步骤以防止键值冲突,否则插入行时多个主服务器会试图使用相同的auto_increment值。

在多主服务器复制到从服务器过程中,迟早会发生主键冲突,为了解决这种情况,可以重新设置不同主服务器的这两个参数,比如在A数据库服务器上设置auto_increment_increment=1、auto_increment_offset=1,在B数据库服务器上设置auto_increment_increment=1、auto_increment_offset=0。

3 切换主从服务器

A、B、C三个数据库,A主,B、C从数据库,当A宕机后,

B数据库先停止slave服务,重置为主数据库,my.cnf中设置二进制日志,重启,数据库B上添加具有复制权限的用户;

C数据库重新配置复制参数,slaveB数据库。

A数据库恢复后,考虑A数据库配置为B的从数据库。

MySQL replicationMySQL数据库的一种特性,它允许将数据从一个MySQL服务器复制到另一个MySQL服务器。主要用于实现高可用性、读写分离和数据备份等需求。 MySQL replication基于主从模型,包括一个主服务器和一个或多个从服务器。主服务器负责处理写操作(INSERT、UPDATE、DELETE),而从服务器负责复制主服务器上的数据,并处理读操作(SELECT)。 主服务器将写操作以二进制日志(binary log)的形式记录下来,并将这些日志传递给从服务器。从服务器将这些日志应用到自己的数据库中,以保持与主服务器的数据一致性。 MySQL replication提供了以下几种常见的复制方式: 1. 异步复制(Asynchronous Replication):主服务器将二进制日志发送给从服务器,然后立即返回给客户端,不等待从服务器的响应。这种方式效率较高,但在主服务器故障时可能会丢失一部分数据。 2. 半同步复制(Semi-Synchronous Replication):主服务器将二进制日志发送给至少一个从服务器,并等待至少一个从服务器确认接收到日志后才返回给客户端。这种方式提高了数据的可靠性,但效率稍低。 3. 同步复制(Synchronous Replication):主服务器将二进制日志发送给所有从服务器,并等待所有从服务器确认接收到日志后才返回给客户端。这种方式提供了最高的数据可靠性,但对性能有较大的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值