經常會遇到這種情況,在一個不能上網的環境通過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的內容有層次的輸出方法推薦就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持。