MySQL主从复制三种模式

MySQL主从复制是一种常用的数据库复制技术,用于将一个MySQL数据库的数据复制到其他数据库服务器上,以实现数据备份、负载均衡和故障恢复等功能。MySQL主从复制有三种模式:基于二进制日志的复制、基于GTID的复制、以及半同步复制。下面将分别介绍这三种模式,并提供代码示例进行演示。

1. 基于二进制日志的复制

基于二进制日志的复制是MySQL主从复制最常用的方式。在这种方式下,主服务器将所有的更新操作记录到二进制日志中,从服务器通过读取主服务器的二进制日志来获取这些更新操作,并在从服务器上执行相同的操作。下面是一个示例,演示如何设置基于二进制日志的复制:

主服务器配置

首先,在主服务器的配置文件my.cnf中添加以下配置:

[mysqld]
server-id=1
log-bin=mysql-bin

server-id是主服务器的唯一标识,可以是任意的正整数。log-bin指定了二进制日志文件的前缀。

然后,重启MySQL服务使配置生效。

从服务器配置

在从服务器的配置文件my.cnf中添加以下配置:

[mysqld]
server-id=2

server-id是从服务器的唯一标识,需要与主服务器不同。

重启MySQL服务使配置生效。

启动复制

在主服务器上创建一个用于复制的用户,并授予复制权限:

CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

然后,通过以下命令查看主服务器的二进制日志文件名和位置:

SHOW MASTER STATUS;

将输出的文件名和位置信息记录下来。

接下来,在从服务器上执行以下命令,配置复制参数:

CHANGE MASTER TO MASTER_HOST='master_host', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='filename', MASTER_LOG_POS=position;

其中,master_host是主服务器的IP地址或域名,filenameposition分别是上一步中记录的文件名和位置信息。

最后,启动复制:

START SLAVE;

通过以下命令查看复制状态:

SHOW SLAVE STATUS\G;

如果复制状态中的Slave_IO_RunningSlave_SQL_Running都为Yes,则表示复制已成功启动。

2. 基于GTID的复制

GTID(Global Transaction Identifier)是MySQL 5.6版本引入的一种全局事务标识符。基于GTID的复制不再依赖于二进制日志的文件名和位置,而是使用事务的全局标识符来标记和复制事务。下面是一个示例,演示如何设置基于GTID的复制:

主服务器配置

首先,在主服务器的配置文件my.cnf中添加以下配置:

[mysqld]
server-id=1
gtid-mode=ON
enforce-gtid-consistency=ON

server-id是主服务器的唯一标识,可以是任意的正整数。gtid-modeenforce-gtid-consistency分别开启了GTID模式和强制GTID一致性。

然后,重启MySQL服务使配置生效。

从服务器配置

在从服务器的配置文件my.cnf中添加以下配置:

[mysqld]
server-id=2
gtid-mode=ON
enforce-gtid-consistency=ON

server-id是从服务器的唯一标识,需要与主服务器不同。

重启MySQL服务使配置生效。

启动复制

在主服务器上创建一个用于复制的用户,并授予复制权限,同样需要启用GTID:

CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
SET GLOBAL gtid_slave_pos = 'current_pos';
FLUSH PRIVILEGES;
``