MySQL-SQL基础应用(元数据获取)

2.1 元数据介绍
基表---->数据字典信息(表列结构,存储在frm文件中)、系统状态、对象状态;
相当于Linux中的Inode
2.2 show 语句(MySQL独家)
show databases;
show tables; 
show create database  xxx;
show create table  xxx;
show grants for xxx;
show charset ;
show collation;
show variables like '%trx%';
show engines; 
show processlist;
show index from t1;
show status ;
show engine innodb status\G
show binlog events in ''
show binary logs 
show master status 
show slave status\G 
show relaylog events in ''
SHOW TABLE STATUS ;

help show; 
2.3 information_schema虚拟库(试图)
2.3.1 试图

将一些常用的查询需求,分装成试图,后期调用直接查询试图就可以,更加简便、安全

-- 创建试图
CREATE VIEW test AS SELECT    
country.name AS co_name,country.SurfaceArea,city.name AS ci_name,city.Population
FROM city   JOIN country
ON city.CountryCode=country.code
WHERE city.Population<100;

-- 调用试图
SELECT * FROM test; 
2.3.2 TABLES 的作用和结构

1>TABLES 的作用
存储整个数据库中,所有表中的元数据的查询方式.
2>TABLES 的结构

wenjuan[information_schema]>desc TABLES;
+-----------------+---------------------+------+-----+---------+-------+
| Field           | Type                | Null | Key | Default | Extra |
+-----------------+---------------------+------+-----+---------+-------+
| TABLE_CATALOG   | varchar(512)        | NO   |     |         |       |
| TABLE_SCHEMA    | varchar(64)         | NO   |     |         |       |
| TABLE_NAME      | varchar(64)         | NO   |     |         |       |
| TABLE_TYPE      | varchar(64)         | NO   |     |         |       |
| ENGINE          | varchar(64)         | YES  |     | NULL    |       |
| VERSION         | bigint(21) unsigned | YES  |     | NULL    |       |
| ROW_FORMAT      | varchar(10)         | YES  |     | NULL    |       |
| TABLE_ROWS      | bigint(21) unsigned | YES  |     | NULL    |       |
| AVG_ROW_LENGTH  | bigint(21) unsigned | YES  |     | NULL    |       |
| DATA_LENGTH     | bigint(21) unsigned | YES  |     | NULL    |       |
| MAX_DATA_LENGTH | bigint(21) unsigned | YES  |     | NULL    |       |
| INDEX_LENGTH    | bigint(21) unsigned | YES  |     | NULL    |       |
| DATA_FREE       | bigint(21) unsigned | YES  |     | NULL    |       |
| AUTO_INCREMENT  | bigint(21) unsigned | YES  |     | NULL    |       |
| CREATE_TIME     | datetime            | YES  |     | NULL    |       |
| UPDATE_TIME     | datetime            | YES  |     | NULL    |       |
| CHECK_TIME      | datetime            | YES  |     | NULL    |       |
| TABLE_COLLATION | varchar(32)         | YES  |     | NULL    |       |
| CHECKSUM        | bigint(21) unsigned | YES  |     | NULL    |       |
| CREATE_OPTIONS  | varchar(255)        | YES  |     | NULL    |       |
| TABLE_COMMENT   | varchar(2048)       | NO   |     |         |       |
+-----------------+---------------------+------+-----+---------+-------+
21 rows in set (0.00 sec)

wenjuan[information_schema]>

常用查询列:
TABLE_SCHEMA 表所在的库
TABLE_NAME 表名
ENGINE 表的引擎
TABLE_ROWS 表的行数
AVG_ROW_LENGTH 平均行长度
INDEX_LENGTH 索引长度

3> 举例
(1)查询 world 数据库下的所有表名

wenjuan[(none)]>show tables from world;

(2)查询整个数据库下的所有表名

wenjuan[(none)]>select table_name from information_schema.tables;

(3)查询所有InnoDB引擎的表

wenjuan[(none)]>SELECT table_schema,table_name,ENGINE FROM information_schema.TABLES WHERE ENGINE='innodb';

(4)统计每张表的实际占用空间大小情况(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)

SELECT table_name,AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH  FROM information_schema.TABLES

(5)统计每个库的空间使用情况大小情况

SELECT table_schema,SUM(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)/1024/1024  FROM information_schema.TABLES GROUP BY table_schema

中小型:300G---500G
中大型:2T------9T

(6)对MySQL的数据库进行分库分表备份(重要)

-- 单表备份
mysqldump -uroot -p123456  world city >/backup/world_city.sql

-- 进行分库分表,并将批量备份语句保存到文件中,之后`sh /tmp/sqlback.sql`执行文件就可以
SELECT CONCAT('mysqldump -uroot -p123456 ',table_schema,' ',table_name,' > /backup_sql/',table_schema,'_',table_name,'.sql')
FROM information_schema.TABLES INTO OUTFILE '/tmp/sqlback.sql'

注意:The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
出现以上的错误是没有设置安全路径,5.7以后才出现的约束
解决:将secure-file-priv=这个参数添加到/etc/my.cnf的服务端里面,可以指定*(所有目录),也可以指定具体的某个目录,然后重启mysql:/etc/init.d/mysqld restart

16955089-19294cbd5ab328d2.png

(7)模仿模板语句,批量生成对world数据库下的表操作的语句

-- 单表修改
-- atler table world.city engine=innodb;

-- 批量修改
SELECT CONCAT("alter table ",table_schema,".",table_name," engine=innodb;")
FROM information_schema.tables WHERE table_schema='world'
INTO OUTFILE '/tmp/world_innodb.sql';

[root@db01 ~]# cat /tmp/world_innodb.sql 
alter table world.city engine=innodb;
alter table world.country engine=innodb;
alter table world.countrylanguage engine=innodb;
[root@db01 ~]#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值