mysql 的 binary log 初探

binary log是mysql中一个重要的部分,主要作用有两个:

 

Replication:在master端开启binary log后,log会记录所有数据库的改动,然后slave端获取这个Log文件内容就可以在slave端进行同样的操作。

备份:在某个时间点a做了一次备份,然后利用binary log记录从这个时间点a后的所有数据库的改动,然后下一次还原的时候,利用时间点a的备份文件和这个binary log文件,就可以将数据还原。

 

 

与binary log相关的参数如下:

 

log-bin和log-bin_index:指定log文件和索引文件的位置。

max_binlog_size: binary log最大的大小

binlog_cache_size: 当前的多少事务cache在内存中

binlog_cache_disk_use:当前有多少事务暂存在磁盘上的,如果这个值有数值的话,就应该要注意调优了。

max_binlog_cache_size: 最大能有多少事务cache在内存中

binlog_do_db和binlog_ingore_db:是一对控制对哪些数据库进行收集的选项。

sync_binlog:这个值控制cache的数据commit多少次才刷到磁盘上。默认是0,也就是让数据库自己决定同步的频率。如设置成1的话,则每commit一次就会将cache的数据同步到磁盘上,这样做最安全,但是性能最差。

 

log的控制命令:

手工切换log: flush logs

查看log文件:show binary logs, show master logs

重置log: reset master

删除部分日志: purge binary logs to 'log_name'|'date'

自动删除过期的日志,通过设置expire_logs_days来控制删除几天前的日志

 

另外binlog_format有三个选项,分别是statement,row,mixed,来控制产生binary log的格式。

 

对于产生的binary log可以通过mysqlbinlog命令来将log的信息打印出来。

 

mysql> show variables like '%format%';
+--------------------------+-------------------+
| Variable_name            | Value             |
+--------------------------+-------------------+
| binlog_format            | ROW               |

[root@rhel131 tmp]# mysqlbinlog /tmp/1.000001


/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#131018 23:31:26 server id 1  end_log_pos 120 CRC32 0x67b9d21f  Start: binlog v 4, server v 5.6.13-log created 131018 23:31:26 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
TlRhUg8BAAAAdAAAAHgAAAABAAQANS42LjEzLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABOVGFSEzgNAAgAEgAEBAQEEgAAXAAEGggAAAAICAgCAAAACgoKGRkAAR/S
uWc=
'/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET
COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/

;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

 

 

 

 

MySQL Binary Log主要用于记录对MySQL数据库真正执行更改的所有操作即DML语句,不包含那些没有修改任何数据的语句,像`select`、`show`这样的语句就不会被记录;如需记录那么需要开启全量日志功能 [^2]。 大部分Binary Log的介绍都适用于Replication Server中的Relay Log(中继日志),因为Relay Log的format和Binary Log一致 [^1]。 查看Binary Log的格式可以使用以下命令: ```sql show variables like '%format%'; ``` 示例输出如下: ```plaintext +--------------------------+-------------------+ | Variable_name | Value | +--------------------------+-------------------+ | binlog_format | ROW | +--------------------------+-------------------+ ``` 这里显示`binlog_format`的值为`ROW` [^4]。 开启全量日志功能的方法有两种: #### 永久开启 通过修改配置文件,修改完之后需要重启服务。在`my.cnf`里的`[mysqld]`添加以下(0 - 关闭,1 - 开启): ```plaintext general-log = 1 general-log-file = /GENERAL/LOG/PATH ``` 注意,有时候可能重启之后不会生效,可以执行`flush privileges`再试试 [^2]。 #### 临时开启 临时生效,不用重启: ```sql set global general_log=ON; set global general_log_file=/GENERAL/LOG/PATH; ``` 开启`general log`会将所有到达MySQL Server的SQL语句记录下来。一般不会开启此功能,因为log的量会非常庞大;这个日志对于操作频繁的库,产生的数据量会很快增长,出于对硬盘的保护,可以设置其他存放路径。开启`general log`会耗费数据库5% - 10%的性能,没有什么特殊需求一般不建议打开;个别情况下可能会临时的开一会儿`general log`以供排障使用 [^2]。 使用`mysqlbinlog`命令进行恢复操作时,必须是编号小的先恢复,例如`atguigu-bin.000001`必须在`atguigu-bin.000002`之前恢复。`flush logs`可以生成新的binLog文件,不然这个文件边恢复边变大是不行的。`show binary logs`可以显示有哪些binLog文件 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值