在MySQL中,主从复制是一种常用的数据冗余和负载均衡的方法。基于GTID(全局事务标识符)的复制方式可以提高复制的管理和监控效率,避免了传统复制中的一些问题。以下是一个详细的基于GTID的MySQL主从复制实现教程。
环境准备
假设我们有两台服务器:
- 主服务器:Master
, IP: 192.168.1.100
- 从服务器:Slave
, IP: 192.168.1.101
1. 配置主服务器
修改主服务器的配置
在主服务器的MySQL配置文件中(通常是/etc/my.cnf
或/etc/mysql/my.cnf
),添加以下设置以开启GTID复制:
[mysqld]
server-id = 1
log-bin = mysql-bin
gtid-mode = ON
enforce-gtid-consistency = ON
binlog-format = ROW
server-id
:服务器的唯一标识符。log-bin
:启用二进制日志。gtid-mode
:开启GTID。enforce-gtid-consistency
:强制GTID一致性。binlog-format
:设置二进制日志格式为ROW。
重启MySQL服务
sudo systemctl restart mysqld
创建复制账号
在主服务器上,创建一个用于复制的用户:
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'replica_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
查看GTID信息
运行以下SQL语句,获取当前的GTID信息:
SHOW MASTER STATUS;
记下返回结果中的File
和Position
字段的值,这些是之后配置从服务器时需要用到的。
2. 配置从服务器
修改从服务器的配置
在从服务器的MySQL配置文件中,添加以下设置:
[mysqld]
server-id = 2
gtid-mode = ON
enforce-gtid-consistency = ON
重启MySQL服务
sudo systemctl restart mysqld
配置从服务器复制
在从服务器上执行以下SQL命令,配置连接到主服务器的复制:
CHANGE MASTER TO
MASTER_HOST = '192.168.1.100',
MASTER_USER = 'replica_user',
MASTER_PASSWORD = 'replica_password',
MASTER_AUTO_POSITION = 1;
MASTER_HOST
:主服务器的IP地址。MASTER_USER
:刚才创建的复制用户。MASTER_PASSWORD
:复制用户的密码。MASTER_AUTO_POSITION
:启用GTID模式。
启动复制进程
接下来,启动复制进程:
START SLAVE;
3. 验证主从复制
在从服务器上,运行以下命令检查复制状态:
SHOW SLAVE STATUS\G;
确保Slave_IO_Running
和Slave_SQL_Running
都显示为Yes
,这表示主从复制正在正常运行。
4. 测试主从复制
在主服务器上创建一个测试数据库和表:
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE test_table (id INT PRIMARY KEY, value VARCHAR(100));
INSERT INTO test_table VALUES (1, 'Hello World');
然后在从服务器上查询该表,确保数据已经复制:
USE test_db;
SELECT * FROM test_table;
总结
通过以上步骤,我们成功实现了基于GTID的MySQL主从复制。这种方式可以简化复制管理,自动处理主从切换时的任务,有效防止数据丢失。在实际生产环境中,请确保适当的监控和备份策略,以确保数据的安全和可用性。