MySQL通过SHOW TABLE STATUS查看库中所有表的具体信息

本文介绍如何使用SHOW TABLE STATUS语句及通过information_schema数据库查询MySQL中指定数据库下所有表的使用情况,包括表大小、创建时间、最近更新时间等,对库表维护具有实际指导意义。

有时候我们想看下指定库下所有表的使用情况,比如,查询表的Table大小,什么时候创建的,数据最近被更新的时间(即最近一笔insert/update/delete的时间)。这些信息对我们进行库表维护很有作用。

1.查询语法
SHOW TABLE STATUS
    [{FROM | IN} db_name]
    [LIKE 'pattern' | WHERE expr]
2.查询语句说明
{FROM | IN} db_name, 可选项,表示查询哪个数据库下面的表信息。
LIKE 'pattern' | WHERE expr ,可选项,可指定符合条件的表;LIKE 'pattern' 可指定表名; WHERE expr,可通过 返回输出字段like来指定符合条件的表名。

不带任何参数,表示查询的是当前库中,所以表的具体信息。
例如,以下语句为查询当前库中所以表大小为
16384的表信息。
SHOW TABLE STATUS  where Data_length like 16384;

此语句返回信息如下图:

3.查询结果中各列的说明
返回列说明
Name表名称
Engine表的存储引擎
Version版本
Row_format行格式
Rows表中的行数。对于非事务性表,这个值是精确的,对于事务性引擎,这个值通常是估算的。
Avg_row_length平均每行的大下(字节)
Data_length表的数据量(单位:字节)
Max_data_length表可以容纳的最大数据量
Index_length索引占用磁盘的空间大小
Data_free标识已分配,但现在未使用的空间,并且包含了已被删除行的空间。
Auto_increment下一个Auto_increment的值
Create_time表的创建时间
Update_time表的最近更新时间
Check_time最近一次使用 check table 或myisamchk工具检查表的时间
Collation表的字符集和字符排序规则
Checksum如果启用,则对整个表的内容计算时的校验和
Create_options表创建时的其它
Comment表在创建是添加的注释说明
 
4.通过系统数据库查询

其实我们也可以通过information_schema数据库下面的tables表去查询表的具体信息。查询结果和上面的信息差不多。例如我们查询 dbtest 数据库下面的表信息
select * from information_schema.tables where TABLE_SCHEMA='dbtest' \G;

  显示结果如下:

 


转载于:https://www.cnblogs.com/xuliuzai/p/10840080.html

