使用 wget 自動匯出 phpMyAdmin SQL 下載

使用 wget 自動匯出 phpMyAdmin SQL 下載

我正在使用以下腳本嘗試從 phpMyAdmin 安裝下載 SQL 匯出(改編自這個 Stackoverflow 問題

read -p "Username: " USERNAME
read -p "Password: " PASSWORD
ADMIN_URL='https://example.com/phpmyadmin'
COOKIEJAR='/tmp/phpmyadmin_cookie'

token=$(
    wget -qO- \
         --http-user="$USERNAME" \
         --http-password="$PASSWORD" \
         --save-cookies "$COOKIEJAR" \
         --keep-session-cookies \
         "$ADMIN_URL" \
        | egrep -o 'token=[[:xdigit:]]+' | head -1
     )

post_data="$token&what=sql&export_type=server"

wget -O export.sql \
     --save-headers \
     --http-user="$USERNAME" \
     --http-password="$PASSWORD" \
     --load-cookies "$COOKIEJAR" \
     --post-data "$post_data" \
     "$ADMIN_URL/export.php"

rm "$COOKIEJAR"

不幸的是,phpMyAdmin 4.7.9 回應伺服器 500 錯誤:

--2018-03-21 15:27:35--  https://woosh5.nl/phpmyadmin/export.php
Resolving woosh5.nl (woosh5.nl)... 37.97.205.130, 2a01:7c8:aac3:7::11
Connecting to woosh5.nl (woosh5.nl)|37.97.205.130|:443... connected.
HTTP request sent, awaiting response... 401 Unauthorized
Authentication selected: Basic realm="phpMyAdmin localhost"
Reusing existing connection to woosh5.nl:443.
HTTP request sent, awaiting response... 500 Internal Server Error
2018-03-21 15:27:35 ERROR 500: Internal Server Error.

我非常確定身份驗證成功,因此我發送的 POST 參數一定有問題。

如何自動從 phpMyAdmin 下載 SQL 轉儲?

答案1

可以想像,在某些情況下,您可能希望以這種方式存取資料庫,但我正在努力想出一種方法。

phpMyAdmin 是一個互動式工具。它不是為您想要的自動化而設計的。

如果您可以透過 ssh 存取您的網頁伺服器,只需mysqldump透過 ssh 運行,然後轉儲到 ssh 用戶端系統。

您可以在網頁伺服器上運行一些程式碼嗎?如果是這樣,請mysqldump在那裡運行,以及將其匯出到某個地方所需的任何程式碼(例如透過 SCP 或 FTP 上傳,或上傳到 S3 儲存桶)。或者,您可以自己編寫一個小腳本來檢查身份驗證,然後透過 HTTP 提供轉儲檔案。

如果您對伺服器有更廣泛的存取權限,請執行類似的命令backupninja,並使用 config 來處理轉儲和卸載到遠端儲存。

可以配置 Phpmyadmin 來使用HTTP認證,正如您對--http-userand 的使用--http-password所暗示的那樣,但在這種情況下您不需要 cookie 罐。更常見的是發現它配置為使用基於cookie的身份驗證,在這種情況下,您需要先提交登入表單以取得 cookie,然後在後續請求中使用該 cookie。

相關內容