You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Bash脚本远程操作Docker容器内MySQL并备份PrestaShop

解决远程SSH执行PrestaShop维护模式切换+Docker容器备份的脚本整合问题

你的原脚本存在几个核心问题:SSH登录后后续命令会在本地执行而非远程服务器、交互式的docker exec/mysql操作不适合脚本自动化、SQL语句无法直接在脚本中传递执行。以下是修正后的完整解决方案:

完整自动化脚本

#!/bin/bash

# 通过SSH在远程服务器批量执行维护+备份操作
ssh docker@debVM << 'EOF'
# 1. 非交互式切换PrestaShop到维护模式
docker exec ps1-7-mariadb-1 mysql -u bn_prestashop -pbitnamiUSER bitnami_prestashop -e "UPDATE ps_configuration SET value='0' WHERE name='PS_SHOP_ENABLE';"

# 2. 执行容器卷备份脚本
echo "启动备份任务..."
cd ~/scripts/
./backup-volumes-container.sh ps1-7-mariadb-1
./backup-volumes-container.sh ps1-7-prestashop-1
echo "备份任务完成"

# 3. 可选:备份完成后恢复商城正常模式
# docker exec ps1-7-mariadb-1 mysql -u bn_prestashop -pbitnamiUSER bitnami_prestashop -e "UPDATE ps_configuration SET value='1' WHERE name='PS_SHOP_ENABLE';"
EOF

关键修正说明

  • SSH远程命令批量执行:使用<< 'EOF'的Here Document语法,将所有需要在远程执行的命令打包发送,避免SSH登录后命令在本地执行的问题,单引号包裹EOF可防止本地变量替换,确保命令原封不动在远程运行。
  • 非交互式数据库操作:去掉docker exec的-it参数,通过mysql -e直接传递SQL语句,无需进入交互式MySQL会话。
  • 脚本权限保障:确保远程服务器上的backup-volumes-container.sh拥有可执行权限,执行chmod +x ~/scripts/backup-volumes-container.sh完成配置。

额外优化建议

  • 配置SSH免密登录:将本地机器的SSH公钥添加到远程docker@debVM用户的~/.ssh/authorized_keys文件中,避免脚本执行时手动输入密码。
  • 提前验证SQL语句:在远程服务器手动执行一次维护模式切换命令,确认ps_configuration表的更新生效。
  • 增加日志记录:可在脚本中添加日志输出到文件的逻辑,方便后续排查问题。

内容的提问来源于stack exchange,提问作者Chezzers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 21:37:34