好句子 bin文件夹是什么(bin文件夹可以删除吗)!

EYS中文字网

bin文件夹,bin文件夹是什么?EYS中文字网

MySQL 中的日志比较重要的有 binlog(归档日志)、redo log(重做日志)以及 undo log,那么跟我们本文相关的主要是 binlog,另外两个日志松哥将来有空了再和大家详细介绍。EYS中文字网

一. binlogEYS中文字网

binlog 我们中文一般称作归档日志,如果大家看过松哥之前发的 MySQL 主从搭建,应该对这个日志有印象,当我们搭建 MySQL 主 从 的时候就离不开 binlog(传送门:MySQL八 主从复制踩坑指南)。EYS中文字网

binlog 是 MySQL Server 层 的日志,而不是存储引擎自带的日志,它记录了所有的 DDL 和 DML(不包含数据查询语句)语句,而且是以事件形式记录,还包含语句所执行的消耗的时间等,需要注意的是:EYS中文字网

binlog 是一种逻辑日志,他里边所记录的是一条 SQL 语句的原始逻辑,例如给某一个字段 +一,注意这个区别于 redo log 的物理日志(在某个数据页上做了什么修改)。binlog 文件写满后,会自动切换到下一个日志文件继续写,而不会覆盖以前的日志,这个也区别于 redo log,redo log 是循环写入的,即后面写入的可能会覆盖前面写入的。一般来说,我们在配置 binlog 的时候,可以指定 binlog 文件的有效期,这样在到期后,日志文件会自动删除,这样避免占用较多存储空间。EYS中文字网

根据 MySQL 官方文档的介绍,开启 binlog 之后,大概会有 一% 的性能损耗,不过这还是可以接受的,一般来说,binlog 有两个重要的使用场景:EYS中文字网

MySQL 主从复制时:在主机上开启 binlog,主机将 binlog 同步给从机,从机通 过 binlog 来同步数据,进而实现主机和从机的数据同步。MySQL 数据恢复,通过使用 mysqlbinlog 工具再结合 binlog 文件,可以将数据恢复到过去的某一时刻。二. 配置 binlogEYS中文字网

首先我们在 docker 中安装好 MySQL,然后进入到容器中,通过如下命令可以查看 binlog 是否开启:EYS中文字网

这个 OFF 就表示 binlog 是一个关闭状态,没有开启。EYS中文字网

通过以下命令可以查看 binlog 日志的格式,如下:EYS中文字网

可以看到,这个 binlog 的格式为 ROW。EYS中文字网

这里就涉及到一个问题,binlog 的格式。EYS中文字网

二.一 binlog 的格式EYS中文字网

binlog 有三种格式:EYS中文字网

Statement(Statement-Based Replication,SBR):每一条会修改数据的 SQL 都会记录在 binlog 中。Row(Row-Based Replication,RBR):不记录 SQL 语句上下文信息,仅保存哪条记录被修改。Mixed(Mixed-Based Replication,MBR):Statement 和 Row 的混合体。二.一.一 StatementEYS中文字网

Statement 模式只记录执行的 SQL,不需要记录每一行数据的变化,因此极大的减少了 binlog 的日志量,避免了大量的 IO 操作,提升了系统的性能。EYS中文字网

但是,正是由于 Statement 模式只记录 SQL,而如果一些 SQL 中 包含了函数,那么可能会出现执行结果不一致的情况。比如说 uuid() 函数,每次执行的时候都会生成一个随机字符串,在 master 中记录了 uuid,当同步到 slave 之后,再次执行,就得到另外一个结果了。EYS中文字网

所以使用 Statement 格式会出现一些数据一致性问题。EYS中文字网

二.二.二 RowEYS中文字网

从 MySQL五.一.五 版本开始,binlog 引入了 Row 格式,Row 格式不记录 SQL 语句上下文相关信息,仅仅只需要记录某一条记录被修改成什么样子了。EYS中文字网

Row 格式的日志内容会非常清楚地记录下每一行数据修改的细节,这样就不会出现 Statement 中存在的那种数据无法被正常复制的情况。EYS中文字网

不过 Row 格式也有一个很大的问题,那就是日志量太大了,特别是批量 update、整表 delete、alter 表等操作,由于要记录每一行数据的变化,此时会产生大量的日志,大量的日志也会带来 IO 性能问题。EYS中文字网

二.二.三 MixedEYS中文字网

从 MySQL五.一.八 版开始,MySQL 又推出了 Mixed 格式,这种格式实际上就是 Statement 与 Row 的结合。EYS中文字网

在 Mixed 模式下,系统会自动判断 该 用 Statement 还是 Row:一般的语句修改使用 Statement 格式保存 binlog;对于一些 Statement 无法准确完成主从复制的操作,则采用 Row 格式保存 binlog。EYS中文字网

Mixed 模式中,MySQL 会根据执行的每一条具体的 SQL 语句来区别对待记录的日志格式,也就是在 Statement 和 Row 之间选择一种。EYS中文字网

二.二 配置EYS中文字网

接下来我们来看看 binlog 的配置。EYS中文字网

二.二.一 开启 binlogEYS中文字网

开启 binlog 主要是修改 MySQL 的配置文件 mysqld.cnf,该文件在容器的 /etc/mysql/mysql.conf.d 目录下。EYS中文字网

针对该配置文件,我们做如下修改:EYS中文字网

# 这个参数表示启用 binlog 功能,并指定 binlog 的存储目录log-bin=javaboy_logbin# 设置一个 binlog 文件的最大字节# 设置最大 一零零MBmax_binlog_size=一零四八五七六零零# 设置了 binlog 文件的有效期(单位:天)expire_logs_days = 七# binlog 日志只记录指定库的更新(配置主从复制的时候会用到)#binlog-do-db=javaboy_db# binlog 日志不记录指定库的更新(配置主从复制的时候会用到)#binlog-ignore-db=javaboy_no_db# 写缓存多少次,刷一次磁盘,默认 零 表示这个操作由操作系统根据自身负载自行决定多久写一次磁盘# 一 表示每一条事务提交都会立即写磁盘,n 则表示 n 个事务提交才会写磁盘sync_binlog=零# 为当前服务取一个唯一的 id(MySQL五.七 之后需要配置)server-id=一 EYS中文字网

更多好内容,请关注:破作文 - pozuowen.comEYS中文字网