mysql数据库自动化脚本备份_mysql 自动化脚本备份

#!/bin/sh

#==============================================================================

## 备份工具:

##    percona-xtrabackup-2.2.6

##

## 备份策略:

##    (1)、每天凌晨04:20点进行全量备份一次;

##    (2)、每隔1小时增量备份一次;

##

#==============================================================================

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin

## DB备份基路径

BACKUP_BASE_DIR="/data/mysql_backup"

## 增量备份时,用到的基准目录列表文件

## 内容格式:基准目录|本次备份目录|备份类型【full|inc】

INC_BASE_LIST="${BACKUP_BASE_DIR}/incremental_basedir_list.txt"

## 备份工具路径

XTRABACKUP_PATH="/usr/local/xtrabackup/bin/innobackupex"

## MySQL配置路径

MYSQL_CNF_PATH="/etc/my.cnf"

## 线程数

THREAD_CNT=6

#==============================================================================

function print_help_info()

{

echo "--------------------------------------------------------------"

echo "Usage: $0 full | inc | help"

echo "--------------------------------------------------------------"

echo ""

exit 1

}

[[ $# -lt 1 ]] && print_help_info

[[ -d ${BACKUP_BASE_DIR} ]] || mkdir -p ${BACKUP_BASE_DIR}

## xtrabackup基础套件不存在时,进行自动下载安装

if [[ ! -e ${XTRABACKUP_PATH} ]]; then

cd /usr/local

wget -q -O xtrabackup-2.2.6.tgz http://www.percona.com/redir/downloads/XtraBackup/LATEST/binary/tarball/percona-xtrabackup-2.2.6-5042-Linux-x86_64.tar.gz

tar xvzf xtrabackup-2.2.6.tgz >/dev/null 2>&1 && rm -f xtrabackup-2.2.6.tgz

mv percona-xtrabackup-2.2.6-Linux-x86_64 xtrabackup-2.2.6

rm -rf xtrabackup && ln -s xtrabackup-2.2.6 xtrabackup

for FNAME in `ls -1t /usr/local/xtrabackup/bin`

do

rm -f /usr/bin/${FNAME} && ln -s /usr/local/xtrabackup/bin/${FNAME} /usr/bin/${FNAME}

done

fi

## 只允许一个副本运行,以避免全量备份与增量备份出现交叉,发生数据错乱的可能性

##[[ -n `ps uax | grep innobackupex | grep -v grep` ]] && exit 1

## 目录名默认精确到分钟,为避免意外情况,导致备份任务失败,可以精确到秒

CURRENT_BAK_PATH="${BACKUP_BASE_DIR}/"`date +%F_%H-%M`

[[ -d ${CURRENT_BAK_PATH} ]] && CURRENT_BAK_PATH="${BACKUP_BASE_DIR}/"`date +%F_%H-%M-%S`

#==============================================================================

## 全量备份

if [[ "$1" == "full" ]]; then

${XTRABACKUP_PATH} --user=root --defaults-file=${MYSQL_CNF_PATH} --parallel=${THREAD_CNT} --no-timestamp ${CURRENT_BAK_PATH}

echo "NULL|${CURRENT_BAK_PATH}|full" >> ${INC_BASE_LIST}

## 增量备份

elif [[ "$1" == "inc" ]]; then

## 基准目录列表文件不存在或者为空的情况,需要做一次全量备份

if [[ ! -f ${INC_BASE_LIST} || `sed '/^$/d' ${INC_BASE_LIST} | wc -l` -eq 0 ]]; then

${XTRABACKUP_PATH} --user=root --defaults-file=${MYSQL_CNF_PATH} --parallel=${THREAD_CNT} --no-timestamp ${CURRENT_BAK_PATH}

echo "NULL|${CURRENT_BAK_PATH}|full" >> ${INC_BASE_LIST}

## 不存在任何目录的情况,需要做一次全量备份,以避免增量备份失败

elif [[ `find ${BACKUP_BASE_DIR} -maxdepth 1 -type d | wc -l` -eq 1 ]]; then

${XTRABACKUP_PATH} --user=root --defaults-file=${MYSQL_CNF_PATH} --parallel=${THREAD_CNT} --no-timestamp ${CURRENT_BAK_PATH}

echo "NULL|${CURRENT_BAK_PATH}|full" >> ${INC_BASE_LIST}

## 在上一次备份的基础上,进行增量备份

else

PREV_BACKUP_DIR=`sed '/^$/d' ${INC_BASE_LIST} | tail -1  | awk -F '|' '{print $2}'`

## 上次的备份目录不存在或者目录为空的情况,以避免人为删除的可能性【针对部分恶意删除的情况,目前还没有较好的检查方法】

if [[ ! -d ${PREV_BACKUP_DIR} || -z `ls ${PREV_BACKUP_DIR}` ]]; then

${XTRABACKUP_PATH} --user=root --defaults-file=${MYSQL_CNF_PATH} --parallel=${THREAD_CNT} --no-timestamp ${CURRENT_BAK_PATH}

echo "NULL|${CURRENT_BAK_PATH}|full" >> ${INC_BASE_LIST}

else

${XTRABACKUP_PATH} --user=root --defaults-file=${MYSQL_CNF_PATH} --parallel=${THREAD_CNT} --no-timestamp --incremental ${CURRENT_BAK_PATH} --incremental-basedir=${PREV_BACKUP_DIR}

echo "${PREV_BACKUP_DIR}|${CURRENT_BAK_PATH}|inc" >> ${INC_BASE_LIST}

fi

fi

elif [[ "$1" == "help" ]]; then

print_help_info

else

print_help_info

fi

## 删除2周前的数据备份

rm -rf ${BACKUP_BASE_DIR}/`date -d '14 days ago' +'%F'`_*

sed -i "/`date -d '14 days ago' +'%F'`/d" ${INC_BASE_LIST}

#==============================================================================

##The End

###############################################################################

## 需要添加的crontab信息:

##     (1)、全量备份

##     20 04 * * * /data/scripts/mysql_backup.sh full >/dev/null 2>&1

##

##    (2)、增量备份

##     00 * * * * /data/scripts/mysql_backup.sh inc >/dev/null 2>&1

##

###############################################################################

## DB数据恢复步骤:

##(1)、应用基准

##    innobackupex --user=root --defaults-file=/etc/my.cnf --use-memory=8G --apply-log --redo-only /data/mysql_backup/full

##

##    (2)、应用第一个增量备份

##    innobackupex --user=root --defaults-file=/etc/my.cnf --use-memory=8G --apply-log --redo-only /data/mysql_backup/full --incremental-dir=/data/mysql_backup/inc_one

##

##    (3)、应用第二个增量备份

##    innobackupex --user=root --defaults-file=/etc/my.cnf --use-memory=8G --apply-log /data/mysql_backup/full --incremental-dir=/data/mysql_backup/inc_two

##

##   (4)、再次应用基准

##    innobackupex --user=root --defaults-file=/etc/my.cnf --use-memory=8G --apply-log /data/mysql_backup/full

##

##    (5)、恢复

##    innobackupex --user=root --defaults-file=/etc/my.cnf --copy-back /data/mysql_backup/full

###############################################################################

文章来至:www.codexueyuan.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java访问控制修饰符详解

在 Java 语言中提供了多个作用域修饰符,其中常用的有 public、private、protected、final、abstract、static、transient 和 volatile,这些修饰符有类修饰符、变量修饰符和方法修饰符。 在实际生活中,如果要获取某件物品,与其直接…

为资产分类定义折旧范围_RFID固定资产管理系统方案

项目介绍随着经济的不断发展,企业的规模日益壮大,固定资产管理作为企业资产管理最要的一部分,一直是企业关注的难题。由于固定资产具有价值高,使用周期长、使用地点分散的特点、相关责任人员多,在实际工作中不容易做到…

ssh中c3p0连接mysql_JSP+SSH+Mysql+C3P0实现的传智播客网上商城

项目简介本系统是传智播客授课时的开发案例,基于JSPSSHMysql的简单网上商城。在当代开发中,SSH的使用已经逐渐被SSM取代,但不代表我们不需要学习SSH,该系统简单,但功能齐全可以作为SSH框架初学者的入门项目。难度等级&…

zabbix配置mysql监控_【zabbix】zabbix配置MySQL监控

说明:除最后的测试步骤之外,以下操作均在zabbix的agent端(被监控端)执行一、环境准备:1、操作系统:CentOS 5.6 (zabbix server端)CentOS 5.6 (zabbix agent端)2、数据库:MySQL 5.6 (安装在agent端的数据库)3、软件&…

python把数据变为数据框_将Python dict转换为数据框

正如在另一个使用pandas.DataFrame()的答案中所解释的那样,这里的行为不会像您想象的那样。你可以做的是使用pandas.DataFrame.from_dict与orientindex:In[7]: pandas.DataFrame.from_dict({u2012-06-08: 388,u2012-06-09: 388,u2012-06-10: 388,u2012-0…

Java 静态变量和静态方法

在类中,使用 static 修饰符修饰的属性(成员变量)称为静态变量,也可以称为类变量,常量称为静态常量,方法称为静态方法或类方法,它们统称为静态成员,归整个类所有。 静态成员不依赖于…

java 静态方法同步_Java – 同步静态方法

这是我的测试代码,表明你是对的,这篇文章有点过分谨慎:class Y {static synchronized void staticSleep() {System.out.println("Start static sleep");try {Thread.sleep(2000);} catch (InterruptedException e) {}System.out.println("End static…

北信源管理网页卸载密码_Homebrew: 一行代码实现mac软件管理

Homebrew是一款帮助我们管理软件的软件。任何开源软件都可以通过Homebrew的一行代码完成软件的下载、升级或卸载等。目前Homebrew主要适用macOS或Linux系统。(Windows系统下的类似软件叫Chocolatey,功能相近,使用方法类似。详情请见https://chocolatey.o…

Java import static静态导入

在 JDK 1.5 之后增加了一种静态导入的语法,用于导入指定类的某个静态成员变量、方法或全部的静态成员变量、方法。如果一个类中的方法全部是使用 static 声明的静态方法,则在导入时就可以直接使用 import static 的方式导入。 静态导入使用 import stat…

python数据集的预处理_关于Pytorch的MNIST数据集的预处理详解

关于Pytorch的MNIST数据集的预处理详解MNIST的准确率达到99.7%用于MNIST的卷积神经网络(CNN)的实现,具有各种技术,例如数据增强,丢失,伪随机化等。操作系统:ubuntu18.04显卡:GTX1080tipython版本&#xff1…

java集合基础_java常用集合基础知识

【纯出自个人笔记,如有错误,望改正,谢谢哈!学习~】一、Java集合1、集合类:容器类 装对象的(不能存放基本数据类型,但是里面看到的其实是包装类型)java.util包ArrayList底层是一个对象数组----------------------------…

java cookie安全_cookie的安全性问题

HTTP协议:(1)请求组成部分:请求行:(get或者post请求;请求路径(不包括主机) ;http1.1)请求头:请求头是浏览器交给服务器的一些信息(比较cookie啥的)请求体:只有post请求有请求体,get请…

python画环形图_用Python把图做的好看点:用Matplotlib画个环形图

P老板:小Lo啊,你觉得这几个图好看吗我:好看,好看P老板:我也觉得,这个月的月报,就用这个把,你给我几个,我看看我:.....于是乎,我们今天的目标是什么…

Java main()方法

在 Java 中,main() 方法是 Java 应用程序的入口方法,程序在运行的时候,第一个执行的方法就是 main() 方法。main() 方法和其他的方法有很大的不同。 下面先来看最简单的一个 Java 应用程序 HelloWorld,我们将通过这个例子讲解 Ja…

Java方法的可变参数

在具体实际开发过程中,有时方法中参数的个数是不确定的。为了解决这个问题,在 J2SE 5.0 版本中引入了可变参数的概念。 声明可变参数的语法格式如下: methodName({paramList},paramType…paramName)其中,methodName 表示方法名称…

python中ans的用法_python cx_Oracle基础使用方法

问题使用python操作oracle数据库,获取表的某几个字段作为变量值使用。使用Popensqlplus的方法需要对格式进行控制,通过流获取这几个字段值不简洁(个人观点……)。(优点是能够使用sqlplus的方法直接访问sql文件,不需要考虑打开/关闭连接&#…

java gradle 资源访问_java在gradle工程访问src/test/resources目录下的资源配置文件

package com.jiepu;import java.io.File;import java.net.URISyntaxException;import java.util.Map;import java.util.Properties;//java在gradle工程访问src/test/resources或者src/main/resources目录下的资源配置文件public class TestMain{public static void main(String…

python 匹配字符串map lambda函数_Python map amp; reduce 以及lambda匿名函数 - jvisualvm - ITeye博客...

map()map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。使用map实现一个f(x) x * x的功能def f(x):return x * xm map(f, list(range(1, 10)))# [1, 4…

java执行数据库命令行_java程序执行命令行,解锁数据库表

有些表锁的时间长或其他原因,在plsql中不能解锁,只能用命令行解锁。有些功能跨平台系统的交互偶尔会锁表,就需要自动解锁。下面是解锁的代码:package com.lg.BreakOracleUtils;import com.lg.DB.DBProjp;import com.lg.database.D…

python display函数_【python】pandas display选项

import pandas as pd1、pd.set_option(expand_frame_repr, False)True就是可以换行显示。设置成False的时候不允许换行2、pd.set_option(display.max_rows, 10)pd.set_option(display.max_columns, 10)显示的最大行数和列数,如果超额就显示省略号,这个指…