首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL Schema 與 Binary Log 磁盤空間趨勢分析工具:mysqlsize 部署與實戰

     編輯:MySQL 綜合教學

MySQL Schema 與 Binary Log 磁盤空間趨勢分析工具:mysqlsize 部署與實戰

數據庫磁盤空間暴增常導致故障。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)

二、配置文件示例 (/tmp/my.cnf)

[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

四、寫入監控庫模式

1. 建表

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;

2. 執行寫入

./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 超閾值。
  • 優勢:OS 層掃描毫秒級完成,不佔用數據庫連接、不加鎖、不影響業務。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved