MySQL 结合 MyCAT 实现主从复制读写分离是一个用于提高数据库性能和可用性的常见方案。
**1. MySQL 主从复制设置**
**前提条件**:
- 已经在多台服务器上分别安装了MySQL,并确保MySQL版本支持主从复制。
**步骤**:
- **主服务器配置**:
- 在主数据库服务器上,打开 `my.cnf` 配置文件,添加或修改以下配置以启用二进制日志(binlog):
```
server-id=1
log-bin=mysql-bin # 启用二进制日志
binlog_format=row # 设置二进制日志格式,推荐row格式
```
- 重启MySQL服务以使配置生效。
- 创建用于复制的账户,并赋予相应的权限:
```sql
CREATE USER 'replication_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';
FLUSH PRIVILEGES;
```
- 获取当前主服务器的二进制日志文件名及偏移量,用于从服务器初始化同步:
```sql
SHOW MASTER STATUS;
```
- **从服务器配置**:
- 在从数据库服务器上同样修改 `my.cnf` 文件,设置不同的server-id:
```
server-id=2
relay-log=mysql-relay-bin # 重做日志
```
- 重启MySQL服务。
- 在从服务器上执行以下命令初始化从库,指定主库的IP、端口、复制账号以及之前获取的主库的日志文件名和偏移量:
```sql
CHANGE MASTER TO MASTER_HOST='主服务器IP', MASTER_USER='replication_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='...', MASTER_LOG_POS=...;
```
- 启动从数据库的复制进程:
```sql
START SLAVE;
```
- 检查从库复制状态,确保主从复制正常工作:
```sql
SHOW SLAVE STATUS\G;
```
**2. MyCAT 配置读写分离**
**步骤**:
- 安装并配置 MyCAT 数据库中间件。
- 在 MyCAT 中定义数据源,包括主库(writeHost)和从库(readHost)的信息。
- 配置逻辑数据库和表规则,将请求路由到正确的物理节点上。
- 将主库配置为写操作的数据源。
- 将从库配置为只读操作的数据源。
- 根据业务需求配置 SQL 路由策略,如根据数据库名、表名或者自定义规则等进行读写分离。
示例配置可能包含如下内容:
<schema name="testdb" checkSQLschema="false" sqlMaxLimit="100">
<!-- 定义数据节点,包含主库和从库 -->
<dataNode name="dn_master">
<dataSource type="mysql">
<property name="host">192.168.1.1</property> <!-- 主库地址 -->
<property name="port">3306</property>
<property name="database">testdb</property>
<property name="user">root</property>
<property name="password">your_password</property>
<property name="heartBeatSQL">SELECT 1</property>
</dataSource>
</dataNode>
<dataNode name="dn_slave">
<dataSource type="mysql">
<property name="host">192.168.1.2</property> <!-- 从库地址 -->
<property name="port">3306</property>
<property name="database">testdb</property>
<property name="user">root</property>
<property name="password">your_password</property>
<property name="heartBeatSQL">SELECT 1</property>
</dataSource>
</dataNode>
<!-- 默认所有表都采用读写分离策略 -->
<table name="test_table" dataNode="dn_master,dn_slave" rule="auto-sharding-long"/>
</schema>
完成以上配置后,MyCAT 就会根据你设定的规则,自动将写操作发送到主库,读操作分发到从库,从而实现MySQL主从复制与读写分离。在实际生产环境中,请务必根据具体情况进行细致的规划和测试。