写在前面:
现在有这样一个需求,需要统计线上数据库每天产生的数据量有多少,以此来反馈线上业务库的繁忙程度,怎么做呢?刚开始的时候,考虑用统计数据库备份文件大小,然后对比几天内的数据量差异的方法来进行统计,后来经过思考,发现这样一来,只能看出数据量增加了多少(只能统计insert、create等)。但如果业务库更多的是执行update、delete等操作,你会发现其实你的数据量并不会增加,甚至数据量较之前还会减少,这样,反映不了线上业务库的真实情况,而且这其中还掺杂着表碎片的影响。所以,经过考虑,笔者决定写个简单的Shell,分析binlog来进行统计较为靠谱
#!/bin/bash
#统计数据库每天产生的数据量大小
#author:lzb
time=`date "+%F"`
dataBases="bailidb university knowledge interface crm edusoho_e newedusoho ucserver bailiurm teacherprogram"
mysqlbinlog=/usr/local/mysql/bin/mysqlbinlog
binlog="mysql-bin.000304"
start="2019-06-08 10:00:00"
stop="2019-06-09 10:00:00"
for db in $dataBases
do
$mysqlbinlog --database=$db --start-datetime="$start" --stop-datetime="$stop" $binlog > ${db}-$time.sql
sleep 3
du -sh ${db}-$time.sql
/bin/rm -f ${db}-$time.sql
done
如果你认为笔者哪里写的有问题,或者你有更好的想法,欢迎下方留言!