经常会遇到这种情况,在一个不能上网的环境通过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="|tb" #删除第一行和最后一行 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的内容有层次的输出方法推荐就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持全福编程网。