MySQL主从复制秘籍:原理与配置详解,打造高可用数据库
发布时间: 2024-07-28 15:05:12 阅读量: 25 订阅数: 33
MySQL主从同步中的server-id示例详解
![MySQL主从复制秘籍:原理与配置详解,打造高可用数据库](https://doc.sequoiadb.com/cn/index/Public/Home/images/500/Distributed_Engine/Maintainance/HA_DR/twocity_threedatacenter.png)
# 1. MySQL主从复制概述**
MySQL主从复制是一种数据库复制技术,它允许将数据从一个数据库服务器(主库)复制到一个或多个其他数据库服务器(从库)。主从复制的主要目的是提高数据可用性和可扩展性。
主从复制通过以下步骤实现:
* 主库将数据更改记录到二进制日志中。
* 从库连接到主库,并从二进制日志中读取数据更改。
* 从库将数据更改应用到自己的数据库中,从而保持与主库的数据一致性。
# 2.1 主从复制架构与工作原理
### 主从复制架构
MySQL主从复制是一种数据复制技术,它允许一台数据库服务器(主库)将数据更改复制到一台或多台其他数据库服务器(从库)。主从复制架构如下图所示:
```mermaid
graph LR
subgraph 主库
A[主库]
end
subgraph 从库
B[从库1]
C[从库2]
end
A --> B
A --> C
```
### 工作原理
主从复制的工作原理如下:
1. **变更记录:**当主库上的数据发生更改时,更改将被记录在主库的二进制日志(binlog)中。
2. **日志传输:**从库通过IO线程连接到主库,并从主库的binlog中读取更改记录。
3. **SQL线程执行:**从库上的SQL线程将读取到的更改记录应用到自己的数据库中,从而使从库的数据与主库保持一致。
### 主库和从库的角色
* **主库:**负责处理客户端请求并记录数据更改。
* **从库:**负责从主库接收和应用数据更改,不处理客户端请求。
### 主从复制的优点
* **数据冗余:**从库提供主库数据的备份,提高了数据的可靠性和可用性。
* **负载均衡:**从库可以分担主库的读负载,提高系统的性能。
* **数据恢复:**如果主库发生故障,可以从从库恢复数据,减少数据丢失。
* **弹性扩展:**可以通过添加从库来扩展数据库系统,提高容量和性能。
### 主从复制的局限性
* **延迟:**从库上的数据可能比主库上稍有延迟。
* **写入性能:**主从复制会增加主库的写入开销,因为每个更改都需要记录在binlog中并传输到从库。
* **复杂性:**主从复制的配置和管理需要一定的技术知识。
# 3. MySQL主从复制配置
### 3.1 主库配置
主库配置主要包括设置复制相关参数、创建复制用户和授权、开启二进制日志等操作。
**1. 设置复制相关参数**
在主库的配置文件(如`/etc/my.cnf`)中,添加或修改以下参数:
```
server-id=1
log-bin=mysql-bin
binlog-do-db=db1,db2
binlog-ignore-db=db3,db4
```
* `server-id`:主库的唯一标识符,必须是不同的整数。
* `log-bin`:开启二进制日志,并指定日志文件名。
* `binlog-do-db`:指定需要复制的数据库。
* `binlog-ignore-db`:指定不需要复制的数据库。
**2. 创建复制用户和授权**
创建用于从库连接主库的复制用户,并授予必要的权限:
```
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
```
* `repl`:复制用户的用户名。
* `password`:复制用户的密码。
* `*.*`:授予对所有数据库和表进行复制的权限。
**3. 开启二进制日志**
如果二进制日志未开启,则需要手动开启:
```
SET GLOBAL binlog_format=ROW;
START SLAVE;
```
* `SET GLOBAL binlog_format=ROW`:设置二进制日志格式为行格式。
* `START SLAVE`:启动主库上的复制线程。
### 3.2 从库配置
从库配置主要包括设置复制相关参数、创建复制用户和授权、连接主库并启动复制等操作。
**1. 设置复制相关参数**
在从库的配置文件中,添加或修改以下参数:
```
server-id=2
log-slave-updates=1
read-only=1
```
* `server-id`:从库的唯一标识符,必须与主库不同。
* `log-slave-updates`:记录从库上执行的更新操作,以便在故障恢复时使用。
* `read-only`:将从库设置为只读模式,防止意外写入。
**2. 创建复制用户和授权**
在从库上创建与主库相同的复制用户,并授予必要的权限:
```
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
```
**3. 连接主库并启动复制**
使用复制用户连接主库,并启动复制:
```
CHANGE MASTER TO
MASTER_HOST='ma
```
0
0