### MySQL 主从与主主配置详解
#### 一、MySQL 主从配置
**1.1 配置主服务器**
为了实现MySQL的主从复制,首先需要配置主服务器。假设我们有两台服务器作为主服务器:
- **主服务器 1 IP**: 192.168.0.1
- **主服务器 2 IP**: 192.168.0.2
在主服务器 1 上进行以下配置:
**步骤 1:** 修改 MySQL 配置文件 `/etc/my.conf`
```bash
server-id = 1 # 设置唯一的服务器 ID,用于区分不同的节点。
log-bin = mysql-bin # 开启二进制日志记录,这是实现复制的基础。
binlog-do-db = slaveDB # 指定需要复制的数据库名称,如需复制多个数据库,可添加多行配置。
binlog-ignore-db = mysql # 指定不需要复制的数据库,通常不复制 MySQL 自身的系统数据库。
auto-increment-increment = 1 # 设置自动增长字段的增量,默认为 1。
auto-increment-offset = 2 # 设置自动增长字段的起始偏移量,确保不同服务器间自动增长字段不冲突。
```
**步骤 2:** 授予从服务器访问权限
```sql
grant replication slave on *.* to 'user_name'@'192.168.0.2' identified by 'ahaii';
flush privileges; # 刷新权限,使更改立即生效。
```
**步骤 3:** 开启复制
```sql
change master to
master_host='192.168.0.225',
master_user='user_name',
master_password='ahaii',
master_log_file='mysql-bin.000001',
master_log_pos=80647293;
start slave;
```
**步骤 4:** 重启 MySQL 服务并验证状态
```bash
service mysql restart
show slave status\G
```
**1.2 配置从服务器**
在从服务器上,同样需要进行一些必要的配置。
**步骤 1:** 修改 MySQL 配置文件 `/etc/my.conf`,添加 `server-id` 参数。
```bash
server-id = 2 # 从服务器的唯一标识符,不同于主服务器的 ID。
```
**步骤 2:** 授予主服务器访问权限,并配置复制。
```sql
grant replication slave on *.* to 'user_name'@'192.168.0.1' identified by 'ahaii';
flush privileges;
change master to
master_host='192.168.0.1',
master_user='user_name',
master_password='ahaii',
master_log_file='mysql-bin.000001',
master_log_pos=80647293;
start slave;
```
**步骤 3:** 重启 MySQL 服务并验证状态
```bash
service mysql restart
show slave status\G
```
#### 二、MySQL 主主配置
**2.1 配置主主环境**
在主主环境中,两个服务器都可以接收写操作,因此需要更复杂的配置来确保数据一致性。
**步骤 1:** 在主服务器 1 和主服务器 2 上分别进行上述主从配置中的所有步骤。
**步骤 2:** 在主服务器 1 上授予主服务器 2 访问权限,并配置复制关系。
```sql
grant replication slave on *.* to 'user_name'@'192.168.0.2' identified by 'ahaii';
flush privileges;
change master to
master_host='192.168.0.2',
master_user='user_name',
master_password='ahaii',
master_log_file='mysql-bin.000001',
master_log_pos=80647293;
start slave;
```
**步骤 3:** 在主服务器 2 上授予主服务器 1 访问权限,并配置复制关系。
```sql
grant replication slave on *.* to 'user_name'@'192.168.0.1' identified by 'ahaii';
flush privileges;
change master to
master_host='192.168.0.1',
master_user='user_name',
master_password='ahaii',
master_log_file='mysql-bin.000001',
master_log_pos=80647293;
start slave;
```
**步骤 4:** 重启 MySQL 服务并验证状态
```bash
service mysql restart
show slave status\G
```
**2.2 注意事项**
- 在主主配置中,需要特别注意避免循环复制的情况发生,可以通过合理的配置来规避。
- 确保主服务器之间的时间同步,这可以使用 NTP (Network Time Protocol) 来实现。
- 考虑使用半同步或全局事务标识符 (GTID) 复制等高级功能来增强数据的一致性。
#### 参考资料
- [MySQL 主从复制详细教程](https://www.2cto.com/database/201801/714594.html)
- [MySQL 主主复制详解](https://www.cnblogs.com/zhi-leaf/p/12543503.html)
通过以上的详细步骤,您可以成功地配置MySQL的主从及主主复制环境。这种配置不仅可以提高系统的可用性和扩展性,还可以帮助实现数据的高可用性和故障转移等功能。