MySQL schema和binary log磁盘空间趋势分析

Author:Skate

Time:2015/01/05

MySQL schema和binary log磁盘空间趋势分析

[[email protected] dist]# ./mysqlsize  --help

usage: Database diskspace usage v0.1 ,(C) Copyright Skate 2014

[-h] [--load LOAD] --dbtype DBTYPE --cfg CFG --field FIELD --datadir

DATADIR --logdir LOGDIR

optional arguments:

-h, --help         show this help message and exit

--load LOAD        = The connection information of database

--dbtype DBTYPE    = The database type

--cfg CFG          = The path to configution file

--field FIELD      = The field of configution file

--datadir DATADIR  = The key of data directory in configuration file

--logdir LOGDIR    = The key of binlog directory in configuration file

[[email protected] dist]#

参数说明:

--load     ////数据库的连接信息 eg:user/[email protected]:port:dbname

--dbtype   ////数据库的类型mysql或oracle

--cfg      ///用于读取数据文件和Binary log文件的路径(datadir,log-bin),默认读取“/etc/my.cnf”,当然你自己也可以定义一个临时配置文件

--field    ///配置文件field,默认是[mysqld]

--datadir  ///在配置文件中,数据文件路径的key值

--logdir   ///在配置文件中,二进制文件路径的key值

本地监控MySQL schema和Binary log的空间使用率和增量变化

[[email protected] dist]# ./mysqlsize  --dbtype=mysql --cfg=/tmp/my.cnf --field=mysqld --datadir=innodb_data_home_dir --logdir=innodb_log_group_home_dir

The parameter load is not provided.So don‘t load into database

Schema: test2                 total: 528540K    Increment: 0K

Schema: test5                 total: 368352K    Increment: 0K

Schema: test4                 total: 4K         Increment: 0K

Schema: performance_schema    total: 212K       Increment: 0K

Schema: test6                 total: 1012K      Increment: 0K

Schema: test30                total: 680K       Increment: 0K

Schema: testa                 total: 592216K    Increment: 0K

Schema: testb                 total: 592340K    Increment: 0K

Schema: testprod              total: 804K       Increment: 0K

Schema: ty_database           total: 488K       Increment: 0K

Schema: mysql                 total: 1016K      Increment: 0K

Schema: test                  total: 55344K     Increment: 0K

Schema: salt                  total: 272K       Increment: 0K

2015-01-04  Binary log:10620000 K

You have new mail in /var/spool/mail/root

[[email protected] dist]#

把监控数据装载到监控中心,供后续分析使用

[[email protected] dist]# ./mysqlsize --load=root/[email protected]:3306:test6 --dbtype=mysql --cfg=/tmp/my.cnf --field=mysqld --datadir=innodb_data_home_dir --logdir=innodb_log_group_home_dir

软件说明:

本工具是用python写的,从os层快速计算MySQL的schema和Binary log的大小变化,并可以记录到数据库中(没有分别统计data和index),

虽然从MySQL数据库视图中可以直接查询,但是当数据库特别大时,查询会很久没有响应。

使用方法:

1. 直接下载文件到被监控端即可使用

下载链接: http://pan.baidu.com/s/1hqGKyHY 密码: gc5x

2. 检查/etc/my.cnf是否显示定义了参数datadir和log-bin,或者直接自己定义配置文件,如下:

[[email protected] dist]# more /tmp/my.cnf

[mysqld]

innodb_data_home_dir=/mysql/data/mysql5529/data

innodb_log_group_home_dir=/mysql/data/mysql5529/data

3.创建表结构

CREATE TABLE `dbsize` (

`id` INT(11) NOT NULL AUTO_INCREMENT,

`schema_name` VARCHAR(100) NULL DEFAULT NULL,

`exectime` DATETIME NULL DEFAULT NULL,

`schema_size` INT(11) NULL DEFAULT NULL COMMENT ‘Unit:k‘,

`incre_size` INT(11) NULL DEFAULT NULL COMMENT ‘Unit:k‘,

`type` VARCHAR(50) NULL DEFAULT NULL,

`dbtype` VARCHAR(50) NULL DEFAULT NULL COMMENT ‘数据库类型 mysql;oracle‘,

`hostname` VARCHAR(50) NULL DEFAULT NULL,

`ipaddr` VARCHAR(50) NULL DEFAULT NULL,

PRIMARY KEY (`id`),

INDEX `exectime` (`exectime`),

INDEX `hostname` (`hostname`)

)

ENGINE=InnoDB;

CREATE TABLE `binlogsize` (

`id` INT(11) NOT NULL AUTO_INCREMENT,

`logsize` INT(11) NULL DEFAULT NULL COMMENT ‘Unit:k‘,

`logtime` DATETIME NULL DEFAULT NULL COMMENT ‘统计日志的时间‘,

`hostname` VARCHAR(50) NULL DEFAULT NULL,

`ipaddr` VARCHAR(50) NULL DEFAULT NULL,

PRIMARY KEY (`id`),

INDEX `hostname` (`hostname`)

)

ENGINE=InnoDB;

4.可以测试工具了

本地显示数据

[[email protected] dist]# ./mysqlsize  --dbtype=mysql --cfg=/tmp/my.cnf --field=mysqld --datadir=innodb_data_home_dir --logdir=innodb_log_group_home_dir

The parameter load is not provided.So don‘t load into database

Schema: test2                 total: 528540K    Increment: 0K

Schema: test5                 total: 368352K    Increment: 0K

Schema: test4                 total: 4K         Increment: 0K

Schema: performance_schema    total: 212K       Increment: 0K

Schema: test6                 total: 1060K      Increment: 48K

Schema: test30                total: 680K       Increment: 0K

Schema: testa                 total: 592216K    Increment: 0K

