MySQL 数据同步一主多从是一种常见的数据库高可用和负载均衡策略,它允许多个从服务器(Slave)实时复制主服务器(Master)的数据变更,确保数据一致性并分散读取操作的压力。以下将详细介绍如何设置和配置这种架构。
在主服务器上进行配置:
1. **权限设置**:为了允许从服务器进行数据同步,需要在主服务器上创建一个专门用于复制的用户,如`repl`,并为该用户授予所有权限。通过以下SQL语句,分别授权允许`repl`用户从192.168.1.111和192.168.1.113这两个IP地址登录:
```
mysql> GRANT ALL PRIVILEGES ON *.* TO 'repl'@'192.168.1.111' IDENTIFIED BY 'repl';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'repl'@'192.168.1.113' IDENTIFIED BY 'repl';
```
2. **文件配置**:修改`my.ini`配置文件,开启二进制日志功能,设置服务ID。添加以下内容:
```
[mysqld]
port=3306
log-bin=mysql-bin.log
server-id=1
```
之后重启MySQL服务以使配置生效。
3. **获取主服务器的二进制日志信息**:使用`SHOW MASTER STATUS`命令获取当前的二进制日志文件名(例如`mysql-bin.000005`)和偏移量(例如`106`)。
接下来,配置从服务器(Slave1 和 Slave2):
1. **文件配置**:同样地,修改从服务器的`my.ini`文件,开启二进制日志并设置服务ID,比如:
```
[mysqld]
port=3306
server-id=2 (对于Slave1)
server-id=3 (对于Slave2)
log-bin=mysql-bin.log
```
然后重启MySQL服务。
2. **关闭复制线程**:在从服务器上运行`STOP SLAVE`命令以停止当前的复制过程。
3. **设置复制参数**:使用`CHANGE MASTER TO`命令指定主服务器的相关信息,包括主机地址、端口、复制用户、密码、二进制日志文件名及位置,例如:
```
Mysql > CHANGE MASTER TO
master_host='192.168.1.99',
master_port=3306,
master_user='repl',
master_password='repl',
master_log_file='mysql-bin.000005',
master_log_pos=106;
```
4. **启动复制线程**:运行`START SLAVE`命令启动从服务器的复制线程。
5. **检查复制状态**:使用`SHOW SLAVE STATUS`查看从服务器的复制状态,确保一切正常。此外,可以使用`SHOW PROCESSLIST`查看当前的进程,确认复制线程正在运行。
这个一主多从的配置完成后,主服务器的任何数据更新都会被记录在二进制日志中,并被从服务器实时拉取并应用,从而实现数据同步。这种架构在分布式系统、高可用性和读写分离场景中非常有用,能有效提高系统的稳定性和性能。不过,要注意监控和管理复制延迟,以及定期检查复制的健康状态,防止数据不一致或故障发生。