时间:2021-07-01 10:21:17 帮助过:18人阅读
例如:对于delete 或者update语句,如果使用了limit但是并没有 order by ,这就属于非确定性的语句,就不会被记录
对于没有索引条件的update语句,必须锁定更多的数据,降低了数据库的性能。
insert……select 语句同样也需要锁定大量的数据,对数据库的性能有所损耗。
获取更详细的信息可以参考官方文档——Statement-Based的优点和缺点
优点
所有的改变都会被复制,这是最安全的复制方式
对于 update、insert……select等语句锁定更少的行
此种方式和大多数的数据库系统一样,所以了解其他的系统的人员可以很容易的转到mysql
缺点
使用不方便,我们不能通过bin-log日志文件查看什么语句执行了,也无从知道在从服务器上接收到什么语句,我们只能看到什么数据改变了
因为记录的是数据,所以说bin-log日志文件占用的存储空间要比Statement-based大。
对于数据量大的操作其花费的时间有更长
获取更详细的信息可以参考官方文档——Row-Based的优点和缺点
bin-log日志文件默认的格式为Statement-Based,如果想改变其格式在开启服务的时候使用—binlog-format选项,其具体命令如下
?1 | mysqld_safe – user =msyql –binlog-format=格式 & |
Binlog dump 线程是当有从服务器连接的时候由主服务器创建,其大致工作过程经历如下几个阶段:
首先bin-log日志文件加锁,然后读取更新的操作,读取完毕以后将锁释放掉,最后将读取的记录发送给从服务器。
我们可以使用如下的命令来查看该线程的信息
?1 | mysql> SHOW PROCESSLIST\G |
以我的系统为例,因为我这系统中是一台主服务器和两台从服务器,所以会列出两条Binlog dump线程的信息
?123456789101112131415161718 | *************************** 1. row *************************** Id: 2 User : repuser Host: 192.168.144.131:41544 db: NULL Command: Binlog Dump Time : 54 State: Master has sent all binlog to slave; waiting for binlog to be updated Info: NULL *************************** 2. row *************************** Id: 3 User : repuser Host: 192.168.144.132:40888 db: NULL Command: Binlog Dump Time : 31 State: Master has sent all binlog to slave; waiting for binlog to be updated Info: NULL |
上述字段中的state字段会有以下几种状态:
?