# 主从复制配置

URL: https://caijiao.org/mariadb/advanced/replication/master-slave
Source: docs/mariadb/advanced/replication/master-slave.md
Description: 本节介绍 MariaDB 主从复制的基本配置步骤，包括主服务器和从服务器的设置，帮助实现数据同步和高可用架构。

## 1. 主服务器配置

编辑主服务器的配置文件（通常是 `my.cnf` 或 `mariadb.cnf`），添加或修改以下内容：

```ini
[mysqld]
server-id = 1                  # 唯一的服务器ID
log_bin = /var/log/mysql/mysql-bin.log  # 启用二进制日志
binlog_format = ROW            # 推荐使用行格式日志
````

重启 MariaDB 服务使配置生效：

```bash
sudo systemctl restart mariadb
```

创建复制专用用户并授权：

```sql
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
```

获取当前二进制日志文件名和位置：

```sql
SHOW MASTER STATUS;
```

记下 `File` 和 `Position` 值，稍后从服务器配置时使用。

## 2. 从服务器配置

编辑从服务器配置文件，设置唯一的 `server-id`（不同于主服务器）：

```ini
[mysqld]
server-id = 2
relay_log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
read_only = 1
```

重启 MariaDB 服务：

```bash
sudo systemctl restart mariadb
```

在从服务器上执行以下命令，配置主服务器信息：

```sql
CHANGE MASTER TO
  MASTER_HOST='主服务器IP',
  MASTER_USER='repl',
  MASTER_PASSWORD='password',
  MASTER_LOG_FILE='主服务器二进制日志文件名',
  MASTER_LOG_POS=主服务器日志位置;
```

启动从服务器复制线程：

```sql
START SLAVE;
```

检查复制状态：

```sql
SHOW SLAVE STATUS\G
```

确保 `Slave_IO_Running` 和 `Slave_SQL_Running` 都为 `Yes`，表示复制正常。

## 3. 其他注意事项

* 主从服务器时间应同步（建议使用 NTP）。
* 网络连接要保持稳定，确保复制不中断。
* 生产环境中可根据需求配置多从、多主或半同步复制。

---

通过配置主从复制，MariaDB 实现数据实时同步，提升数据库的容灾和负载能力。
