【问题标题】:MySQL backup and delete old backupsMySQL备份和删除旧备份
【发布时间】:2015-12-18 04:19:15
【问题描述】:

我正在使用以下简单脚本通过 tar 备份我的所有数据库,而不是删除 7 天前的旧备份目录(包括其中的文件),这样它就不会占用所有空间

#!/bin/bash
# Simple script to backup MySQL databases

# Parent backup directory
backup_parent_dir="/backup/mysql"

# MySQL settings
mysql_user="root"
mysql_password="mypass"
mysql_server="localhost"

# Read MySQL password from stdin if empty
if [ -z "${mysql_password}" ]; then
  echo -n "Enter MySQL ${mysql_user} password: "
  read -s mysql_password
  echo
fi

# Check MySQL password
echo exit | mysql --host=${mysql_server} --user=${mysql_user} --password=${mysql_password} -B 2>/dev/null
if [ "$?" -gt 0 ]; then
  echo "MySQL ${mysql_user} password incorrect"
  exit 1
else
  echo "MySQL ${mysql_user} password correct."
fi

# Create backup directory and set permissions
backup_date=`date +%Y_%m_%d_%H_%M`
backup_dir="${backup_parent_dir}/${backup_date}"
echo "Backup directory: ${backup_dir}"
mkdir -p "${backup_dir}"
chmod 755 "${backup_dir}"

# Get MySQL databases
mysql_databases=`echo 'show databases' | mysql --host=${mysql_server} --user=${mysql_user} --password=${mysql_password} -B | sed /^Database$/d`

# Backup and compress each database
for database in $mysql_databases
do
  if [ "${database}" == "information_schema" ] || [ "${database}" == "performance_schema" ]; then
        additional_mysqldump_params="--skip-lock-tables"
  else
        additional_mysqldump_params=""
  fi
  echo "Creating backup of \"${database}\" database"
  mysqldump ${additional_mysqldump_params} --host=${mysql_server} --user=${mysql_user} --password=${mysql_password} ${database} | gzip > "${backup_dir}/${database}.gz"
  chmod 600 "${backup_dir}/${database}.gz"
done

#Delete backups older than 7 days
find ${backup_parent_dir} -name '*' -type d -mtime +6 -exec rm -rfv "{}" \;

现在,备份工作正常,它将所有数据库备份到单独的目录中,但由于某种原因,它不会通过这部分删除旧的备份目录

#Delete backups older than 7 days
find ${backup_parent_dir} -name '*' -type d -mtime +6 -exec rm -rfv "{}" \;

但是,如果我运行一个仅包含以下代码的单独脚本,则它可以正常工作并删除所有 7 天前的目录

# Parent backup directory
backup_parent_dir="/backup/mysql"

#Delete backups older than 7 days
find ${backup_parent_dir} -name '*' -type d -mtime +6 -exec rm -rfv "{}" \;

所以,我不确定为什么删除行在添加到单个脚本时不起作用?

【问题讨论】:

    标签: mysql linux bash shell centos


    【解决方案1】:

    我建议像这样执行脚本,它将打印有关脚本每个步骤的更多信息

    bash -x nameofscript

    也是出于调试原因而不是

    find ${backup_parent_dir} -name '*' -type d -mtime +6 -exec rm -rfv "{}" \;

    使用

    find ${backup_parent_dir} -name '*' -type d -mtime +6

    只是看看哪些会被删除

    【讨论】:

    • 是的,正如我所说,如果我单独运行它,它就可以正常工作。我可能会感到困惑,因为不确定它是否首先创建目录然后删除?因为如果我确实找到 ${backup_parent_dir} -name '*' -type d -mtime +5 -exec rm -rfv "{}" \;比它删除过去 7 天前的备份,而不是 +6
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 2019-11-13
    • 1970-01-01
    相关资源
    最近更新 更多