MySQL总结 高可用架构设计

MySQL 复制功能

复制功能是构建高可用架构的基础,MySQL 复制功能提供分担读负载。 

利用MySQL 复制功能,为主库 复制出多个备库,备库 可以分担主库的 读负载, 同时为高可用,灾难恢复,备份提供更多的选择。

备库可以重跑 主库的二进制日志 获得数据, 所以 备库 是异步的,同时也会由于时间的关系导致 数据不一致。

MySql  复制功能能够解决的问题:

同样的数据放在不同数据库,增加安全性。如果数据库操作出现错误,要回到以前的状态,由于备库的延迟比较小,所以利用备库不能得到之前的数据,这时就需要备份。

MySQL 二进制日志

MySQL 日志分类:

MySQL  二进制日志

二进制日志存放的是执行成功的SQl , 对于回滚的,还有执行失败的,不会记录到二进制日志中。

存储执行的SQL 语句。MYSQL 5.7 版本默认使用的二进制格式。 

可直接使用binlog工具进行查看。

优点:  日志记录量相对较小, 节省磁盘IO 与网络IO

缺点:必须记录上下文信息,保证从服务器上数据与 主服务器上语句保持一致。但一些uuid() 函数,还是无法进行正确复制。

查看 二进制日志格式:

修改 二进制日志格式:

优点:使得主从复制的数据 是一致的,使得复制更加安全,避免对业务逻辑进行影响。

对每一行数据的修改比基于段的复制更高效。

缺点:

Full : 会记录 行中所有的列,只要有一个列进行修改

Minnimal:  记录行中被修改的列

NoBloB: 如果没有对 text. Blob 类型的列进行修改,就不会记录text, Blob 的值。

查看 Row格式下 二进制文件: mysqlbinlog -vv mysql-bin.0003

大部分SQL 会 基于段的方式进行 复制, 对于一些不确定函数 uuid()  的SQL 语句会基于行的方式, 当使用INnoDb 引擎,

事务隔离级别设置为 读未提交, 读已提交 时,也会基于行的方式进行复制。

使用不同方式复制的影响

SBR 基于SQL 语句的复制常用的一个场景是, 对数据库大表结构进行修改时,现在从库上修改结构,在做主备切换。这种方式要求主从库 中的字段可以不一致但是要兼容。

使用RBR 基于行的复制,会较少数据库锁的使用,提高从数据库的并发性能,因为要对表进行插入,需要先锁行数据,在从库复制时执行SQL也要加锁,而使用基于行复制,不用再加锁。

综合考虑, 基于行的方式更好, 因为它能保证数据一致性。

Mysql 复制工作方式

根据上图的步骤:我们得到在配置MySql 时 需要打开 数据库二进制日志文件。

从库会开启一个IO线程读取主库的二进制日志并把数据放到从库本地的中继日志中。 这里不会轮询, 当主库没有新事件产生时,该线程会进入休眠状态,直到主库有新事件,就会通知线程继续读取。

从库也会开启SQL Thread 来完成从库的一个复制。

基于日志点的复制配置步骤

这里的Ip段 最好是从库所在的网段, 防止别人获取到日志

进行授权:

缺点:故障转移时, 重新获取 新的主服务器的日志点信息比较困难。因为每个从库的日志都是相对独立的。

发布了12 篇原创文章 · 获赞 0 · 访问量 251

猜你喜欢

转载自blog.csdn.net/zhzsdiligence/article/details/102510236