运维必会之MySQL篇 (8)

 
b、从头删到指定的文件位置

mysql> purge binary logs to'mysql-bin.000004'; Query OK, 0 rows affected (0.03 sec) mysql> system ls -l/data/3306/mysql-bin* -rw-rw---- 1 mysql mysql   126 8月  21 16:31 /data/3306/mysql-bin.000004 -rw-rw---- 1 mysql mysql   126 8月  21 16:32 /data/3306/mysql-bin.000005 -rw-rw---- 1 mysql mysql 15881 8月  28 19:16 /data/3306/mysql-bin.000006 -rw-rw---- 1 mysql mysql    84 8月  28 19:26 /data/3306/mysql-bin.index

c、按照时间删除

mysql> PURGE MASTER LOGS BEFORE'2016-08-28 13:00:00'; Query OK, 0 rows affected (0.02 sec) mysql> system ls -l/data/3306/mysql-bin*             -rw-rw---- 1 mysql mysql 15881 8月  28 19:16 /data/3306/mysql-bin.000006 -rw-rw---- 1 mysql mysql    28 8月  28 19:28 /data/3306/mysql-bin.index   mysql> PURGE MASTER LOGS BEFOREDATE_SUB(NOW( ), INTERVAL 3 DAY); Query OK, 0 rows affected (0.00 sec)   mysql> system ls -l/data/3306/mysql-bin* -rw-rw---- 1 mysql mysql 15881 8月  28 19:16 /data/3306/mysql-bin.000006 -rw-rw---- 1 mysql mysql    28 8月  28 19:28 /data/3306/mysql-bin.index

Mysql binlog的三种模式

statement level (默认语句模式)

每一条被修改数据的sql都会记录到master的bin-log中。slave在复制的时候sql进程会解析成和原来master端执行过的相同sql来再次执行。

例如: 100w: update nfsnobody setname=’tingting’ bin-log里面: 只记录一条:update nfsnobody setname=’tingting’

 
优点:statementlevel下的有点首先就是解决了row level下的缺点,不需要记录每一行数据变化,减少bin-log日志量,节约磁盘IO,提高性能。因为他只要记录在master上所执行的语句的细节,以及执行语句时候的上下文信息。
缺点:容易出现主从不一致。
 

row level(行级模式):

日志中会记录成每一行数据被修改的情况,然后在slave端再对数据进行修改。

例如: 100w: update nfsnobody setname=’tingting’ bin-log里面: 100w条:update nfsnobody set name=’tingting’

 
优点:主从一致,逐行记录,记录很细。
缺点:占用大量磁盘空间,降低磁盘性能,消耗磁盘IO。
 

mixed(混合模式):

实际上就是前两种模式的结合,在mixed模式下mysql会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在statement和row之间选择一种。

例如: 智能模式 100w: update nfsnobody setname=’tingting’ bin-log里面: 只记录一条:update nfsnobody setname=’tingting’使用语句模式 函数,触发器,存储过程:使用row-level

 

bin-log模式选择

a、互联网公司,使用mysql的功能相对少(存储过程、触发器、函数)
   选择默认的语句模式,statement(默认)。
b、公司如果用到使用mysql的特殊功能(存储过程、触发器、函数)
   则选择mixed模式。
c、公司如果用到使用mysql的特殊功能(存储过程、触发器、函数),又希望数据最大化一致
   此时最好的选择:row-level模式。

 

解析bin-log日志方法 mysqlbinlog --base64-output=decode-rows -v mysql-bin.000007

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgzyzj.html