feat: 优化数据库还原功能

- 支持通过编号选择备份文件
This commit is contained in:
kuaifan 2025-10-23 22:55:29 +00:00
parent 0b99b4a9a0
commit 315851eb5f

30
cmd
View File

@ -262,25 +262,33 @@ mysql_snapshot() {
password=$(env_get DB_PASSWORD) password=$(env_get DB_PASSWORD)
# 还原数据库 # 还原数据库
mkdir -p ${WORK_DIR}/docker/mysql/backup mkdir -p ${WORK_DIR}/docker/mysql/backup
list=`ls -1 "${WORK_DIR}/docker/mysql/backup" | grep ".sql.gz"` shopt -s nullglob
if [ -z "$list" ]; then backup_files=("${WORK_DIR}/docker/mysql/backup/"*.sql.gz)
shopt -u nullglob
if [ ${#backup_files[@]} -eq 0 ]; then
error "没有备份文件!" error "没有备份文件!"
exit 1 exit 1
fi fi
echo "$list" echo "可用备份列表:"
read -rp "请输入备份文件名称还原:" inputname for idx in "${!backup_files[@]}"; do
filename="${WORK_DIR}/docker/mysql/backup/${inputname}" printf "%2d) %s\n" "$((idx + 1))" "$(basename "${backup_files[$idx]}")"
if [ ! -f "$filename" ]; then done
error "备份文件:${inputname} 不存在!" while true; do
exit 1 read -rp "请输入备份文件编号还原:" selection
fi if [[ "$selection" =~ ^[0-9]+$ ]] && [ "$selection" -ge 1 ] && [ "$selection" -le ${#backup_files[@]} ]; then
break
fi
warning "编号无效,请重新输入。"
done
filename="${backup_files[$((selection - 1))]}"
inputname="$(basename "$filename")"
container_name=`docker_name mariadb` container_name=`docker_name mariadb`
if [ -z "$container_name" ]; then if [ -z "$container_name" ]; then
error "没有找到 mariadb 容器!" error "没有找到 mariadb 容器!"
exit 1 exit 1
fi fi
docker cp $filename ${container_name}:/ docker cp "$filename" "${container_name}:/"
container_exec mariadb "gunzip < /${inputname} | mysql -u${username} -p${password} $database" container_exec mariadb "gunzip < '/${inputname}' | mysql -u${username} -p${password} $database"
container_exec php "php artisan migrate" container_exec php "php artisan migrate"
judge "还原数据库" judge "还原数据库"
fi fi