共計 1506 個字符,預計需要花費 4 分鐘才能閱讀完成。
經歷過幾個禮拜和我自己的代碼跟 AI 打交道,「它」終於來了。
下面是主要介紹一些這次新增或修復的功能
Docker 原生支援
之前的版本有想過,原本我只想要做本地版的,因為那時候對 Docker 基本上沒有什麼深入瞭解,加上之前關於防火牆或安全性的問題,讓資料庫在 Docker 環境下運行時(例如像 root 帳戶),如果你沒有做任何設定,它預設會是 0.0.0.0 的狀態,也就是所有人都可以訪問,而不是僅限 localhost 容器內部訪問。
以前因為覺得處理 root 帳戶的問題很麻煩,所以才想說只做本地版。但如今花了幾個禮拜,終於搞清楚了這些邏輯,已經可以在容器裡面直接訪問 root 帳戶,且可以設定為無密碼訪問。
但前提是你需要有 Docker 的權限,因為 Docker 基本上大部分的功能都需要 root 權限的帳戶才能操作。
容器自動偵測與宿主機進程識別
我新增的 detect_docker_db、is_host_process 函式啊也是花了很大的功夫,原本 detect_docker_db 是使用 docker ps 找,但是啊非常花時間,尤其是這是開頭後面還有很多需要運算,必須壓低時間,然後我就問 AI 它給我答案就是用 curl 直接和 Docker Unix Socket API 通訊,我試了真的速度很快。
而is_host_process 如果沒有他就無法區隔宿主是否有 server(透過讀取 /proc/[pid]/cgroup 的內容,判斷該行程是否運行於宿主機上——凡是 cgroup 路徑中含有 docker、containerd、kubepods、libpod、lxc 等字樣的,一律視為容器內行程並排除。)
有些宿主機基本上都有可能會有 MySQL client 客戶端,因為用戶端不具有伺服器的功能,所以我如果不用這種方法(我以前使用的是命令格式),由於用戶端也是用命令,就會導致腳本誤認你是一個服務端。但其實你還是個用戶端,不具有伺服器端的功能,如果你一不小心點進去就會報錯,於是我才改了這個邏輯。
Docker 版一鍵安裝
新增 docker_install_database 函式,支援:
- MariaDB LTS:初始化 SQL,並設定
unix_socket認證,讓 root 在本機無需密碼即可連線,對外完全封閉 - PostgreSQL:設定
trust本地認證,啟動後自動等待pg_isready就緒
安裝完成後,兩者皆會自動切換進入對應的管理介面,無需手動重新執行。
選單與操作流程升級
安裝選單擴充為四選項
| 選項 | 說明 |
|---|---|
| 1 | 安裝 MySQL(MariaDB)本地版 |
| 2 | 安裝 MySQL(MariaDB)Docker 版 |
| 3 | 安裝 PostgreSQL 本地版 |
| 4 | 安裝 PostgreSQL Docker 版 |
選單內附本地版與 Docker 版的差異說明,協助使用者依照自身環境做出適合的選擇。
多環境動態管理選單
choice_db_menu 完全重寫。當環境中同時存在多個資料庫(本機 + Docker 混合)時,舊版只能顯示固定的兩個選項,現在則會動態列出所有偵測到的實例,包含各 Docker 容器名稱,讓使用者精確選擇要管理的目標。
智慧切換
主選單第 11 項「切換至另一資料庫」現在更聰明:呼叫新的 install_db_and_switch,若目標資料庫已存在則直接進入管理,不存在才詢問要安裝本地版還是 Docker 版。選項說明文字也同步補充「若已安裝就會直接進入管理」,減少使用者的猜測成本。
操作畫面
MariaDB

PostgreSQL

腳本安裝
直接複製貼上即可
bash <(curl -sL https://gitlab.com/gebu8f/sh/-/raw/main/db/dba.sh)
而如果是已經在使用腳本的人直接dba 然後按 u 即可升級
探索更多來自 GEBU8F — 阿蒲的網站 的內容
訂閱即可透過電子郵件收到最新文章。
禁止人身攻擊,請理性發言。