【mysql】dump

dump文件用于恢复数据

mysql进行dump

定时任务

脚本文件

文件 mysqldump.sh.

#!/bin/bash

#################################################################
# 1. 与该脚本同级目录下,需存在.sql.cnf文件(用于数据库备份)、.back.cnf文件(用于读取配置)
# 2. 需配置ssh-keygen支持免密登录
#################################################################
# 保存备份个数,备份31天数据
NUMBER=15
# 备份保存路径,当前路径
BACKUP_DIR=$(dirname $(readlink -f "$0"))
# 日期,用于备份文件名后缀
NOW=$(date +"%Y-%m-%d-%H-%M-%S")
##############################################
# 以下配置从.back.cnf文件中读取
# 将要备份的数据库
DATABASE_NAME=
# SCP配置
SCP_FLAG=no
SCP_HOST=
SCP_PORT=
SCP_USER=
##############################################

# 从.back.cnf读取配置
loadConfig() {
  while read line; do
    eval "$line"
  done < .back.cnf
}

# 根据.sql.cnf配置备份数据库
backup() {
  # 当前备份的文件名
  backup_file=$BACKUP_DIR/$DATABASE_NAME-$NOW.sql
  echo "create $backup_file begin..."
  # mysqldump
  mysqldump --defaults-extra-file=.sql.cnf "$DATABASE_NAME" > "$backup_file"
  #写创建备份日志
  echo "create $backup_file" >> "$BACKUP_DIR"/log.txt

  # SCP至远端
  if [ "$SCP_FLAG" == 'yes' ]; then
    scp -pq -P "$SCP_PORT" "$backup_file" "$SCP_USER"@"$SCP_HOST":"$backup_file"
  fi
}

# 删除最早生成的备份,只保留NUMBER数量的备份
delete() {
  # 判断现在的备份数量是否大于$NUMBER
  count=`ls -l -crt  "$BACKUP_DIR"/*.sql | awk '{print $9 }' | wc -l`

  while [ "$count" -gt $NUMBER ]
  do
    # 找出需要删除的备份
    delete_files=`ls -l -crt  "$BACKUP_DIR"/*.sql | awk '{print $9 }' | head -1`
    # 判断现在的备份数量是否大于$NUMBER
    count=`ls -l -crt  "$BACKUP_DIR"/*.sql | awk '{print $9 }' | wc -l`
    # 删除最早生成的备份,只保留NUMBER数量的备份
    rm "$delete_files"
    # 写删除文件日志
    echo "delete $delete_files" >> "$BACKUP_DIR"/log.txt
  done
}

# 校验配置文件是否存在
sql_config=".sql.cnf"
if [ ! -f "$sql_config" ]; then
  # .sql.cnf文件不存在
  echo "BACKUP FAILED: Missing $sql_config"
  exit
fi
backup_config=".back.cnf"
if [ ! -f "$backup_config" ]; then
  # .back.cnf文件不存在
  echo "BACKUP FAILED: Missing $backup_config"
  exit
fi
loadConfig
backup
delete
exit

.sql.cnf

[mysqldump]
host=
port=
user=
password=

.back.cnf

DATABASE_NAME=
SCP_FLAG=no
SCP_HOST=
SCP_PORT=22
SCP_USER=root