首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 內置幫助文檔層級化輸出腳本:讓 help contents 結構清晰可讀

     編輯:MySQL 資料庫相關知識

痛點

離線環境下 HELP CONTENTS 輸出扁平化,大類/小類/主題層級關係不明,查找語法極其低效。

解決方案:Shell 遞歸解析 + Tree 風格輸出

核心邏輯

  1. mysql -e "HELP CONTENTS" 獲取一級分類列表
  2. 對每個分類執行 mysql -e "HELP '分類名'" 獲取下級內容
  3. 判斷輸出首行:
    • Name: 'xxx' → 具體主題(葉子節點)
    • 其他 → 子分類,遞歸處理
  4. 特殊處理:PLUGINS 首行異常、Numeric Functions 含 `/` 字符
  5. 輸出格式參考 tree 命令:| ├── 縮進層級

完整腳本 (2.sh)


#!/bin/bash
mkdir -p /tmp/test
mysql -uroot -p123456 -e "HELP CONTENTS" > /tmp/test/test.txt
sed -i '1d;$d' /tmp/test/test.txt
cd /tmp/test

format="|\t\b"
number=0

recursive() {
    local filename=$1
    number=$((number+1))
    while read line; do
        local name=$(echo "$line" | tr -d '[:blank:]')
        mysql -uroot -p123456 -e "HELP '$line'" > "$name"
        local firstline=$(head -1 "$name")
        if [[ "$firstline" == "Name: '$line'" ]] || [[ "$firstline" == "Name: 'SHOW PLUGINS'" ]]; then
            for i in $(seq $((number-1))); do echo -ne "$format"; done
            echo "├── $line"
        else
            for i in $(seq $((number-1))); do echo -ne "$format"; done
            echo "├── $line"
            if [[ "$line" == "Numeric Functions" ]]; then
                sed -i '1d;$d' "$name"
                while read fn; do
                    for i in $(seq $number); do echo -ne "$format"; done
                    echo "├── $fn"
                done < "$name"
            else
                sed -i '1d;$d' "$name"
                recursive "$name"
                number=$((number-1))
            fi
        fi
    done < "$filename"
}

recursive /tmp/test/test.txt
rm -rf /tmp/test

執行與輸出


sh 2.sh > 1.txt 2>&1  # 重定向 stderr 避免密碼警告污染輸出

輸出片段示例


├── Account Management
| ├── ALTER USER
| ├── CREATE USER
| ├── DROP USER
├── Administration
| ├── BINLOG
| ├── CACHE INDEX
| ├── FLUSH
...
├── Functions
| ├── Bit Functions
| | ├── &
| | ├── <<
| | ├── >>
| ├── Comparison operators
| | ├── !=
| | ├── <
| | ├── <=
...

腳本亮點總結

  • Shell 函數遞歸: 靈活處理不定深度層級
  • 動態層級計數器: 進遞歸 +1,出遞歸 -1,模擬目錄樹遍歷
  • Tree 風格輸出: 視覺化層級關係,極大提升可讀性
  • 異常分類專項處理: PLUGINS、Numeric Functions 等邊界情況
  • 實用技巧

    • 將輸出保存為 mysql_help_tree.txt,離線環境直接 grep 查找
    • 配合 less / vim 折疊功能,秒級定位語法
    • 可擴展為自動生成 Markdown/HTML 文檔站
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved