binlog学习
binlog中记载了数据库发生的变化,比方说新建了一个数据库或者表、表结构发生改变、表中的数据发生了变化时都会记录相应的binlog日志。
binlog
主要用在下边两个方面:
- 用途一: 用于复制。
单台物理机器所能同时处理的请求是有限的,为了提高并发处理请求的能力,一般将MySQL服务部署在多台物理机器中,这些服务器中维护相同的数据副本。
其中一个典型的部署方案就是一主多从
,即一台主服务器(Master)和多台从服务器(Slave)。对于改变数据库状态的请求(DDL、DML等),就将它们发送给主服务器,对于单纯的查询(如SELECT语句)请求,就将它们发送给从服务器。
为了让各个从服务器中存储的数据和主服务器中存储的数据一致,每当我们改变了主服务器中的数据后,就需要将改变的信息同步给各个从服务器。
binlog
日志中正好记录了数据库发生的各种改变的信息,从服务器读取主服务器产生的binlog
日志,然后执行这些binlog
日志中所记录的数据库变化语句,从而达到主从服务器数据一致的效果。
- 用途二: 用于恢复。
为了数据的安全性,我们需要定时备份数据库(mysqldump命令),不过这种全量备份我们不可能每秒都做一遍,而是每天或者每个月做一次全量备份。
那如果在两次全量备份中间手贱写了不加WHERE条件的DELETE语句该怎么办呢?只能将数据库恢复到前一次全量备份时的样子吗?还好我们有binlog
日志,我们可以从上一次全量备份开始,执行自改次备份后产生的binlog
日志,直到我们写DELETE语句之前的binlog日志为止。这样就可以完成数据库恢复的功能。