Schema: testb                 total: 592340K    Increment: 0K

Schema: testprod              total: 804K       Increment: 0K

Schema: ty_database           total: 488K       Increment: 0K

Schema: mysql                 total: 1016K      Increment: 0K

Schema: test                  total: 55344K     Increment: 0K

Schema: salt                  total: 272K       Increment: 0K

2015-01-04  Binary log:10620000 K

You have new mail in /var/spool/mail/root

[[email protected] dist]#

装载到数据库

[[email protected] dist]# ./mysqlsize --load=root/[email protected]:3306:test6 --dbtype=mysql --cfg=/tmp/my.cnf --field=mysqld --datadir=innodb_data_home_dir --logdir=innodb_log_group_home_dir

[[email protected] dist]#

5. 查询历史数据

mysql> select b.* ,a.logsize  from binlogsize a ,

-> (select date_format(exectime,‘%Y-%m-%d‘) as exectime,hostname,sum(schema_size),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

-> where a.hostname=b.hostname

-> and b.exectime=date_format(a.logtime,‘%Y-%m-%d‘)

-> ;

+------------+-----------+------------------+-----------------+----------+

| exectime   | hostname  | sum(schema_size) | sum(incre_size) | logsize  |

+------------+-----------+------------------+-----------------+----------+

| 2015-01-05 | skatedb55 |         27836040 |             648 | 10620000 |

| 2015-01-05 | skatedb55 |         27836040 |             648 | 10620000 |

+------------+-----------+------------------+-----------------+----------+

2 rows in set (0.00 sec)

mysql>

----end----

时间: 2024-10-09 21:13:15

MySQL schema和binary log磁盘空间趋势分析的相关文章

MySQL 二进制日志(Binary Log)

同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分.MySQL有几种不同的日志文件,通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等.这些日志可以帮助我们定位mysqld内部发生的事件,数据库性能故障,记录数据的变更历史,用户恢复数据库等等.二进制日志,也叫binary log,是MySQL Server中最为重要的日志之一,本文主要描述二进制日志. 1.MySQL日志文件系统的组成   a.错误日志:记录启动.运行或停止mysqld时出现的问题.   b.通用日志:

【MySQL】通过Binary Log简单实现数据回滚(一)

一.前言 对,没错,我又水了好一阵子,深刻反思寄几.前段时间,工作项目上出于对excel等批量操作可能出现误操作的问题,要求提供一个能够根据操作批次进行数据回滚的能力.在开发的过程中接触到了MySQL的Binary Log,感觉有些收获,记录一下. 二.Binary Log的概念 首先我们要了解一下什么是Binary Log(详情点进去看): Binary Log(二进制文件),包含了描述数据库更改的"事件",例如创建表的操作或者改变表的数据.如果采用基于行的日志,它还能包含已经发生更

mysql 二进制日志binary log操作简单命令

show master status \G; #查看当前正在记录的二进制日志 show binary logs; #查看binary log 所有文件列表 show binlog events; #查看第一个binary log日志文件 shaow binlog events in'binary log 文件名' #查看制定binary log文件内容 用mysqlbinlog工具查看 查看制定binary log文件内的制定时间段的代码: mysqlbinlog --start-datetim

MySQL慢查询日志引起磁盘空间告警

1.涉及到的参数: log_queries_not_using_indexes = OFF 2.动态参数直接修改: set global log_queries_not_using_indexes = OFF 3.清理日志: >slow.log 写SQL不创建索引的人比比皆是,大公司更不例外.吐槽一下~ 原文地址:https://blog.51cto.com/roidba/2443177

MySQL学习笔记06基于Binary Log的复制

1.1.1. 相关概念 (1)Binary Log 当变量log_bin的值为ON时,MySQL将启用Binary Log,这将在data目录下产生类似mysql-bin.00001, mysql-bin.00002的二进制日志文件,这些文件记录了数据库中执行的各种操作. binlog_format变量指定了MySQL的二进制日志的格式,支持三种类型的格式: ROW       使用数据表的行记录来记录日志.优点是避免了STATEMENT格式时SQL语句中自增字段的不良影响.缺点时一条更新大量记

MySQL二进制日志(binary log)总结

本文出处:http://www.cnblogs.com/wy123/p/7182356.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他) 今天无意中发现了一个云栖社区举行的MySQL“第一季:挑战玄惭之 慢SQL性能优化赛”,在测试服务器上执行其测试脚本写入数据的时候报错提示如下,Multi-statement transaction required more than 'max_binlog_cache_

二进制安装MySQL5.5.39,磁盘空间不足导致MySQL无法启动

--添加用户和组 [[email protected] local]# groupadd [[email protected] local]# useradd -g mysql -s /sbin/nologin -d /opt/msyql mysql --创建目录 [[email protected] local]# mkdir /data/mysql/mysql_3306/{data,logs,tmp} -p --做软链接到/usr/local/mysql [[email protected]

MySQL ibdata1撑爆占满磁盘空间

MySQL主从由于ibdata1占满磁盘空间-->主从失效 因为设置了innodb_file_per_table = 1,ibdata1依旧撑爆占满磁盘空间 主从断的时候,IO线程在连接,SQL线程断掉. 想要了解为何ibdata1增长那么大? 个人这么理解的:主从断掉,IO线程在,获取到了事件事物的更新,而SQL线程断掉,导致产生大量的undo,撑爆了ibdata1. 最终验证发现,确实是undo占满了ibdata1. 下载一个小工具:py_innodb_page_info.py  本人网盘下

mysql 错误- 磁盘空间不足,

mysql 磁盘空间不足错误 磁盘空间满了, 写不进去了. 141020 09:45:24 mysqld_safe Starting mysqld daemon with databases from /alidata/server/mysql-5.6.20/data 2014-10-20 09:45:24 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults