MySQL
整体来看,其实就有两块:一块是Server
层,它主要做的是MySQL
功能层面的事情;还有一块是引擎层,负责存储相关的具体事宜。InnoDB
引擎特有的日志是redo log
,而Server
层的日志称为binlog
。binlog
记录了对MySQL
数据库执行更改的所有操作,binlog
文件写到一定大小后会切换到下一个(但一个事务的操作肯定在一个文件中,即大事务引发大文件)。
其大体作用:
恢复:某些数据的恢复需要二进制日志。
复制(replication)
:通过复制和执行二进制日志使一台远程的MySQL
数据库(一般为slave
或standby
)与一台MySQL
数据库(一般为master
或primary
)进行同步。(阿里cannel
开源框架)
审计(audit
):用户可以通过二进制日志中的信息进行审计,判断是否有对数据库进行注入的攻击
备份
将指定数据库备份到某dump文件(转储文件)中:
1 | mysqldump -uroot -p123 test > test.dump |
从备份文件恢复数据库:
1 | mysql -uroot -p123 test < test.dump |
复制
mysql
支持两种复制方式:基于行的复制和基于语句的复制。基于语句的复制(也称为逻辑复制)。这两种方式都是通过在主库上记录二进制日志、在备库重放日志的方式来实现异步的数据复制。
这意味着,在同一时间点备库上的数据可能与主库存在不一致,并且无法保证主备之间的廷迟。一些大的语句可能导致备库产生几称、几分钟甚至几个小时的廷迟。
主库和备库使用不同的存储引擎(不推荐)
基于行的复制不会受这个问题的影响。因为它记录的是数据的更改,而不是SQL
语句。如果一条语句改变了一个myisam
表和一个innodb
表的某些行,然后主库上发生了一次死锁,innodb
表的更新会被回滚,而myisam
表的更新仍会被记录到日志中并在备库重放。
当使用基于语句的复制方式时,如果通过不确定的方式更改数据可能会导致主备不一致。
根据备份的方法不同可以将备份分为
热备、冷备、温备。
热备是指数据库运行中直接备份,对正在运行的数据库操作没有任何的影响。
冷备非常简单,只需要备份mysql
数据库的frm
文件,共享表空间文件,独立表空间文件,重做日志文件,配置文件。