1.主从复制
主从复制
1.1 概述
主从复制指: 将主数据库的DDL
和DML
操作通过二进制日志
传递到从库服务器中, 然后从库根据日志重新执行(也叫重做), 从而使从库和主库的数据保存同步
MYSQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务的主库, 实现链状复制
主从复制的优点:
- 主键出现问题, 可以快速切换到从库提供服务
- 实现读写分离, 降低主库的访问压力
- 可以在从库中执行备份, 以避免备份期间影响主库服务
DDL和DML的区别
- DDL: 定义数据库的结构和模式的语言. 通常用于创建、修改和删除数据库、表、视图、索引等数据库对象. 常见的DDL语句包括CREATE、ALTER、DROP. DDL语句一般会自动提交事务, 即执行后会立即生效且无法回滚
- DML: 用于操作数据库中的数据的语言. DML语句用于插入、更新、删除数据库中的数据. 常见的DML包括INSERT、UPDATE、DELETE.DML语句一般不会自动提交事务, 需要通过COMMIT语句手动提交才能生效, 也可以通过ROLLBACK语句回滚操作
1.2 原理
- 角色分配
- 主库(Master)
主库在事务提交时, 将对数据库的更改(DDL和DML)记录到二进制日志(Binary Log)中 - 从库(Slave)
从库读取主库的二进制日志, 并将这些日志中的更改(DDL和DML)应用到自己的数据库中
- 二进制日志
主库将所有更改数据库的操作写入二进制日志中 - IO线程
从库有一个IO线程, 负责连接到主库并请求主库的二进制日志, 写入从库本地的中继日志中 - 中继日志
从库用来存储主库二进制日志事件的本地副本 - SQL线程
从库有一个SQL线程, 它负责读取中继日志中的SQL语句, 并在从库上执行这些SQL语句, 以使从库的数据保持与主库同步
1.3 搭建