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地址或域名,filename
和position
分别是上一步中记录的文件名和位置信息。
最后,启动复制:
START SLAVE;
通过以下命令查看复制状态:
SHOW SLAVE STATUS\G;
如果复制状态中的Slave_IO_Running
和Slave_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-mode
和enforce-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;
``