mysql binlog详解

   mysql binlog也是我们所说的二进制日志,它是用于记录mysql数据库的执行更改的所有操作,那些对数据库没有作出修改的sql,是不会被其记录下来,比如说select,show等

 二进制日志主要有两个作用:

1、主从复制

2、数据恢复

 

1、开启二进制日志

修改log_bin参数  并且该参数只能在my.cnf里面修改之后重启数据库才生效

log_bin=mysql-bin
server_id = 1
log_bin_index=/usr/local/mysql/data/bin_index

在这里注意一点,如果配置文件里面没有配置server_id,那么重启时会报错:

Starting MySQL. ERROR! The server quit without updating PID file (/usr/local/mysql/data/localhost.localdomain.pid).

2、关于binlog的一些参数 

log_bin_index 该参数记录的是二进制日志的序列

max_binlog_size 该参数定义了单个binlog的大小,当产生的binlog大于定义值时,就会自动生成新一个binlog文件。该值默认大                            小为1g,在生产环境当中,我们控制binlog的生成时间的最小间隔保持在2~5分钟,所以该值不宜太大,可以调                             整到256M左右

binlog_cache_size 在mysql的写入机制当中,所以事务,如果没有commit,那么它所插入的数据,或者更新数据 ,都会存放在                                  内存中,和oracle类似,这块内存的大小由该参数控制。并且,如果设置的内存过小,那么它会在操作系统                                  里面生成临时文件来存放没有commit的数据,该值设置得是否合理 ,可以用show global status like                                               '%binlog_cache%',查看以下两个参数

                                  Binlog_cache_disk_use  (事务类 )二进志日志缓存的已经存在硬盘的条数)

                                  Binlog_cache_use                (事务类)二进制日志已缓存的条数(内存中)      

                                这四个参数的值都是表示记录数,而不是表示容量大小

binlog_format          在mysql当中 ,二进制的存放方式有三种,分别为statement,row,mixed 

                               row:基于行的变更情况记录,会记录变更前后的数据变化。主从复制推荐使用

                               statement ,基于操作的sql语名记录到日志当中,

                               mixed:有row,和stament的特点

expire_logs_days 二进制文件保留时间

sync_binlog    binlog的刷新时间

 

3、关于binlog的查看

binlog 是一个二进制日志文件,无法通过cat,tail,more等命令来查看,mysql提供了一个专用的工具 mysqlbinlog

我们先执行一个update语句,更新一条记录

mysql> select * from zwz;
+------+------+
| id   | name |
+------+------+
|    1 | a    |
|    2 | b    |
|    3 | c    |
|    4 | d    |
+------+------+
4 rows in set (0.00 sec)

mysql> update zwz set name ='zwz' where id =1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from zwz;
+------+------+
| id   | name |
+------+------+
|    1 | zwz  |
|    2 | b    |
|    3 | c    |
|    4 | d    |
+------+------+
4 rows in set (0.00 sec)

mysql> 

然后执行该命令
 

mysqlbinlog --no-defaults -v -v --base64-output=decode-rows /usr/local/mysql/data/mysql-bin.000002 >/root/bin.log

 在该目录/root/bin.log 下可以看到具体的binlog

### UPDATE `test`.`zwz`
### WHERE
###   @1=1 /* INT meta=0 nullable=1 is_null=0 */
###   @2='a' /* VARSTRING(12) meta=12 nullable=1 is_null=0 */
### SET
###   @1=1 /* INT meta=0 nullable=1 is_null=0 */
###   @2='zwz' /* VARSTRING(12) meta=12 nullable=1 is_null=0 */
# at 1169
#180918  7:41:05 server id 1  end_log_pos 1200 CRC32 0xe692e9b3 	Xid = 28
COMMIT/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

          

 

你可能感兴趣的:(mysql)