将MySQL help contents的内容有层次的输出方法推荐
经常会遇到这种情况,在一个不能上网的环境通过mysql客户端登录数据库,想执行一个操作,却忘了操作的具体语法,各种不方便。
其实,mysql数据库内置了帮助文档,通过help contents即可查看。
如下所示:
可见,该文档涵盖了数据库操作的大部分主题。
文档分为以上几大类,每个大类又包括更小粒度的类,类最后有具体的topic组成。
那么这之间的层级关系如何呢?
昨天想执行一个操作
mysql> backup table emp to '/tmp/mysqlbackup';
因为这个backup操作以前没有使用过,准备用mysql自带的帮助文档来查看具体的用法。本来这个命令所属的类别就有点模糊,譬如administration和utility都有可能。最后找了一通,还是没有找到。
想了想,这样查看帮助文档确实没有太大的效率,如果知道这之间的层级关系就好办了。
于是,动手写了个脚本,可直观的显示帮助文档中大类与小类,小类与topic之间的关系。
具体如下:
#!/bin/bash #所有操作都是在/tmp/test中操作,因为中间新建了很多临时文件,方便后续的删除。 mkdir /tmp/test #获取上图的内容重定向到/tmp/test/test.txt文件中 mysql -uroot -p123456 -e "help contents " > /tmp/test/test.txt #定义输出的格式,\t输出tab,\b相当于backspace一个空格,参考了tree命令的输出方式。 format="|\t\b" #删除第一行和最后一行 sed -i '1d;$d' /tmp/test/test.txt cd /tmp/test #引入number的作用在于后续格式的输出 number=0 #后续用了递归调用,这里定义的是函数 function recursive(){ filename=$1 number=$[$number+1] while read line do #name要做为文件名,譬如account management,利用tr函数是去掉字符中间的空格 name=`echo $line|tr -d [:blank:]` #输出每个分类中的内容,可能是topic,可能是categories mysql -uroot -p123456 -e "help $line" > $name #取输出文件的第一行的内容,如果是具体的topic,则第一行的内容为:name: 'alter user',不然就还是categories,需要递归调用 firstline=`head -1 $name` #整个逻辑比较复杂的有两类,一个是numeric functions,另一个是plugins。先说plugins,一般对于一个具体的topic,它的输出类似于name: 'alter user',而plugins #对应的输出却是name: 'show plugins',所以下面的判断语句多了一个"$firstline" = "name: 'show plugins'",针对的即是plugins。另一比较复杂的是numeric functions #它下面的topic有除号“/”,而这基本上是不能作为文件名的。所以在下面的判断逻辑中,如果遇到numeric functions,就直接打印出该类中的topic,而不进行name: 'alter user'这样的判断 if [ "$firstline" = "name: '$line'" -o "$firstline" = "name: 'show plugins'" ];then for i in `seq $[$number-1]` do echo -ne $format done echo "├── $line" else #如果不是topic,则代表是categories,可递归进行判断,唯一的例外就是numeric functions #下面的echo "├── $line"打印出的是categories的名字 for i in `seq $[$number-1]` do echo -ne $format done echo "├── $line" #遇到numeric functions,就直接打印出该类中的topic if [ "$line" = "numeric functions" ];then sed -i '1d;$d' $name while read functions do for i in `seq $number` do echo -ne $format done echo "├── $functions" done < $name else #其它的categories,递归调用该函数进行判断。 sed -i '1d;$d' $name recursive $name number=$[$number-1] fi fi done < $filename } #主函数 recursive /tmp/test/test.txt #处理完毕,删除文件夹 rm -rf /tmp/test
因mysql客户端登录数据库的时候,直接指定了密码,如果直接执行的话,会输出很多“warning: using a password on the command line interface can be insecure.”,
可重定向到一个文件
# sh 2.sh > 1.txt
最后文件中的结果如下:
├── account management | ├── alter user | ├── create user | ├── drop user | ├── grant | ├── rename user | ├── revoke | ├── set password ├── administration | ├── binlog | ├── cache index | ├── flush | ├── flush query cache | ├── help command | ├── kill | ├── load index | ├── reset | ├── set | ├── show | ├── show authors | ├── show binary logs | ├── show binlog events | ├── show character set | ├── show collation | ├── show columns | ├── show contributors | ├── show create database | ├── show create event | ├── show create function | ├── show create procedure | ├── show create table | ├── show create trigger | ├── show create view | ├── show databases | ├── show engine | ├── show engines | ├── show errors | ├── show events | ├── show function code | ├── show function status | ├── show grants | ├── show index | ├── show master status | ├── show open tables | ├── show plugins | ├── show privileges | ├── show procedure code | ├── show procedure status | ├── show processlist | ├── show profile | ├── show profiles | ├── show relaylog events | ├── show slave hosts | ├── show slave status | ├── show status | ├── show table status | ├── show tables | ├── show triggers | ├── show variables | ├── show warnings ├── compound statements | ├── begin end | ├── case statement | ├── close | ├── declare condition | ├── declare cursor | ├── declare handler | ├── declare variable | ├── fetch | ├── get diagnostics | ├── if statement | ├── iterate | ├── labels | ├── leave | ├── loop | ├── open | ├── repeat loop | ├── resignal | ├── return | ├── signal | ├── while ├── data definition | ├── alter database | ├── alter event | ├── alter function | ├── alter logfile group | ├── alter procedure | ├── alter server | ├── alter table | ├── alter tablespace | ├── alter view | ├── constraint | ├── create database | ├── create event | ├── create function | ├── create index | ├── create logfile group | ├── create procedure | ├── create server | ├── create table | ├── create tablespace | ├── create trigger | ├── create view | ├── drop database | ├── drop event | ├── drop function | ├── drop index | ├── drop procedure | ├── drop server | ├── drop table | ├── drop tablespace | ├── drop trigger | ├── drop view | ├── rename table | ├── truncate table ├── data manipulation | ├── call | ├── delete | ├── do | ├── dual | ├── handler | ├── insert | ├── insert delayed | ├── insert select | ├── join | ├── load data | ├── load xml | ├── replace | ├── select | ├── union | ├── update ├── data types | ├── auto_increment | ├── bigint | ├── binary | ├── bit | ├── blob | ├── blob data type | ├── boolean | ├── char | ├── char byte | ├── date | ├── datetime | ├── dec | ├── decimal | ├── double | ├── double precision | ├── enum | ├── float | ├── int | ├── integer | ├── longblob | ├── longtext | ├── mediumblob | ├── mediumint | ├── mediumtext | ├── set data type | ├── smallint | ├── text | ├── time | ├── timestamp | ├── tinyblob | ├── tinyint | ├── tinytext | ├── varbinary | ├── varchar | ├── year data type ├── functions | ├── bit functions | | ├── & | | ├── << | | ├── >> | | ├── bit_count | | ├── ^ | | ├── | | | ├── ~ | ├── comparison operators | | ├── != | | ├── < | | ├── <= | | ├── <=> | | ├── = | | ├── > | | ├── >= | | ├── between and | | ├── coalesce | | ├── greatest | | ├── in | | ├── interval | | ├── is | | ├── is not | | ├── is not null | | ├── is null | | ├── isnull | | ├── least | | ├── not between | | ├── not in | ├── control flow functions | | ├── case operator | | ├── if function | | ├── ifnull | | ├── nullif | ├── date and time functions | | ├── adddate | | ├── addtime | | ├── convert_tz | | ├── curdate | | ├── current_date | | ├── current_time | | ├── current_timestamp | | ├── curtime | | ├── date function | | ├── datediff | | ├── date_add | | ├── date_format | | ├── date_sub | | ├── day | | ├── dayname | | ├── dayofmonth | | ├── dayofweek | | ├── dayofyear | | ├── extract | | ├── from_days | | ├── from_unixtime | | ├── get_format | | ├── hour | | ├── last_day | | ├── localtime | | ├── localtimestamp | | ├── makedate | | ├── maketime | | ├── microsecond | | ├── minute | | ├── month | | ├── monthname | | ├── now | | ├── period_add | | ├── period_diff | | ├── quarter | | ├── second | | ├── sec_to_time | | ├── str_to_date | | ├── subdate | | ├── subtime | | ├── sysdate | | ├── time function | | ├── timediff | | ├── timestamp function | | ├── timestampadd | | ├── timestampdiff | | ├── time_format | | ├── time_to_sec | | ├── to_days | | ├── to_seconds | | ├── unix_timestamp | | ├── utc_date | | ├── utc_time | | ├── utc_timestamp | | ├── week | | ├── weekday | | ├── weekofyear | | ├── year | | ├── yearweek | ├── encryption functions | | ├── aes_decrypt | | ├── aes_encrypt | | ├── compress | | ├── decode | | ├── des_decrypt | | ├── des_encrypt | | ├── encode | | ├── encrypt | | ├── md5 | | ├── old_password | | ├── password | | ├── random_bytes | | ├── sha1 | | ├── sha2 | | ├── uncompress | | ├── uncompressed_length | | ├── validate_password_strength | ├── information functions | | ├── benchmark | | ├── charset | | ├── coercibility | | ├── collation | | ├── connection_id | | ├── current_user | | ├── database | | ├── found_rows | | ├── last_insert_id | | ├── row_count | | ├── schema | | ├── session_user | | ├── system_user | | ├── user | | ├── version | ├── logical operators | | ├── ! | | ├── and | | ├── assign-equal | | ├── assign-value | | ├── or | | ├── xor | ├── miscellaneous functions | | ├── default | | ├── get_lock | | ├── inet6_aton | | ├── inet6_ntoa | | ├── inet_aton | | ├── inet_ntoa | | ├── is_free_lock | | ├── is_ipv4 | | ├── is_ipv4_compat | | ├── is_ipv4_mapped | | ├── is_ipv6 | | ├── is_used_lock | | ├── master_pos_wait | | ├── name_const | | ├── release_lock | | ├── sleep | | ├── uuid | | ├── uuid_short | | ├── values | ├── numeric functions | | ├── % | | ├── * | | ├── + | | ├── - binary | | ├── - unary | | ├── / | | ├── abs | | ├── acos | | ├── asin | | ├── atan | | ├── atan2 | | ├── ceil | | ├── ceiling | | ├── conv | | ├── cos | | ├── cot | | ├── crc32 | | ├── degrees | | ├── div | | ├── exp | | ├── floor | | ├── ln | | ├── log | | ├── log10 | | ├── log2 | | ├── mod | | ├── pi | | ├── pow | | ├── power | | ├── radians | | ├── rand | | ├── round | | ├── sign | | ├── sin | | ├── sqrt | | ├── tan | | ├── truncate | ├── string functions | | ├── ascii | | ├── bin | | ├── binary operator | | ├── bit_length | | ├── cast | | ├── char function | | ├── character_length | | ├── char_length | | ├── concat | | ├── concat_ws | | ├── convert | | ├── elt | | ├── export_set | | ├── extractvalue | | ├── field | | ├── find_in_set | | ├── format | | ├── from_base64() | | ├── hex | | ├── insert function | | ├── instr | | ├── lcase | | ├── left | | ├── length | | ├── like | | ├── load_file | | ├── locate | | ├── lower | | ├── lpad | | ├── ltrim | | ├── make_set | | ├── match against | | ├── mid | | ├── not like | | ├── not regexp | | ├── oct | | ├── octet_length | | ├── ord | | ├── position | | ├── quote | | ├── regexp | | ├── repeat function | | ├── replace function | | ├── reverse | | ├── right | | ├── rpad | | ├── rtrim | | ├── soundex | | ├── sounds like | | ├── space | | ├── strcmp | | ├── substr | | ├── substring | | ├── substring_index | | ├── to_base64() | | ├── trim | | ├── ucase | | ├── unhex | | ├── updatexml | | ├── upper | | ├── weight_string ├── functions and modifiers for use with group by | ├── avg | ├── bit_and | ├── bit_or | ├── bit_xor | ├── count | ├── count distinct | ├── group_concat | ├── max | ├── min | ├── std | ├── stddev | ├── stddev_pop | ├── stddev_samp | ├── sum | ├── variance | ├── var_pop | ├── var_samp ├── geographic features | ├── geometry | ├── geometry hierarchy | ├── spatial | ├── geometry constructors | | ├── geometrycollection | | ├── linestring | | ├── multilinestring | | ├── multipoint | | ├── multipolygon | | ├── point | | ├── polygon | ├── geometry properties | | ├── dimension | | ├── envelope | | ├── geometrytype | | ├── isempty | | ├── issimple | | ├── srid | | ├── st_dimension | | ├── st_envelope | | ├── st_geometrytype | | ├── st_isempty | | ├── st_issimple | | ├── st_srid | ├── geometry relations | | ├── contains | | ├── crosses | | ├── disjoint | | ├── equals | | ├── intersects | | ├── overlaps | | ├── st_contains | | ├── st_crosses | | ├── st_disjoint | | ├── st_distance | | ├── st_equals | | ├── st_intersects | | ├── st_overlaps | | ├── st_touches | | ├── st_within | | ├── touches | | ├── within | ├── linestring properties | | ├── endpoint | | ├── glength | | ├── isclosed | | ├── numpoints | | ├── pointn | | ├── startpoint | | ├── st_endpoint | | ├── st_isclosed | | ├── st_numpoints | | ├── st_pointn | | ├── st_startpoint | ├── mbr | | ├── asymmetric_decrypt | | ├── asymmetric_derive | | ├── asymmetric_encrypt | | ├── asymmetric_sign | | ├── asymmetric_verify | | ├── create_asymmetric_priv_key | | ├── create_asymmetric_pub_key | | ├── create_dh_parameters | | ├── create_digest | | ├── gtid_subset | | ├── gtid_subtract | | ├── mbr definition | | ├── mbrcontains | | ├── mbrdisjoint | | ├── mbrequal | | ├── mbrintersects | | ├── mbroverlaps | | ├── mbrtouches | | ├── mbrwithin | | ├── sql_thread_wait_after_gtids | | ├── wait_until_sql_thread_after_gtids | ├── point properties | | ├── st_x | | ├── st_y | | ├── x | | ├── y | ├── polygon properties | | ├── area | | ├── centroid | | ├── exteriorring | | ├── interiorringn | | ├── numinteriorrings | | ├── st_area | | ├── st_centroid | | ├── st_exteriorring | | ├── st_interiorringn | | ├── st_numinteriorrings | ├── wkb | | ├── asbinary | | ├── astext | | ├── geomcollfromwkb | | ├── geomfromwkb | | ├── linefromwkb | | ├── mlinefromwkb | | ├── mpointfromwkb | | ├── mpolyfromwkb | | ├── pointfromwkb | | ├── polyfromwkb | | ├── st_asbinary | | ├── st_astext | | ├── st_geomcollfromwkb | | ├── st_geomfromwkb | | ├── st_linefromwkb | | ├── st_pointfromwkb | | ├── st_polyfromwkb | ├── wkt | | ├── geomcollfromtext | | ├── geomfromtext | | ├── linefromtext | | ├── mlinefromtext | | ├── mpointfromtext | | ├── mpolyfromtext | | ├── pointfromtext | | ├── polyfromtext | | ├── st_geomcollfromtext | | ├── st_geomfromtext | | ├── st_linefromtext | | ├── st_pointfromtext | | ├── st_polyfromtext | | ├── wkt definition ├── help metadata | ├── help_date | ├── help_version ├── language structure ├── plugins ├── procedures ├── storage engines ├── table maintenance | ├── analyze table | ├── check table | ├── checksum table | ├── optimize table | ├── repair table ├── transactions | ├── change master to | ├── deallocate prepare | ├── execute statement | ├── isolation | ├── lock | ├── prepare | ├── purge binary logs | ├── reset master | ├── reset slave | ├── savepoint | ├── set global sql_slave_skip_counter | ├── set sql_log_bin | ├── start slave | ├── start transaction | ├── stop slave | ├── xa ├── user-defined functions | ├── create function udf | ├── drop function udf ├── utility | ├── explain | ├── help statement | ├── use
总结:
整个脚本在写的过程有两点比较有意思。
1. 函数递归操作,以前没怎么使用shell进行函数的递归操作。
2. 借鉴tree的输出格式,对结果进行格式化输出。
思路如下:首先定义一个number为0,每次进入一次recursive函数,都会把当前的number加1,如果只是这样的话,那number值将一直增长了,所以在上述脚本else调用recursive函数部分,会在其后执行number=$[$number-1],类似于恢复到上一层目录下。
以上这篇将mysql help contents的内容有层次的输出方法推荐就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。