數據庫磁盤空間暴增常導致故障。mysqlsize 是一款 Python 工具,從 OS 層快速掃描數據目錄與 Binlog 目錄,計算每個 Schema 大小、增量變化及 Binlog 總量,支持本地輸出或寫入監控庫供趨勢分析。適用於超大實例 (TB 級) 避免 information_schema 查詢阻塞。
./mysqlsize --help
--load 監控庫連接串 user/pass@ip:port:db
--dbtype mysql|oracle
--cfg 配置文件路徑 (默認 /etc/my.cnf)
--field 配置段名 (默認 mysqld)
--datadir 數據目錄鍵名 (如 innodb_data_home_dir)
--logdir Binlog 目錄鍵名 (如 innodb_log_group_home_dir)
[mysqld]
innodb_data_home_dir=/mysql/data/mysql5529/data
innodb_log_group_home_dir=/mysql/data/mysql5529/data
./mysqlsize --dbtype=mysql --cfg=/tmp/my.cnf --field=mysqld \
--datadir=innodb_data_home_dir --logdir=innodb_log_group_home_dir
輸出示例:
Schema: test2 total: 528540K Increment: 0K
Schema: test6 total: 1060K Increment: 48K
...
2015-01-04 Binary log: 10620000 K
CREATE TABLE dbsize (
id INT AUTO_INCREMENT PRIMARY KEY,
schema_name VARCHAR(100),
exectime DATETIME,
schema_size INT COMMENT 'Unit: KB',
incre_size INT COMMENT 'Unit: KB',
type VARCHAR(50),
dbtype VARCHAR(50),
hostname VARCHAR(50),
ipaddr VARCHAR(50),
INDEX (exectime), INDEX (hostname)
) ENGINE=InnoDB;
CREATE TABLE binlogsize (
id INT AUTO_INCREMENT PRIMARY KEY,
logsize INT COMMENT 'Unit: KB',
logtime DATETIME,
hostname VARCHAR(50),
ipaddr VARCHAR(50),
INDEX (hostname)
) ENGINE=InnoDB;
./mysqlsize --load=root/pass@10.20.0.55:3306:test6 --dbtype=mysql \
--cfg=/tmp/my.cnf --field=mysqld \
--datadir=innodb_data_home_dir --logdir=innodb_log_group_home_dir
SELECT b.exectime, b.hostname, b.sum_schema_size, b.sum_incre_size, a.logsize
FROM binlogsize a
JOIN (
SELECT DATE_FORMAT(exectime, '%Y-%m-%d') AS exectime,
hostname,
SUM(schema_size) AS sum_schema_size,
SUM(incre_size) AS sum_incre_size
FROM dbsize
WHERE exectime > DATE_ADD(NOW(), INTERVAL -1 DAY)
AND dbtype='mysql'
AND hostname='skatedb55'
GROUP BY hostname, DATE_FORMAT(exectime, '%Y-%m-%d')
) b ON a.hostname=b.hostname
AND b.exectime = DATE_FORMAT(a.logtime, '%Y-%m-%d');
https://pan.baidu.com/s/1hqGKyHY (密碼: gc5x)crontab -e 每小時執行一次。incre_size 突增、logsize 超閾值。