mysql主从复制原理

mysql主从复制原理

binlog日志,对数据库的增删改操作都会写入一个日志文件,记录这个操作的日志

8.0之前需要手动在my.ini 或 my.cnf文件下配置


#篇日志开启binlog日志,日志的文件前缀为mysqlbin---》生成的文件名如 mysqlbin.000001,mysqlbin.000002
log_bin=mysqlbin

#配置二进制日志的格式
binlog_format=STATEMENT

日志格式

STATEMENT

该日志格式在日志文件中记录的都是SQL语句(statement),每一条对数据进行修改的SQL都会记录在日志文件中,通过mysql提供的mysqlbinlog工具,可以清晰的查看到每条语句的文本。主从复制的时候,从库(slave)会将日志解析为原文本,并在从库重新执行一次。

ROW(8.0默认)

该日志格式在日志文件中记录的是每一行的数据变更,而不是记录SQL语句。比如,执行SQL语句:update tb_book set status = '1' ,如果是STATEMENT日志格式,在日志中会记录一行SQL文件,如果是ROW,由于是对全表进行更新,也就是每一行记录都会发生变更,ROW格式的日志中会记录每一行的数据变更。

MIXED

混合了statement 和 row两种格式

 

查看binlog日志


-- 查看mysql是否开启了binlog日志
show variables like 'log_bin';

-- 查看binlog日志的格式
show variables like 'binlog_format'

-- 查看所有日志
show binlog events;

-- 查看最新的日志
show master status;

-- 查询指定的binlog日志
show binlog events in 'binlog.000008';

-- 查询指定的binlog日志 从位置123开始
show binlog events in 'binlog.000008' from 123;

-- 清空全部binlog日志
reset master

 

主从复制的时候,主数据库把binlog日志复制给从数据库,从数据库的io线程把日志写入relay日志

然后从relay日志中把数据变更到数据表,从库整个过程是串行化的。

mysql5.6之前从库IO线程单线程,之后改成了多线程读取binlog日志。

从库上的数据会比主库慢一些。

 

主从同步问题:

主服务器宕机,日志还没来得及给从数据库,从变主,数据丢失。

mysql提供一个半同步复制,semi-sync复制,指定就是主库写入binlog日志之后,就会强制将此时数据同步到从库,从库讲日志写入本地relay log 之后,接着返回一个ack给主库,主库接收到至少一个从库的ack之后才会认为写操作成功。

 

并行复制

新版本relay日志可以被多个线程读,每次读一个数据库的数据。

 
主从复制优势:
1.提高可用性,主挂机,从可以快速变为主,并且对外提供服务
2.读写分离,可以主写,从读
3.可以在从库上做备份,提高服务性能。

 

posted @   java架构师1  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示