sh 拟与cron一起使用。此脚本将备份指定用户在给定数据库服务器上具有访问权限的所有(或特定)数据库,

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sh 拟与cron一起使用。此脚本将备份指定用户在给定数据库服务器上具有访问权限的所有(或特定)数据库,相关的知识,希望对你有一定的参考价值。

#!/bin/bash

USAGE="$0 [-u <user> -p <password> -h <host> -P <PORT> -d <database> -D <destination/directory/without/trailing/slash>]"
DESTINATION=`pwd`
USER=root
PASS=root
HOST=localhost
PORT=3306

# SPECIFY HOW LONG TO RETAIN BACKUPS
# Note, the format is OS dependent.
#
# On Linux, specify value like this:
#   6 hours
#   1 week
#   1 month
#   3 months
#
# On mac, specify value like this (Same examples as above):
#   6h
#   1w
#   1m
#   3m
KEEP_FOR="3 days"

while getopts ':u:p:P:h:d:D:' opt
do
  case $opt in
    u) USER=$OPTARG;;
    p) PASS=$OPTARG;;
    h) HOST=$OPTARG;;
    P) PORT=$OPTARG;;
    d) DB=$OPTARG;;
    D) DESTINATION=$OPTARG;;
   \?) echo "ERROR: Invalid option: $USAGE"
       exit 1;;
  esac
done

if [ -z "$DB" ]; then
  for i in `mysql -u $USER -p$PASS -h $HOST -P $PORT -e "show databases;" | grep -Ev "^(Database|mysql|performance_schema|information_schema)$"`; do
    if [ ! -d "$DESTINATION/${i}" ]; then
      mkdir $DESTINATION/${i}
    fi
    mysqldump -c -u $USER -p$PASS -h $HOST -P $PORT ${i} | gzip > $DESTINATION/${i}/$(date "+%Y%m%d%H%M").sql.gz
  done
else
  if [ ! -d "$DESTINATION/$DB" ]; then
    mkdir $DESTINATION/$DB
  fi
  mysqldump -c -u $USER -p$PASS -h $HOST -P $PORT $DB | gzip > $DESTINATION/${DB}/$(date "+%Y%m%d%H%M").sql.gz
fi


###
# Delete old backups
###
if [ "$(uname)" = Darwin ]
  then
    THRESHOLD=$(date -v-$KEEP_FOR "+%Y%m%d%H%M")
  else
    THRESHOLD=$(date -d "${KEEP_FOR} ago" "+%Y%m%d%H%M")
fi

find ${DESTINATION} -maxdepth 2 -type f -print0 | while IFS= read -d '' -r file
do
  ## Test filename pattern
  if [[ "$(basename "$file")" =~ ^[0-9]{12}.sql.gz$ ]]
  then
    ## Delete if older than threshold
    [ "$(basename "$file" .sql.gz)" -le "$THRESHOLD" ] && rm -v -- "$file"
  fi
done

以上是关于sh 拟与cron一起使用。此脚本将备份指定用户在给定数据库服务器上具有访问权限的所有(或特定)数据库,的主要内容,如果未能解决你的问题,请参考以下文章

自动备份远程机器的脚本

使用 Cron Job 进行每日数据库备份

如何使用shell脚本每天自动备份mysql数据库

mysql单表备份和恢复

MySQL数据库备份Shell脚本

基于 mysql 镜像的定时自动备份数据和清除过期备份