寫在前面:
現在有這樣一個需求,需要統計線上數據庫每天產生的數據量有多少,以此來反饋線上業務庫的繁忙程度,怎麼做呢?剛開始的時候,考慮用統計數據庫備份文件大小,然後對比幾天內的數據量差異的方法來進行統計,後來經過思考,發現這樣一來,只能看出數據量增加了多少(只能統計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
如果你認爲筆者哪裏寫的有問題,或者你有更好的想法,歡迎下方留言!