<think>我们正在处理用户关于如何导出Apache Doris中SHOW TABLE STATUS命令的输出结果的问题。 根据引用[1]中提到的,Doris提供了HELP命令来查看命令的详细语法,但这里我们关心的是如何导出查询结果。 通常,我们可以将查询结果重定向到文件,或者使用其他导出方式。 在Doris中,导出数据的方式在引用[2]中有所提及,包括数据导出的方法。但需要注意的是,SHOW TABLE STATUS是一个查看状态的命令,而不是一个常规的SELECT查询。因此,我们需要考虑如何将其结果导出。 思路: 1. 我们可以使用MySQL客户端连接到Doris(因为Doris兼容MySQL协议),然后使用重定向将输出写入文件。 2. 或者,我们可以将SHOW TABLE STATUS的结果通过SELECT语句查询出来,然后使用Doris提供的数据导出功能。 但是,SHOW TABLE STATUS在Doris中可能没有直接对应的系统。不过,我们可以通过查询Doris的系统来获取类似的信息。例如,information_schema.tables可能包含部分信息。 然而,根据Doris的文档,SHOW TABLE STATUS命令的输出包含以下列: Name: 名 Engine: 存储引擎(Doris中为OLAP) Version: 版本(内部使用) Row_format: 行格式(Doris中为Fixed) Rows: 行数(近似值) Avg_row_length: 平均行长度 Data_length: 数据长度 Max_data_length: 最大数据长度(未使用) Index_length: 索引长度 Data_free: 未使用 Auto_increment: 自增列当前值(Doris不支持自增列,通常为NULL) Create_time: 创建时间 Update_time: 更新时间 Check_time: 检查时间(未使用) Collation: 排序规则 Checksum: 校验和(未使用) Create_options: 创建选项 Comment: 注释 在Doris中,我们可以通过查询`information_schema.tables`来获取部分信息,但注意,Doris的`information_schema`可能不包含所有SHOW TABLE STATUS的列。 因此,如果我们需要完全相同的输出,使用SHOW TABLE STATUS可能是必要的。 导出方法: 方法1:使用MySQL客户端重定向(适用于命令行交互) 在命令行中执行: mysql -h<fe_host> -P<query_port> -u<user> -p<password> -e "SHOW TABLE STATUS" [database_name] > output.txt 方法2:如果我们需要导出到远程文件系统(如HDFS),或者需要更正式的导出流程,我们可以使用Doris的导出功能。但是,Doris的导出功能(如EXPORT)通常用于导出数据,而不是系统命令的结果。因此,我们可以考虑将SHOW TABLE STATUS的结果先存入一个临时,然后导出这个临时。 步骤: 1. 创建一个临时来存储SHOW TABLE STATUS的结果(但Doris不允许直接通过SELECT SHOW TABLE STATUS)。 2. 或者,我们可以使用SELECT * FROM information_schema.tables来获取部分信息,然后导出。 但是,如果用户坚持要得到和SHOW TABLE STATUS完全相同的输出,且information_schema.tables不满足要求,我们可能需要使用其他方式。 方法3:使用Doris的备份导出(但备份是针对数据的,不适用)。 考虑到SHOW TABLE STATUS的结果集较小,通常我们使用客户端重定向即可。 另外,引用[2]中提到了数据导出的方式,包括: - 使用SELECT INTO OUTFILE(需要配置Broker或S3等导出到文件系统) - 使用EXPORT命令(需要导出数据) 但是,这些命令都不适用于直接导出SHOW命令的结果。 因此,我们推荐使用客户端重定向的方法,或者如果是在程序中,可以通过JDBC将结果读取出来再写入文件。 具体步骤(使用MySQL客户端重定向): 1. 确保已安装MySQL客户端,并且能够连接到Doris的FE节点。 2. 执行命令(注意:如果数据库名包含特殊字符,可能需要用反引号括起来): mysql -h <fe_host> -P <query_port> -u <user> -p<password> -e "SHOW TABLE STATUS FROM `database_name`" > table_status.txt 注意:-p后面可以直接跟密码(没有空格),但这样会暴露在命令历史中。也可以使用-p,然后在提示时输入密码。 方法4:使用Doris的HTTP方式查询(通过Stream Load的查询接口)并获取结果,但通常用于导入,查询输出可以使用Http接口的查询,然后将结果保存。 但是,最简便的方法还是使用命令行重定向。 如果用户需要定期导出,可以考虑编写脚本,使用上述方法。 根据引用[1]中提到的,我们可以使用HELP命令查看SHOW TABLE STATUS的详细用法,但导出结果并没有直接的命令支持。 因此,我们给出以下建议: 结论: 对于一次性导出,使用命令行重定向是最简单的。 对于需要自动化导出的情况,可以使用脚本(如Shell脚本或Python脚本)通过JDBC或命令行客户端执行命令并保存结果。 参考引用[2]中提到的数据导出方式,并没有直接适用于系统命令的导出,所以我们不采用。 下面给出一个使用命令行重定向的示例: 示例: 假设我们有一个数据库名为mydb,FE的查询端口为9030,用户名为root,密码为空,FE主机为localhost,则命令为: mysql -h localhost -P 9030 -u root -e "SHOW TABLE STATUS FROM mydb" > table_status.txt 注意:如果密码不为空,则使用-p<password>(注意-p和密码之间没有空格)或者使用-p然后交互输入密码。 另外,如果数据库名是关键字或包含特殊字符,需要用反引号括起来,例如: mysql -h localhost -P 9030 -u root -e "SHOW TABLE STATUS FROM `my-db`" > table_status.txt 如果用户希望导出为CSV格式,可以使用以下方式(在MySQL客户端中): mysql -h localhost -P 9030 -u root -e "SHOW TABLE STATUS FROM mydb" -s -N | tr '\t' ',' > table_status.csv 解释: -s:静默模式,输出更简洁(制符分隔) -N:不输出列名 然后通过tr命令将制符替换为逗号(注意:如果数据本身包含逗号或制符,可能需要更复杂的处理) 更健壮的方法:使用--batch和--raw模式,并指定输出格式(如CSV): mysql -h localhost -P 9030 -u root --batch -e "SHOW TABLE STATUS FROM mydb" | sed 's/\t/","/g;s/^/"/;s/$/"/;' > table_status.csv 但这样处理可能比较复杂,且需要根据实际情况调整。 另外,如果用户希望使用Doris内置的导出功能,我们可能需要将SHOW TABLE STATUS的结果先存入一个。但是,由于SHOW TABLE STATUS的结果无法直接通过INSERT INTO ... SELECT插入,我们可以通过外部程序(如JDBC)读取结果,然后写入到Doris中,再使用EXPORT导出。但这样过于复杂,不推荐。 因此,我们推荐使用命令行重定向的方法。 根据引用[4]中提到的,我们可以使用SHOW BACKENDS命令,并且输出格式是格形式,SHOW TABLE STATUS也是类似的格形式,所以重定向是可行的。 最后,如果用户是在Doris的Web界面(如Doris Manager)中,也可以手动复制结果。 综上所述,最简单的方法是使用命令行重定向。 相关问题: 1. 如何通过JDBC导出Doris查询结果? 2. Doris中如何将系统命令(如SHOW)的结果保存到中? 3. Doris中information_schema.tables包含哪些信息? 4. Doris支持哪些数据导出方式?</think>### 导出 Apache Doris 中 `SHOW TABLE STATUS` 结果的方法 在 Apache Doris 中,`SHOW TABLE STATUS` 命令用于查看数据库的详细信息(如存储引擎、行数、数据大小等)。由于 Doris 兼容 MySQL 协议,可通过以下方式导出结果: #### 方法 1:MySQL 客户端重定向(推荐) ```bash # 连接 Doris FE 并导出结果到文件 mysql -h<FE_IP> -P<QUERY_PORT> -u<user> -p<password> \ -e "SHOW TABLE STATUS FROM <database_name>" > table_status.txt ``` - **参数说明**: - `<FE_IP>`: FE 节点 IP(如 `127.0.0.1`) - `<QUERY_PORT>`: 查询端口(默认 `9030`) - `<database_name>`: 目标数据库名 - **输出格式**:默认制符分隔的文本文件,可直接用 Excel 打开或转换为 CSV。 #### 方法 2:JDBC 程序导出(自动化场景) 通过 Java/Python 等程序调用 JDBC 连接 Doris,将结果写入文件: ```python # Python 示例(需安装 PyMySQL) import pymysql conn = pymysql.connect( host="<FE_IP>", port=9030, user="<user>", password="<password>", database="<database_name>" ) with conn.cursor() as cursor: cursor.execute("SHOW TABLE STATUS") with open("output.csv", "w") as f: f.write(",".join([col[0] for col in cursor.description]) + "\n") # 写列名 for row in cursor.fetchall(): f.write(",".join(map(str, row)) + "\n") # 写数据行 ``` #### 方法 3:通过 Doris 内置导出(需转换为 SELECT) 若需导出到 HDFS/S3 等存储,需先将结果存入临时: ```sql -- 步骤 1:创建临时 CREATE TABLE temp_table_status ( Name VARCHAR(64), Engine VARCHAR(64), Version INT, ... -- 其他列需按 SHOW TABLE STATUS 实际字段定义 ); -- 步骤 2:通过脚本或程序将 SHOW TABLE STATUS 结果插入临时(需外部程序支持) -- 步骤 3:使用 EXPORT 导出数据 EXPORT TABLE temp_table_status TO "hdfs://path/export/" WITH BROKER "broker_name"; ``` > **关键注意事项**: > 1. Doris 的 `SHOW TABLE STATUS` 结果无法直接通过 `SELECT` 查询或 `EXPORT` 导出,需借助客户端重定向或程序处理[^1][^2]。 > 2. 若需定期导出,建议使用方法 2(JDBC 程序)实现自动化。 > 3. 使用 `HELP SHOW` 可查看命令语法细节(如过滤特定)[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值