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 は Server 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 経由で Web サーバーにアクセスできる場合は、mysqldumpSSH 経由で実行し、SSH クライアント システムにダンプします。

Web サーバーでコードを実行できますか? 実行できる場合はmysqldump、そのコードをどこかにエクスポートするために必要なコードと一緒に実行します (たとえば、SCP または FTP 経由でアップロードするか、S3 バケットにアップロードします)。または、認証をチェックして、ダンプ ファイルを HTTP 経由で提供する小さなスクリプトを自分で作成することもできます。

サーバーへのより広範なアクセス権がある場合は、backupninjaダンプとリモート ストレージへのオフロードの両方を処理するように config を指定して、 のようなものを実行します。

Phpmyadminを設定することで、HTTP認証--http-userとの使用法から--http-passwordわかるように、クッキージャーは必要ありません。 を使用するように設定されているのが一般的です。クッキーベースの認証この場合、最初にログイン フォームを送信して Cookie を取得し、その後のリクエストでその Cookie を使用する必要があります。

関連情報