自学内容网 自学内容网

【mysql面试题】mysql复习之常见面试题(四)

  本站以分享各种运维经验和运维所需要的技能为主

《python零基础入门》:python零基础入门学习

《python运维脚本》: python运维脚本实践

《shell》:shell学习

《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战

《k8》从问题中去学习k8s

《docker学习》暂未更新

《ceph学习》ceph日常问题解决分享

《日志收集》ELK+各种中间件

《运维日常》运维日常

《linux》运维面试100问

《DBA》db的介绍使用(mysql、redis、mongodb...)

思考一下问题:

6、mysql 的复制原理以及流程

参考答案: 

MySQL 的复制功能是其核心特性之一,它允许从一个 MySQL 数据库服务器(主服务器)将数据和变更复制到另一个或多个 MySQL 数据库服务器(从服务器)。复制可以提高数据的可用性、负载均衡和数据备份。MySQL 主要支持基于二进制日志的复制。下面将详细介绍 MySQL 复制的原理和流程:

### 复制原理

MySQL 复制主要基于二进制日志(binary log)。这个日志文件记录了影响数据库状态的所有更改,如表的创建和数据的增删改等操作。复制过程包括三个主要组件:二进制日志、中继日志(relay log)和复制 IO/SQL 线程。

1. **二进制日志**:
   - 主服务器上的所有数据修改都会被记录在二进制日志中。这包括 DML(数据操纵语言)和 DDL(数据定义语言)操作。

2. **复制 IO 线程**:
   - 在从服务器上运行,负责从主服务器的二进制日志中读取日志事件,并将它们写入从服务器本地的中继日志。

3. **中继日志**:
   - 存储在从服务器上,接收从主服务器复制过来的二进制日志内容。

4. **复制 SQL 线程**:
   - 在从服务器上运行,负责读取中继日志中的事件,并将这些事件应用到从服务器的数据库中,从而实现数据的同步。

### 复制流程

1. **启动和配置**:
   - 在主服务器上,启用二进制日志并配置一个唯一的服务器 ID。
   - 在从服务器上,配置主服务器的信息(如主服务器的 IP 地址、端口号、登录凭证等),并设置一个唯一的服务器 ID。

2. **建立连接**:
   - 从服务器上的复制 IO 线程连接到主服务器,并请求从指定的日志文件位置开始读取日志。

3. **数据传输**:
   - 主服务器接收到请求后,开始将二进制日志的内容发送到从服务器。这些数据包括所有对数据库执行的更改操作。

4. **写入中继日志**:
   - 从服务器的复制 IO 线程接收到数据后,将其写入本地的中继日志。

5. **应用更改**:
   - 从服务器的复制 SQL 线程读取中继日志中的事件,并执行这些事件来更新从服务器的数据库,从而保持与主服务器的数据一致。

6. **错误处理和管理**:
   - 如果在复制过程中遇到错误(如网络问题、数据不一致等),从服务器可以配置自动重试或停止复制,需要管理员介入进行问题诊断和修复。

### 高级复制配置

- **过滤规则**:可以设置复制过滤规则,决定哪些数据库或表的更改需要被复制或忽略。
- **多源复制**:从 MySQL 5.7 开始,支持从多个主服务器复制数据到一个从服务器。
- **并行复制**:从 MySQL 5.6 开始,从服务器可以配置使用多个线程并行应用中继日志中的事件,以提高复制效率和减少延迟。

通过理解和配置这些复制原理和流程,你可以有效地利用 MySQL 的复制功能来提高数据的可用性和读取性能,同时也为数据的灾难恢复提供支持。


原文地址:https://blog.csdn.net/zerotoall/article/details/142376977

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!