说明

该脚本实现了自动备份MySQL数据库中任意数据库,适合放在crond中运行,定时备份数据库,且在有需要的时候实现自动恢复备份。该脚本只针对库备份,无法实现对表备份

配置信息

DB_HOST=192.168.0.51                #数据库主机IP
DB_PORT=3306                       #数据库端口
DB_USER=root                       #以什么身份运行
DB_PASSWORD=password               #数据库密码
DB_EXPIRE=7                            #自动清理一周以前的备份文件
DB_BACKUP_DIR=/backup/mysql            #备份文件保存位置
BASE_DIR=$(cd $(dirname $0);pwd)   #脚本运行的路径
BACK_LOG=$BASE_DIR/backup.log      #备份与恢复日志保存位置

命令格式

# 备份bash mysql-backup.sh backup database-name1 database-name2 database-name3 .....
# 恢复bash mysql-restore.sh restore /the/path/backup1.sql.gz /the/path/backup2.sql.gz .....

日志内容

--------------------------------------------
[ OK ] 当前身份: ROOT
[ OK ] 时间: 2021-05-09 22:05:56,需要备份的数据库有: test1 test2
[ OK ] 时间: 2021-05-09 22:05:58,数据库: test1 备份成功,备份文件存放路径为: /backup/mysql/test1-2021-05-09.sql.gz
[ OK ] 时间: 2021-05-09 22:05:00,数据库: test2 备份成功,备份文件存放路径为: /backup/mysql/test2-2021-05-09.sql.gz
--------------------------------------------
[ OK ] 当前身份: ROOT
[ OK ] 时间: 2021-05-09 22:05:14,需要恢复的备份有: /backup/mysql/test1-2021-05-09.sql.gz /backup/mysql/test2-2021-05-09.sql.gz
[ OK ] 时间: 2021-05-09 22:05:18,/backup/mysql/test1-2021-05-09.sql.gz 备份文件恢复成功
[ OK ] 时间: 2021-05-09 22:05:21,/backup/mysql/test2-2021-05-09.sql.gz 备份文件恢复成功

脚本内容

