元数据的获取

2020-07-02  本文已影响0人  肥四_F4

元数据的获取
1.元数据包含什么?
数据字典信息(表属性、列、列属性)、状态、系统参数、权限等。
ibdata1 、 frm 、 mysql库(权限表、状态表、统计信息) 、 P_S、SYS表

  1. 查询换数据方法

show 语句

help show 
show databases;  
show tables [from DB];
show create database world;
show craete table world.city;
show full processlist;
show engines;
show charset;
show collation;
show variables [like '%%']
show status    [like '%%']
show grants for 
SHOW OPEN TABLES 
SHOW INDEX FROM tbl_name 
SHOW MASTER STATUS
SHOW BINLOG EVENTS
SHOW RELAYLOG EVENTS
SHOW SLAVE STATUS
SHOW SLAVE HOSTS

information_schema 视图库

每次数据库启动,自动在内存中生成的“虚拟表”(视图)。
保存了各种常用元数据查询方法的视图,只能查询不能修改和删除。

-- TABLES 使用
-- 1. 结构介绍
作用:存储了整个MySQL中所有表相关属性信息

desc tables;
TABLE_SCHEMA     :  所在库
TABLE_NAME       : 表名
ENGINE           : 存储引擎
TABLE_ROWS       : 数据行
AVG_ROW_LENGTH   : 平均行长度
INDEX_LENGTH     : 索引的长度
DATA_FREE        : 碎片的情况

-- 2. 应用案例
-- 例子1: 统计MySQL所有业务库:库名、表个数、表名

select table_schema,count(*),group_concat(table_name) 
from information_schema.tables 
where table_schema not in ('mysql','sys','information_schema','performance_schema')
group by table_schema ;

-- 例子2: 统计MySQL所有业务库:库名、数据总量(单张表:

TABLE_ROWS*AVG_ROW_LENGTH+INDEX_LENGTH)

select table_schema,sum(TABLE_ROWS*AVG_ROW_LENGTH+INDEX_LENGTH)/1024/1024 as sum_mb
from information_schema.tables 
where table_schema not in ('mysql','sys','information_schema','performance_schema')
group by table_schema ;

-- 例子3:
生产案例:客户MySQL系统 经历的很多个版本 5.1 --》 5.5 ---》 5.6。。。
系统中有2000-3000张表,其中有myisam、innodb两种存储引擎类型。
需求1: 查找业务库中,所有非InnoDB表

select table_schema,table_name,engine
from information_schema.tables 
where table_schema not in ('mysql','sys','information_schema','performance_schema') and engine !='innodb';

需求2: 将所有这些表备份走

mysqldump -uroot -p123 test t1 >/data/test_t1.sql

select concat("mysqldump -uroot -p123 ",table_schema," ",table_name," >/data/",table_schema,"_",table_name,".sql")
from information_schema.tables  
where table_schema not in ('mysql','sys','information_schema','performance_schema') and engine !='innodb'
into outfile '/tmp/dump.sh';

需求3: 将以上表替换为InnoDB引擎

alter table test.t1 engine=innodb;

select concat("alter table ",table_schema,".",table_name," engine=innodb;")
from information_schema.tables  
where table_schema not in ('mysql','sys','information_schema','performance_schema') and engine !='innodb'
into outfile '/tmp/alter.sql';

[root@db01 ~]# sh /tmp/dump.sh 
[root@db01 ~]# cd /data/
[root@db01 data]# ll
-rw-r--r-- 1 root  root  1741 Jul  2 18:30 test_t1.sql
-rw-r--r-- 1 root  root  1741 Jul  2 18:30 world_t2.sql
[root@db01 data]# mysql -uroot -p123 </tmp/alter.sql

mysql> select table_schema,table_name,engine from information_schema.tables  where table_schema not in ('mysql','sys','information_schema','performance_schema') and engine !='innodb';
Empty set (0.00 sec)
上一篇下一篇

猜你喜欢

热点阅读