MySQL从库com_insert无变化的原因
如下面显示,第二列代表主库,第三列代表从库:
com_select22 1138com_update36 37com_insert 133135com_delete 00qcache_hits00Com_replace00Connections 13 24
但是我们看另外一个业务:
com_select 0 95com_update 00com_insert920com_delete200qcache_hits06Com_replace00Connections06
我们可以很明显的看出来,主库有92个写,但是从库0个写,这是为什么呢?
这2个业务唯一的区别就是binlog_format的设置不一样。
第一个业务
show global variables like '%binlog_format%';+---------------+-----------+| Variable_name | Value |+---------------+-----------+| binlog_format | STATEMENT |+---------------+-----------+
第二个业务
show global variables like '%binlog_format%';+---------------+-------+| Variable_name | Value |+---------------+-------+| binlog_format | ROW |+---------------+-------+
我们来看下com_xxx的官方文档定义:
The Com_xxx statement counter variables indicate the number of times each xxx statement has been executed. There is one status variable for each type of statement. For example, Com_delete and Com_update count DELETE and UPDATE statements, respectively. Com_delete_multi and Com_update_multi are similar but apply to DELETE and UPDATE statements that use multiple-table syntax.
从上述文档,我们只能看到com_xxx是如何运作的,但是并不能解释为什么使用RBR之后com_insert就不变化了。
接下来我们结合下面这段文档来一起看看。
You cannot examine the logs to see what statements were executed, nor can you see on the slave what statements were received from the master and executed.However, you can see what data was changed using mysqlbinlog with the options --base64-output=DECODE-ROWS and --verbose.
这2段话结合来看,原因应该是这样的:
1、主库上接收的是statement的语句,所以com_insert符合触发条件,会随着业务增加。
2、而从库是拿到主库的binlog后重放更新数据,但是主库的日志格式是row format,这就导致了binlog中记录的不是statement语句,而是data的变化记录。
3、这样从库虽然依然能进行更新记录,但是无法解析出来这些data变化是一条statement语句导致的还是多条statment语句导致,所以就不在更新com_insert这个statment counter了。
基本上推论符合现实情况,但是没有code证明,比较遗憾。
另外,如果我们无法通过com_insert来监控从库的写入情况,那么我们应该监控那个status呢?
个人建议对于row格式的实例,通过监控innodb_rows_inserted来监控写入情况。
show global status like 'innodb_rows_inserted';+----------------------+------------+| Variable_name| Value|+----------------------+------------+| Innodb_rows_inserted | 2666049650 |+----------------------+------------+
附:(两个文档的官方文档链接)
http://dev.mysql.com/doc/refman/5.6/en/server-status-variables.html#statvar_Com_xxx
http://dev.mysql.com/doc/refman/5.5/en/replication-sbr-rbr.html
上一篇: 腾龙公司开户16624610555
下一篇: MySQL 架构
推荐阅读
-
Mysql数据库从5.6.28版本升到8.0.11版本部署项目时遇到的问题及解决方法
-
Python之csv文件从MySQL数据库导入导出的方法
-
Centos7下无法远程连接mysql数据库的原因与解决
-
面试|简单描述MySQL中,索引,主键,唯一索引,联合索引 的区别,对数据库的性能有什么影响(从读写两方面)
-
从零学习node.js之mysql数据库的操作(五)
-
找到一种不错的从SQLServer转成Mysql数据库的方法
-
Python使用pymysql从MySQL数据库中读出数据的方法
-
从MySQL数据库表中取出随机数据的代码
-
TIDB作为mysql的从库使用
-
MySql从库IP变更时主库的配置