0.4、Mysql binlog 开启、格式设置和查看

文章目录

  • 0、binlog 的作用
  • 1、binlog 三种模式
    • 1.1、比较
      • 1.1.1、Row
      • 1.1.2、Statement
  • 1.1.3、Mixed
  • 2、查看/修改binlog 格式
    • 2.1、查看 binlog
    • 2.2、修改 binlog 级别
  • 3、mysql 支持 binlog 吗?
    • 3.1、查看 binlog 记录是否开启
    • 3.2、开启/关闭 binlog 日志记录
  • 4、binlog 文件
    • 4.1、查看所有binlog文件
    • 4.2、 查看目前使用的是哪一个binlog 文件
    • 4.3、 从新创建一个binlog 文件,历史文件不动
    • 4.4、查看第一个 binlog 文件内容
    • 4.5、查看指定binlog文件内容
  • 参考

0、binlog 的作用

binlog,即二进制日志,它记录了数据库上的所有改变,并以二进制的形式保存在磁盘中;
它可以用来查看数据库的变更历史、数据库增量备份和恢复、Mysql的复制(主从数据库的复制)。

1、binlog 三种模式

类型 全称
Row 基于行的复制(row-based replication,RBR)
Statement 基于SQL语句的复制(statement-based replication,SBR)
Mixed 混合模式复制(mixed-based replication,MBR)

1.1、比较

目前看公司使用的是 Row 模式

1.1.1、Row

  • 5.1.5版本的MySQL才开始支持row level的复制
  • 它不记录sql语句上下文相关信息,仅保存哪条记录被修改
  • 优点: binlog中可以不记录执行的sql语句的上下文相关的信息,仅需要记录那一条记录被修改成什么了。所以rowlevel的日志内容会非常清楚的记录下每一行数据修改的细节。而且不会出现某些特定情况下的存储过程,或function,以及trigger的调用和触发无法被正确复制的问题.
  • 缺点:所有的执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容,比如修改表结构,每一行记录都会产生一条变更日志
  • ps:新版本的MySQL中对row level模式也被做了优化,并不是所有的修改都会以row level来记录,像遇到表结构变更的时候就会以statement模式来记录,如果sql语句确实就是update或者delete等修改数据的语句,那么还是会记录所有行的变更。

1.1.2、Statement

  • 每一条会修改数据的sql都会记录在binlog中。
  • 优点:不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能。
  • 缺点:由于记录的只是执行语句,为了这些语句能在slave上正确运行,因此还必须记录每条语句在执行的时候的一些相关信息,以保证所有语句能在slave得到和在master端执行时候相同 的结果。另外mysql 的复制,像一些特定函数功能,slave可与master上要保持一致会有很多相关问题
  • ps:相比row能节约多少性能与日志量,这个取决于应用的SQL情况,正常同一条记录修改或者插入row格式所产生的日志量还小于Statement产生的日志量,但是考虑到如果带条件的update操作,以及整表删除,alter表等操作,ROW格式会产生大量日志,因此在考虑是否使用ROW格式日志时应该跟据应用的实际情况,其所产生的日志量会增加多少,以及带来的IO性能问题。

1.1.3、Mixed

  • 从5.1.8版本开始,MySQL提供了Mixed格式,实际上就是Statement与Row的结合
  • 在Mixed模式下,一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则采用row格式保存binlog,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种。

2、查看/修改binlog 格式

2.1、查看 binlog

select @@binlog_format;
show variables like 'binlog_format';

2.2、修改 binlog 级别

#修改会话级别 Row、Statement、Mixed
SET SESSION binlog_format = 'ROW';

#修改全局级别 Row、Statement、Mixed
set globle binlog_format='MIXED'

3、mysql 支持 binlog 吗?

3.1、查看 binlog 记录是否开启

# 查看当前mysql 是否开启 binlog, ON 表示开启
select @@log_bin;
show variables like 'log_bin';

3.2、开启/关闭 binlog 日志记录

比如手动恢复数据的时候,需要关闭日志记录,避免资源浪费

  • vim /etc/my.cnf把里面的 log-bin 这一行注释掉,重启mysql服务即可。

  • sql_log_bin ,*开启 set sql_log_bin=1; 关闭 set sql_log_bin=0 ;*是一个动态变量,修改该变量时,可以只对当前会话生效(Session),也可以是全局的(Global),当全局修改这个变量时,只会对新的会话生效(这意味当对当前会话也不会生效),因此一般全局修改了这个变量后,都要把原来的所有连接 kill 掉。

  • 用处:
    当还原数据库的时候,如果不关闭二进制日志,那么你还原的过程仍然会记录在二进制日志里面,不仅浪费资源,那么增加了磁盘的容量,还没有必要(特别是利用二进制还原数据库的时候)所以一般还原的时候会选择关闭二进制日志,可以通过修改配置文件,重启关闭二进制日志。也可以动态命令关闭sql_log_bin,然后导入数据库。

4、binlog 文件

4.1、查看所有binlog文件

show master logs;
show binary logs;

4.2、 查看目前使用的是哪一个binlog 文件

show master status;

4.3、 从新创建一个binlog 文件,历史文件不动

flush logs;

4.4、查看第一个 binlog 文件内容

show binlog events;
0.4、Mysql binlog 开启、格式设置和查看_第1张图片

4.5、查看指定binlog文件内容

show binlog events in ‘binlog.000004’;

参考

https://blog.csdn.net/ouyang111222/article/details/50300851

你可能感兴趣的:(Mysql,学习,binlog)