zoukankan      html  css  js  c++  java
  • 05-Informatica_schema获取元数据

    一、获取元数据

    1、元数据在什么位置

    我们之前存储数据 .ibd文件存储真实数据行,frm存储的是基本列结构,那其他元数据呢,比如权限,占用空间大小的其他属性存储在哪呢,我们把他们存储的位置称为基表,基表是不能被用户直接访问到的,为了安全,可以通过间接手段查询,比如我们常用的show语句,它封装了查询元数据的方法,但是show语句只能是固定模式的查询,只是一小部分

    例如:

    show tables
    # 是说看某个数据库下的所有表
    # 那我现在的需求是查看所有数据库下的所有表,show命令就支持不了了

    其他:

    """
    SOHW databases:列出所有数据库
    SHOW TABLES:列出默认数据库中的表
    SHOW TABLES FROM <database_name>:列出指定数据库中的表
    SHOW INDEX FROM <table_name>:显示表中有关索引和索引列的信息
    SHOW CHARACTER SET:显示可用的字符集及其默认整理
    SHOW STATUS:列出当前数据库状态
    SHOW VARIABLES:列出数据库中的参数定义值
    """

    2、Informatica_schema

    """
    看起来 information_schema 像是一个数据库,但是它并不是一个数据库,
    数据库在磁盘上的一个表现是有一个目录,但是它没有,information_schema是一个虚拟库
    是mysql启动后生成的一个虚拟库
    """

    # 虚拟库里面存着很多类似于表的东西,称为视图,视图对象和表对象存的东西差不多

    解释一下视图例如:

    我们总会做一些复杂查询,可以创建一个视图代替某条语句的执行

    CREATE VIEW test AS 复杂查询语句

    这样就创建了一个test的视图代替复杂语句的执行

    SELECT * FROM test

    informatica_schema 里都是系统预设好的一些视图,包括很多元数据的查询方法

    """
    SCHEMATA表:提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。
    
    TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。
    
    COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns fromschemaname.tablename的结果取之此表。
    
    STATISTICS表:提供了关于表索引的信息。是show index from schemaname.tablename的结果取之此表。
    
    USER_PRIVILEGES(用户权限)表:给出了关于全程权限的信息。该信息源自mysql.user授权表。是非标准表。
    
    SCHEMA_PRIVILEGES(方案权限)表:给出了关于方案(数据库)权限的信息。该信息来自mysql.db授权表。是非标准表。
    
    TABLE_PRIVILEGES(表权限)表:给出了关于表权限的信息。该信息源自mysql.tables_priv授权表。是非标准表。
    
    COLUMN_PRIVILEGES(列权限)表:给出了关于列权限的信息。该信息源自mysql.columns_priv授权表。是非标准表。
    
    CHARACTER_SETS(字符集)表:提供了mysql实例可用字符集的信息。是SHOW CHARACTER SET结果集取之此表。
    
    COLLATIONS表:提供了关于各字符集的对照信息。
    
    COLLATION_CHARACTER_SET_APPLICABILITY表:指明了可用于校对的字符集。这些列等效于SHOW COLLATION的前两个显示字段。
    
    TABLE_CONSTRAINTS表:描述了存在约束的表。以及表的约束类型。
    
    KEY_COLUMN_USAGE表:描述了具有约束的键列。
    
    ROUTINES表:提供了关于存储子程序(存储程序和函数)的信息。此时,ROUTINES表不包含自定义函数(UDF)。名为“mysql.proc name”的列指明了对应于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列。
    
    VIEWS表:给出了关于数据库中的视图的信息。需要有show views权限,否则无法查看视图信息。
    
    TRIGGERS表:提供了关于触发程序的信息。必须有super权限才能查看该表
    """
    视图

     TABLES视图的元数据信息

    字段 含义
    table_catalog 数据表登记目录
    table_schema 数据表所属的数据库名
    table_name 表名称
    table_type 表类型[system view|base table]
    engine 使用的数据库引擎[MyISAM|CSV|InnoDB]
    version 版本,默认值10
    row_format 行格式[Compact|Dynamic|Fixed]
    table_rows 表里所存多少行数据
    avg_row_length 平均行长度
    data_length 数据长度
    max_data_length 最大数据长度
    index_length 索引长度
    data_free 空间碎片
    auto_increment 做自增主键的自动增量当前值
    create_time 表的创建时间
    update_time 表的更新时间
    check_time 表的检查时间
    table_collation 表的字符校验编码集
    checksum 校验和
    create_options 创建选项
    table_comment 表的注释、备注

    例1:

    统计django_orm_01数据库下所有表的的行数和数据量(行长度+索引长度)

    select table_schema,table_name,table_rows,(AVG_ROW_LENGTH+INDEX_LENGTH)/1024/1024 AS size
    from TABLES where table_schema='django_orm_01';

    例2:

    统计整库的真实数据量

    select SUM(AVG_ROW_LENGTH+INDEX_LENGTH)/1024/1024 AS sum_mb FROM TABLES

    例3:

    1、整个数据库中所有表的名字及所在的库名


    SELECT table_name ,TABLE_SCHEMA FROM information_schema.TABLES;

    2、整个数据库下,所有有库下表的个数


    SELECT table_schema,COUNT(table_name) FROM information_schema.TABLES GROUP BY table_schema;

    3、查一下数据库引擎是innodb表,表名+库名


    SELECT table_schema,table_name,ENGINE FROM information_schema.TABLES WHERE ENGINE ='innodb';

    4、统计world数据库下city表的占用空间大小


    SELECT (data_length+index_length)/1024/1024 AS data_mb FROM information_schema.TABLES WHERE TABLE_SCHEMA='world' AND table_name='city';

    5、统计整个数据库的数据量


    SELECT SUM(AVG_ROW_LENGTH+index_length)/1024/1024 AS data_mb FROM information_schema.TABLES

    6、统计world数据库的数据量


    SELECT SUM(AVG_ROW_LENGTH+index_length)/1024/1024 AS data_mb FROM information_schema.TABLES WHERE table_schema='world';

    7、备份数据库下的每一张表,有以下语句格式:备份world库下的city到/BACKUP/world_city.sql



    --- 请模仿以下格式命令,单独备份每一个数据库中的表,1000张表,实现。
    --- mysqldump -uroot -p123 world city > /BACKUP/world_city.sql

    固定不变的有 mysqldump -uroot -p123  world_ .sql

    变化的是  world city  world_city.sql中的city

    SELECT table_schema,table_name FROM information_schema.tables;


    CONCAT('mysqldump -uroot -p123 world ')

    SELECT CONCAT('mysqldump -uroot -p1 ',' ',table_schema,' ',table_name,'> /backup/',table_schema,'_',table_name,'.sql')
    FROM information_schema.tables WHERE table_schema='world';
    -- 写到脚本中
    SELECT CONCAT('mysqldump -uroot -p123 ',' ',table_schema,' ',table_name,'> /backup/',table_schema,'_',table_name,'.sql')
    FROM information_schema.tables WHERE table_schema='world' INTO OUTFILE '/tmp/backup.sh';

    ----注: 如果需要将sql的执行结果导出到操作系统中的文件时,需要MySQL设置安全目录5.6版本

    vim /etc/my.cnf
    添加以下内容,重启数据库即可
    secure-file-priv=/tmp


    8、以以下语句为例:



    create table world.city_bak like world.city;
    给world数据库下的每个表创建一个bak表
    (1)

    select concat('create table ',table_schema,'.',table_name,'_bak like ',table_schema,'.',table_name,';')
    from information_schema.tables
    where table_schema='world'
    into outfile '/tmp/create.sql';

    (2)centos系统运行

    source /tmp/create.sql


    9、以下语句为例:



    alter table world.city_bak discard tablespace;
    清除所有world数据库下所有bak表中的ibd文件

    SELECT CONCAT('alter table ',table_schema,'.',table_name,' discard tablespace;')
    FROM information_schema.tables
    WHERE table_schema='world' AND table_name LIKE '%bak'
    INTO OUTFILE '/tmp/alter.sql';

    source /tmp/alter.sql

    10、



    (1)关闭数据库
    (2)将/application/mysql/data/world数据库下的不带_bak的bak文件名复制一份:
    例如:
    cp city.ibd city_bak.ibd

    cp city.ibd city_bak.ibd
    cp country.ibd country_bak.ibd
    cp countrylanguage.ibd countrylanguage_bak.ibd
    cp score.ibd score_bak.ibd
    cp stu.ibd stu_bak.ibd


    (3)修改权限: chown -R mysql.mysql /application/mysql/data/world
    (4)启动数据库
    (5)以以下语句为例
    alter table world.city_bak import tablespace;
    将所有bak的表进行import操作

    SELECT CONCAT('alter table ',table_schema,'.',table_name,' import tablespace;')
    FROM information_schema.tables
    WHERE table_schema='world' AND table_name LIKE '%bak'
    INTO OUTFILE '/tmp/alter1.sql';

  • 相关阅读:
    阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_14-课程预览功能开发-CMS添加页面接口
    阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_13-课程预览功能开发-CMS页面预览接口测试
    阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_12-课程预览功能开发-需求分析
    阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_11-课程详情页面静态化-课程信息模板设计
    阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_10-课程详情页面静态化-课程详情模型数据查询接口
    阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_09-课程详情页面静态化-静态页面测试
    阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_08-课程预览技术方案
    阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_07-Feign远程调用-Feign测试
    阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_06-Feign远程调用-Ribbon测试
    阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_05-Feign远程调用-客户端负载均衡介绍
  • 原文地址:https://www.cnblogs.com/kongxiangqun/p/13769906.html
Copyright © 2011-2022 走看看