MySQL元数据

元数据获取

什么是元数据 : 除了表之外的 都是元数据 也称之为基表
比如 库表属性 状态信息 权限 等

视图模式:
自定义 :将一大串命令 指定成一个视图 类似别名
create view v_xxxx as 一下子命令 # 定义视图只在当前库中使用
select * from v_xxx; # 调用视图
drop view v_xxx # 删除视图库

元数据获取方法

方法一: show语句 系统封装好的基础查询功能 可实现大部分的元数据查询需求

方法二: information_schema视图库

系统自定义的元数据查询方法

select 可看大部分系统自带的

应用场景 数据库资产统计

例如 有多少库 表 数据库数据增长量 结构信息 变化等各种资产统计

用于做数据库资产统计的视图

tables 常用列为

desc information_schema.tables;

TABLE_SCHEMA    #  表所在的库 (库的名字)
TABLE_NAME      #  表名       (表的名字)
ENGINE          #  引擎           
TABLE_ROWS      #  表的行数
AVG_ROW_LENGTH  #  平均行长度    (行的长度)
INDEX_LENGTH    #  索引长度     (表的大小为 行数*长度+索引长度)
TABLE_COMMENT   #  表的注释
columns         #  表的所有信息

实际应用:

统计库里表的个数

USE information_schema;
select table_schema,count(table_name) 
from information_schema.tables 
group by table_schema;

统计不同存储引擎的表名

USE information_schema;
SELECT ENGINE,GROUP_CONCAT(table_name) 
FROM information_schema.tables 
GROUP BY ENGINE;

统计所有非系统表, 非innodb引擎的表名单

USE information_schema;
SELECT table_schema,table_name ,ENGINE 
FROM information_schema.tables
WHERE table_schema NOT IN ('mysql','information_schema','performance_schema','sys')
HAVING  ENGINE != 'innodb';

统计每个库总的数据量

数据量计算: 表的行数乘以行的长度

USE information_schema;
SELECT table_schema,SUM(table_rows * AVG_ROW_LENGTH + INDEX_LENGTH)/1024/1024 AS "total_mb"
FROM information_schema.tables
WHERE table_schema NOT IN ('sys','information_schema','mysql','performance_schema')
GROUP BY table_schema
ORDER BY total_mb DESC;

统计一个库的数据量

USE information_schema;
SELECT table_schema,SUM(table_rows * AVG_ROW_LENGTH)
FROM TABLES
WHERE table_schema='库名';

统计每个库下表的数据量

USE information_schema;
SELECT table_schema,table_name,SUM(table_rows * AVG_ROW_LENGTH)
FROM TABLES
WHERE table_schema NOT IN ('mysql','information_schema','performance_schema','sys')
GROUP BY table_name
ORDER BY table_schema;

统计一个表的数据量

USE information_schema;
SELECT table_schema,SUM(table_rows * AVG_ROW_LENGTH + INDEX_LENGTH)/1024/1024 
FROM information_schema.tables
WHERE table_name='表名';

统计school库下所有数据字典 表名,引擎,数据行,数据量,注释等

主要使用的是columns表内数据

USE information_schema;
SELECT  * FROM COLUMNS;
SELECT column_name,column_type,column_comment
FROM information_schema.COLUMNS
WHERE table_schema='school';

字符串拼接 CONCAT

3.1.1 模仿以下语句,生成数据库下单表的备份语句(不包含系统表),并保存至/BACKUP/sh/bak.sh

SELECT CONCAT("mysqldump -uroot -p123"," ",table_schema," " ,table_name," ",">/backup/",table_schema,"_",table_name,".sql")
FROM information_schema.TABLES
WHERE table_schema
NOT IN ('sys','information_schema','mysql','performance_schema')
INTO OUTFILE ‘/BACKUP/sh/bak.sh’;

备份的话需要在配置文件中添加参数 并重启数据库

/etc/my.cnf 
secure-file-priv

你可能感兴趣的:(MySQL元数据)