加入收藏 | 设为首页 | 会员中心 | 我要投稿 南昌站长网 (https://www.0791zz.cn/)- 终端安全、安全管理、数据治理、图像分析、大数据!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

了解这些服务之间的区别

发布时间:2021-01-30 12:15:29 所属栏目:传媒 来源:互联网
导读:默认配置 log_bin代表是否开启了binlog,其默认值为OFF。 log_bin 代表是否开启了binlog,其默认值为OFF log_bin_basename binlog存储文件的完整名称,会在默认的文件名后面添加上递增的序号,就例如mysql-bin.000001 log_bin_index binlog索引文件名称,例

默认配置

log_bin代表是否开启了binlog,其默认值为OFF。

  • log_bin 代表是否开启了binlog,其默认值为OFF
  • log_bin_basename binlog存储文件的完整名称,会在默认的文件名后面添加上递增的序号,就例如mysql-bin.000001
  • log_bin_index binlog索引文件名称,例如mysql-bin.index
  • sql_log_bin 在binlog开启的时候,可以禁用当前session的binlog

你可以在MySQL中通过命令show binary logs查看所有的binlog文件

图片

查看binlog

知道了有哪些文件之后我们可以来看看binlog文件中的内容,可以在MySQL通过show binlog events命令来查看。

show binglog events 查看第一个binlog文件,我们也可以通过in参数来指定,假设我们想看的文件名是mysql-bin.000001,那么可以使用命令show binlog events in 'mysql-bin.000001'来查看指定的binlog文件
 

读写分离的架构应用的其实非常广泛,就比如MySQL,还有Redis,以及我们熟悉的Zookeeper,Zookeeper的Follower收到读请求不会自己处理,而是会将读请求转发给Leader,感兴趣的可以自己下来了解一下,这里就不偏题了。

1. 复制原理

MySQL的主从复制支持两种方式:

  • 基于行
  • 基于语句

基于语句的复制在MySQL3.23中就已经有了,而基于语句的方式则在5.1中才实现。其本质都是基于主库的binlog来实现的,主库记录binlog,然后从库将binlog在自己的服务器上重放,从而保证了主、从的数据一致性。

1.1 binlog

MySQL中日志分为两个维度,一个是MySQL服务器的,一个是底层存储引擎的。而上文提到的binlog就是属于MySQL服务器的日志,binlog也叫二进制日志,记录了所有对MySQL所做的更改。

基于行、语句的复制方式跟binlog的存储方式有关系。binlog有三种存储格式,分别是Statement、Row和Mixed。

  • Statement 基于语句,只记录对数据做了修改的SQL语句,能够有效的减少binlog的数据量,提高读取、基于binlog重放的性能
  • Row 只记录被修改的行,所以Row记录的binlog日志量一般来说会比Statement格式要多。基于Row的binlog日志非常完整、清晰,记录了所有数据的变动,但是缺点是可能会非常多,例如一条update语句,有可能是所有的数据都有修改;再例如alter table之类的,修改了某个字段,同样的每条记录都有改动。
  • Mixed Statement和Row的结合,怎么个结合法呢。例如像update或者alter table之类的语句修改,采用Statement格式。其余的对数据的修改例如update和delete采用Row格式进行记录。

为什么会有这么多方式呢?因为Statement只会记录SQL语句,但是并不能保证所有情况下这些语句在从库上能够正确的被重放出来。因为可能顺序不对。

MySQL什么时候会记录binlog呢?是在事务提交的时候,并不是按照语句的执行顺序来记录,当记录完binlog之后,就会通知底层的存储引擎提交事务,所以有可能因为语句顺序错误导致语句出错。

1.2 查看binlog

这里拿MySQL 5.6举例子,binlog默认是处于关闭状态的。我们可以通过命令show variables like '%log_bin%' 来查看关于binlog的配置。

(编辑:南昌站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读