Mysql分库分表与集群

Mysql分表分为垂直切分和水平切分

垂直切分 是指数据表列的拆分,如果表字段⽐较多,将不常⽤的、数据较⼤的等等做拆分

水平拆分 是指数据表行的拆分,把一张的表的数据拆成多张表来存放。

分表后的ID怎么保证唯⼀性

  1. 设定步⻓,⽐如1-1024张表我们设定1024的基础步⻓,这样主键落到不同的表就不会冲突了。
  2. 分布式ID,⾃⼰实现⼀套分布式ID⽣成算法或者使⽤开源的⽐如雪花算法这种
  3. 分表后不使⽤主键作为查询依据,⽽是每张表单独新增⼀个字段作为唯⼀主键使⽤,⽐如订单表订
    单号是唯⼀的,不管最终落在哪张表都基于订单号作为查询依据,更新也⼀样

MySQL集群模式

大家熟知的:主从复制、双主复制、主备模式…等等,这些都是属于典型的MySQL集群模式

主从复制模式

主从复制是 MySQL 中最常用的集群模式之一,一个主服务器(Master)负责所有的写操作,并将这些更改,异步复制到一个或多个从服务器(Slave)上。
在这里插入图片描述

首先先了解mysql主从同步的原理

  1. master提交完事务后,写入binlog
  2. slave连接到master,获取binlog
  3. master创建dump线程,推送binglog到slave
  4. slave启动一个IO线程读取同步过来的master的binlog,记录到relay log中继日志中
  5. slave再开启一个sql线程读取relay log事件并在slave执行,完成同步
  6. slave记录自己的binglog
    在这里插入图片描述

由于mysql默认的复制方式是异步的,主库把日志发送给从库后不关心从库是否已经处理,这样会产生一个问题就是假设主库挂了,从库处理失败了,这时候从库升为主库后,日志就丢失了。由此产生两个概念。

全同步复制

主库写入binlog后强制同步日志到从库,所有的从库都执行完成后才返回给客户端,但是很显然这个方式的话性能会受到严重影响。

半同步复制

和全同步不同的是,半同步复制的逻辑是这样,从库写入日志成功后返回ACK确认给主库,主库收到至少一个从库的确认就认为写操作完成。

主从的延迟怎么解决

  1. 针对特定的业务场景,读写请求都强制⾛主库
  2. 读请求⾛从库,如果没有数据,去主库做⼆次查询

Mysql日志有哪些

MySQL中一共七种日志,分别为:慢查询日志、Binlog、Redo Log、UndoLog、错误日志(errorlog)、一般查询日志(general log)、中继日志(relay log)。

1. Error Log(错误日志)
介绍:启动、运行或停止 mysqld时遇到的问题记录的日志。错误日志包含mysqld 启动和关闭次数的记录。它还包含诊断消息,例如服务器启动和关闭期间以及服务器运行期间发生的错误、警告和注释。例如,如果mysqld注意到需要自动检查或修复一个表,它会在错误日志中写入一条消息。
使用场景:在整个mysql启动或运行出问题时候查看找到原因。

2. Binary Log(二进制日志)
介绍:这个是我们常说的binglog日志。二进制日志包含描述数据库更改的“事件”,例如表创建操作或表数据更改。它还包含可能已进行更改的语句的事件(例如, DELETE没有匹配行的语句),除非使用基于行的日志记录。二进制日志还包含有关每个语句花费更新数据多长时间的信息。
使用场景::做主从实现原理就是通过二进制日志,做数据恢复操作需要使用二进制日志。
注意::biglog有三种文件模式分别是1)STATMENT(默认):每一条会修改数据的sql语句会记录到binlog 2)ROW:记录修改的数据 3)MIXED:一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog

3. Relay Log(中继日志)
介绍::主从复制过程中使用的一种日志类型,在从服务器上记录主服务器上所有的二进制日志(Binary log)的信息
使用场景::查看主从复制的情况。

4. General Log((查询日志))
介绍:当客户端连接或断开连接时,服务器将信息写入此日志,并记录从客户端收到的每个 SQL 语句。当您怀疑客户端有错误并想确切地知道客户端发送给mysqld的内容时,通用查询日志可能非常有用。
使用场景:当遇到一些事务或者有关sql执行情况问题时候可以开启查看。

5. slow Query Log(慢查询日志)
介绍:慢速查询日志由执行时间超过 long_query_time几秒并且至少 min_examined_row_limit需要检查行的 SQL 语句组成。
使用场景:开启后排查系统执行时间太长的sql。默认是超过十秒的查询哦。

6. Redo log
介绍:记录事务过程中的修改操作,以保证事务的安全性
使用场景:是mysql的acid和mvcc实现重要一环
注意:有三种刷盘策略innodb_flush_log_at_trx_commit,0-一秒刷新一次,1:提交事务刷新一次,2:事务提交后将数据刷入磁盘

7. Undo log
介绍:用于撤销与事务相关的修改操作,以保证事务的原子性。
使用场景:是mysql的acid和mvcc实现重要一环

还有 DDL Log
介绍:记录DDL操作的一种日志类型。

参考:mysql日志分类详细

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值