使用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 客户端系统。

您是否能够在 Web 服务器上运行一些代码?如果可以,请mysqldump在那里运行,以及您需要将其导出到某个地方的任何代码(例如通过 SCP 或 FTP 上传,或上传到 S3 存储桶)。或者,您可以自己编写一个小脚本来检查身份验证,然后通过 HTTP 提供转储文件。

如果您有更广泛的服务器访问权限,请运行类似的程序backupninja,并使用配置来处理转储和卸载到远程存储。

可以配置 Phpmyadmin 来使用HTTP 身份验证,正如你使用--http-user--http-password所暗示的那样,但在这种情况下你不需要 cookie 罐。更常见的是它配置为使用基于 cookie 的身份验证,这种情况下您需要先提交登录表单来获取 cookie,然后在后续请求中使用该 cookie。

相关内容