#!/bin/bash
DB_HOST=192.168.0.51
DB_PORT=3306
DB_USER=root
DB_PASSWORD=password
DB_EXPIRE=7
DB_BACKUP_DIR=/backup/mysql
BASE_DIR=$(cd $(dirname $0);pwd)
BACK_LOG=$BASE_DIR/backup.logfunction error_text(){    echo "[ ERROR ] $@" >>$BACK_LOG
}function ok_text(){echo "[ OK ] $@" >>$BACK_LOG
}function check_dir(){if [ ! -d $DB_BACKUP_DIR ]; thenmkdir -p /backup/mysqlfi
}function check_user(){if [ $(id -u -n) != "root" ];thenerror_text "请使用root运行脚本"exit 1elseok_text "当前身份: ROOT"fi
}function check_mysql(){# 检查服务是否起来if [ $(ps -aux|grep mysql|grep -v mysql-backup|grep -v grep|wc -l) -eq 0 ]; thenerror_text "MySQL服务没有启动"exit 1fi# 连接数据库,检查是否能正常使用mysql -u$DB_USER -h$DB_HOST -P$DB_PORT -p$DB_PASSWORD -e "show processlist;" &>/dev/nullif [ $? -ne 0 ]; thenerror_text "MySQL服务异常"exit 1fi
}function backup(){# 检查是否带了备份数据库的参数if [ $# -eq 0 ]; thenecho -e "[ ERROR ] 必须在脚本后边带要备份的数据库,空格分开多个数据库" >> $BACK_LOGexit 1fi# 开始备份ok_text "时间: $(date '+%Y-%m-%d %H:%m:%S'),需要备份的数据库有: $@"for i in $@doif [ $(mysql -u$DB_USER -h$DB_HOST -P$DB_PORT -p$DB_PASSWORD -e "show databases"|grep -oE "^$i$"|wc -l) -ne 1 ]; thenerror_text "数据库: $i 备份失败,没有这个库" >>$BACK_LOGelsemysqldump -u$DB_USER -h$DB_HOST -P$DB_PORT -p$DB_PASSWORD -B $i --master-data=2 --single-transaction|gzip>${DB_BACKUP_DIR}/${i}-$(date "+%F").sql.gz  if [ $? -eq 0 ];thenok_text "时间: $(date '+%Y-%m-%d %H:%m:%S'),数据库: $i 备份成功,备份文件存放路径为: ${DB_BACKUP_DIR}/${i}-$(date "+%F").sql.gz"elseerror_text "数据库: $i 备份失败" >>$BACK_LOGfifidone
}function check_expire(){find  $DB_BACKUP_DIR -mtime +7 -exec rm -rf {} \;
}function restore(){# 检查是否带了恢复数据库的参数if [ $# -eq 0 ]; thenecho -e "[ ERROR ] 必须在脚本后边带要恢复的数据库,空格分开多个数据库" >> $BACK_LOGexit 1fi# 开始恢复ok_text "时间: $(date '+%Y-%m-%d %H:%m:%S'),需要恢复的备份有: $@"for i in $@doif [ ! -f $i ]; thenerror_text "$i 备份文件不存在,无法恢复"elseif [[ "$i" == *".gz" ]]; then/bin/bash -c gunzip < $i | mysql -u$DB_USER -h$DB_HOST -P$DB_PORT -p$DB_PASSWORDif [ $? -eq 0 ]; thenok_text "时间: $(date '+%Y-%m-%d %H:%m:%S'),$i 备份文件恢复成功"elseerror_text "$i 备份文件恢复失败"fielseerror_text "$i 文件格式不对,无法恢复"fifidone
}function useage(){echo -e "\033[32m***************************************\033[0m"echo -e "\033[32mMySQL数据库备份与恢复管理脚本使用帮助\033[0m"echo -e "\033[32mUsage: \033[0m"echo -e "\033[32m   backup 要备份的数据库名字(空格隔开)\033[0m"echo -e "\033[32m   restore 要恢复的数据库文件(空格隔开)\033[0m"echo -e "\033[32mMySQL 脚本配置信息                       \033[0m"echo -e "\033[32mMySQL IP: $DB_HOST                     \033[0m"echo -e "\033[32mMySQL PORT: $DB_PORT                   \033[0m"echo -e "\033[32mMySQL USER: $DB_USER                   \033[0m"echo -e "\033[32mMySQL PASSWORD: $DB_PASSWORD           \033[0m"echo -e "\033[32mMySQL LOG: $BACK_LOG                   \033[0m"echo -e "\033[32mMySQL EXPIRE: ${DB_EXPIRE}day          \033[0m"echo -e "\033[32mMySQL BACKUP DIR: $DB_BACKUP_DIR       \033[0m"echo -e "\033[32m***************************************\033[0m"
}action=$1
case $1 inbackup)echo "--------------------------------------------" >>$BACK_LOGshiftcheck_user check_mysqlcheck_dirbackup $@check_expire;;restore)echo "--------------------------------------------" >>$BACK_LOGshift check_usercheck_mysqlrestore $@;;*)useage;;
esac

