我正在使用以下脚本尝试从 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。