mysql的binlog

Mysql 5.7 开启binlog

参考:mysql官网-The binary-log

1. 什么是binlog

  • binlogmysql的二进制日志:
    二进制日志包含描述数据库更改(例如表创建操作或表数据更改)的“事件”。 它还包含针对可能进行了更改的语句的事件(例如,不匹配任何行的DELETE),除非使用基于行的日志记录。 二进制日志还包含有关每个语句花费该更新数据多长时间的信息。

2. 主要作用:

  1. 对于复制,主复制服务器上的二进制日志提供了要发送到从属服务器的数据更改的记录。 主服务器将其二进制日志中包含的事件发送到从属服务器,从属服务器执行这些事件以对主服务器进行相同的数据更改。
  2. 某些数据恢复操作需要使用二进制日志。 恢复备份后,将重新执行二进制日志中在备份后记录的事件。 这些事件使数据库从备份开始就保持最新状态。

3.binlog特点:

  1. 开启binlog会降低服务器的性能,但是它的作用会超过这种较小的性能下降。
  2. binlog不记录不修改数据库中数据的操作,例如:query,show等操作。
  3. 二进制日志通常对意外停止具有弹性,因为只有完成的事务才会被记录或读回。
  4. 如果修改了密码,在binlog当中,服务器会重写日志中的语句和密码,不会让密码以纯文本的方式出现。

4.开启binlog

测试环境:

  • mysql 版本:5.7.17
  • 系统:cent os 7

如何安装mysql,请参阅Linux(Centos)安装Mysql

  1. 检查binlog的状态
show variables like 'log_bin';

在这里插入图片描述
这里没有打开bin_logbin_log是一个只读变量,不能在mysql开启的时候修改,所以先关闭mysql
2. 关闭mysql

systemctl stop mysqld
  1. 开启bin_log
    修改/etc/my.cnf,在mysqld下面添加如下的参数配置;
    log-bin=mysql_bin
    server-id=1
    
    参数解释:
    • log-bin:设置mysqlbinlog文件的前缀名称,支持写全路径,例如:log-bin=/var/lib/mysql/binlog/mysql_bin,这样可以指定binlog的保存位置
    • server-id:这个变量指定服务器的ID,在Mysql 5.7 中,如果要启用二进制记录,则必须指定一个值,否则将启动不了binlog日志功能。
  2. 重启mysql
    在做完上述的配置之后,重启一下mysql就好了。
    systemctl restart mysqld
    
    用账号登录mysql,检查一下mysqlbinlog的状态是否开启
    show variables like 'log_bin';
    
    在这里插入图片描述
    执行完毕之后,会在/var/lib/mysql这个目录下看到,两个文件
    在这里插入图片描述
    文件解释:
    • 这个名字中的前半本部分mysql_bin对应的就是在/etc/my.cnf的文件名称,每次服务器创建新的日志文件时,该数目都会增加,从而创建了有序的文件系列。每次发生以下任何事件,服务器都会在系列中创建一个新文件。
      • 服务器已启动或者重新启动的时候。
      • 服务器刷新日志的时候。
      • 当日志大小达到max_binlog_size
    • 文件mysql_bin.index中记录的是类似mysql_bin.0000x这类的文件名列表。
    • 文件mysql_bin.0000x这个文件记录的就是mysql的非查询操作的二进制日志。
    • 文件mysql_bin.0000x这个文件大小154的就是记录mysql中的偏移量(Position),与在mysql中使用show master status中的Position一致
      在这里插入图片描述
  3. binlog的三种日志记录格式:
    * binlog_format=statementMysql中的复制功能最初是基于SQL语句从主服务器到从服务器的传播,这称为基于语句的日志记录。
    * binlog_format=row:在基于行的日志记录中,主服务器将事件写入二进制日志,这些事件指示如何影响各个表行。因此,表始终使用主键以确保可以有效地标识行是很重要的。
    * binlog_format=mixed:混合日志记录,对于混合日志记录,默认情况下使用基于日志(statement)的记录,但是在某些情况下,日志记录模式会自动切换成基于行(row)。

使用基于语句(statement)的复制,复制不确定的语句可能出现问题,在确定给定语句对于statement的复制是否安全的时候,Mysql确定是否可以保证使用statement的日志记录方式来复制该语句,如果Mysql无法保证,它将标记该语句为潜在不可靠的对象并发出警告,以statement记录日志可能并不安全。
但是可以用row的日志记录方式来避免这些问题。
4. Mysql BinLog的其它设置参数:

Parametersmeans
binlog_row_event_max_size指定基于行(row)的二进制日志事件的最大大小,以字节为单位。
log_bin_index二进制日志索引文件的名称,其中包含二进制日志文件的名称。默认情况下,它的位置和基本名称与使用–log-bin 选项加​​扩展名为二进制日志文件指定的值相同.index
binlog_do_db这里列举产生binlog的指定数据库的名称,如果有多个数据库的话,要使用多个实例列举出来,在这里面要特别注意下binlog_format对日志记录的影响。先挂上官网的例子,日后再水全这一篇
binlog_cache_size在事务期间用于保存对二进制日志的更改的缓存的大小。如果服务器支持任何事务存储引擎,并且服务器启用了二进制日志(–log-bin选项),则为每个客户端分配一个二进制日志缓存。如果经常使用大型事务,则可以增加缓存大小以获得更好的性能
binlog_ignore_db指定要忽略记录binlog的数据库,这里同样要注意binlog_foormat对这条命令的影响先挂上连接,到时候跟上文一起水

总结

走到本文的第4小节,就可以成功开启binlog了,如果其中有什么差错,请大佬辛苦一下指出来。我好改正,多学习学习,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值