MySQL自动备份脚本实战相关推荐

  1. Mysql自动备份脚本

    1.Mysql自动备份脚本 #!/bin/sh # 数据库基本信息 #数据库名称 DB_NAME="test" #用户名 DB_USER="root" #密码 ...

  2. python自动备份数据库_Python Mysql自动备份脚本

    测试系统环境  Windows 2003   python 2.5.1  mysql 5.0.1 应该只适用于Win,因为调用了CMD. 增量备份,因为自用,数据库不大. 回头有了需求加上自检测,5天 ...

  3. mysql 自动备份脚本+自动上传

    mysql自动备份脚本 OS:ubuntu 8.04.1 mysql 5.0 1.脚本mysqlbak.sh #!/bin/sh DATE=`date +%Y-%m-%d` olddate=`date ...

  4. MySQL自动备份脚本和ftp上传脚本

    MySQL自动备份脚本,并上传ftp 在日常的工作中Mysql数据库备份是长期需要去做的一件运维工作,但是人工手动去做这一机械的动作确实必要性不高,所以写个脚本来跑是比较好的. mysql备份脚本 # ...

  5. Windows环境MySQL自动备份脚本

    Windows环境MySQL自动备份脚本 备份需求 每个库单独一个文件 压缩备份文件 晚上23点定时备份 解决方案 创建一个MySQL备份脚本mysql_backup.bat,并在Windows任务计 ...

  6. python编写Mysql自动备份脚本

    1、先写一个python脚本 vim /opt/mysql_dump.py #!/usr/bin/env python # -*- coding:utf-8 -*- import os import ...

  7. mysql自动备份脚本linux_一个Mysql自动备份脚本,定时备份MYSQ脚本,linux下Mysql自动备份脚本...

    本文转自:http://hi.baidu.com/visual_art/item/6713e2091b41ea33a2332a15 #!/bin/bash #This is a ShellScript ...

  8. mysql自动备份linux_Mysql for linux mysql自动备份脚本

    可以将这个脚本放进crontab,他的配制文件在 /etc/crontab中每天凌晨执行一次,自动备份 这个脚本每天最多只执行一次,而且只保留最近五天的备份在服务器上. #!/bin/bash #Th ...

  9. mysql自动备份脚本,及系统定时备份设置!

    1.编写bat可执行脚本语句: @echo off echo mysql数据库正在备份,请稍等...... set "Ymd=%date:~,4%%date:~5,2%%date:~8,2% ...

最新文章

  1. React源码分析与实现(一):组件的初始化与渲染
  2. MySQL查询报错ERROR:No query specified
  3. 不借助Maven,使用Eclipse创建Hello World级别的Spring项目
  4. mule esb 集成_集成框架比较– Spring集成,Mule ESB或Apache Camel
  5. 用键盘怎么直接打出小于等于和大于等于
  6. 苹果对其语音助手Siri进行显著改进:今秋将有7大新功能
  7. 从华为做手机,到腾讯做游戏,他是怎样无缝切换、且年薪百万的?
  8. 日志服务(原SLS)新功能发布(5)--使用Logstash接入数据
  9. JDBC中的Statement和PreparedStatement的差别
  10. Matlab数据可视化编程总结
  11. mysql 游标创建_Mysql 游标创建
  12. Linux开发环境——tftp服务器的搭建
  13. 【电脑删不掉文件或文件夹】总结7种方法永久删除!
  14. S700K转辙机多机牵引道岔故障处理【转自微信公众号高速铁路信号技术交流】
  15. Censored! POJ - 1625 AC自动机+大数DP
  16. 深度学习在图像分类中的发展
  17. WiFi 信号强度和网速有关系吗?
  18. Wang Changyu
  19. 车牌检测(分别使用Haar级联 和轮廓裁剪)
  20. oracle 指定账套建表,FAQ-EAS账套备份恢复方法(oracle)

热门文章

  1. 什么是公有云管理平台?星外和ZKEYS云管理平台哪个好?
  2. 高仿途牛App下拉顶部滑出更多
  3. 8421快速转换法 2、10、16进制快速转换
  4. 网络信息安全等级保护制度
  5. 东软睿道培训费用python
  6. 华为 单板硬件开发 2016校招
  7. SRM是什么意思?盘点4个顶级SRM系统
  8. 加减乘除 求和,求积,求平均值样样都行
  9. 《严凤英》这部电视剧与母亲
  10. python的excell库_扣丁学堂Python基础教程之Excel处理库openpyxl详解