使用Shell脚本自动备份项目中的MySQL数据库

我的博客

自动备份项目中的MySQL数据库

指定备份路径,自动搜索所有数据库,可以添加到Linux定时任务中

#!/bin/bash
# 备份MySQL数据库的脚本
# 2019年3月13日

backup_folder="mysqlbackup"$(date +%Y-%m-%d)
backup_path="/root/django-web/StarMeow/project_bak/${backup_folder}"  # 文件保存路径

# 判断文件夹是否存在,如果不存在则创建
if test -d $backup_path
then
    echo "文件夹 $backup_folder 存在"
else
    echo "文件夹 $backup_folder 不存在,创建中"
    mkdir $backup_path
fi

mysql_user="root"
mysql_pswd="test"

function check_exist(){
    if [ ! -e $1 ]  # 如果sql文件不存在,进行备份
    then
        echo "$(date +"%Y-%m-%d %H:%M:%S") 正在备份 $1 数据库" >> $backup_path/backup_log.log
    else
        echo "$(date +"%Y-%m-%d %H:%M:%S") 删除 $1 数据库备份后重新备份" >> $backup_path/backup_log.log
        rm $1
    fi
}

function backup_mysql(){
    echo "备份 $1 数据库中..."
    # 备份数据库
    database_dump="${backup_path}/database_$1.sql"


    # 命令执行备份
    if test -z $2  # 第二个参数为空也就是不用压缩
    then
        check_exist $database_dump
        mysqldump -u$mysql_user -p$mysql_pswd $1 > $database_dump
    elif test $2 = "gzip"
    then
        check_exist $database_dump.gz
        # 压缩数据库备份
        mysqldump -u$mysql_user -p$mysql_pswd $1 | gzip  > $database_dump.gz
    else
        echo "命令、参数错误"
    fi

    if [ $? == 0 ]
    then
        echo -e "$(date +"%Y-%m-%d %H:%M:%S") 数据库 $1 备份成功$2\n" >> $backup_path/backup_log.log
    else
        echo -e "$(date +"%Y-%m-%d %H:%M:%S") 数据库 $1 备份出错$2\n" >> $backup_path/backup_log.log
    fi

}

# 判断,mysql是否安装
 mysql_version=$(mysql -V)

if [ $? == 127 ]; then
    echo mysql命令没找到,可能没安装
else
    echo "当前mysql版本:$mysql_version" >> $backup_path/backup_log.log
    echo "$(date +"%Y-%m-%d %H:%M:%S") 自动备份mysql数据库到 $backup_path 目录" >> $backup_path/backup_log.log
    # 备份指定名字数据库
    # backup_mysql "djangostarmeow"
    # backup_mysql "flaskmovie"

    # 压缩备份指定名字数据库
    # backup_mysql "djangostarmeow" "gzip"

    # 压缩备份所有数据库
    backup_mysql "--all-databases" "gzip"

    # 获取mysql所有数据库
    all_databases=$(mysql -u$mysql_user -p$mysql_pswd -e "show databases;")
    # 得到的结果为:Database djangostarmeow flaskmovie information_schema mysql performance_schema

    # 按照空格分隔字符串,放在数组内
    arr=(${all_databases})
    for name in ${arr[*]}
    do
        # 虚幻备份
        if test $name != "Database"
        then
            backup_mysql $name
        fi
    done

fi

你可能感兴趣的:(使用Shell脚本自动备份项目中的MySQL数据库)