使用shell实现mysql自动全备、增备&日志备份

数据库热备脚本:

vim backup.sh

#!/bin/sh

time=`date "+%Y%m%d_%H%M%S"`

host=`hostname`

week=`date +%w`

monitor="/home/mysql/monitor/mysql_hotbackup_status.txt" ##zabbix监控文件

time_start=`date +%s`

n=0 ###要周几做全备,周日是0,周一到周六依次为1~6

function check_status()

{

status=`cat ${1}|grep "innobackupex: completed OK"|wc -l`

if [ $status -eq 1 ]

then

echo 0 > ${monitor}

else

echo 1 > ${monitor}

fi

}

if [ $week -eq $n ]

then

/bin/sh /home/mysql/shell/mysql_xtrabackup.sh full >> /home/mysql/log/xtrabackup_log/${host}_${time}_full.log 2>&1

check_status /home/mysql/log/xtrabackup_log/${host}_${time}_full.log;

else

/bin/sh /home/mysql/shell/mysql_xtrabackup.sh incr >> /home/mysql/log/xtrabackup_log/${host}_${time}_incr.log 2>&1

check_status /home/mysql/log/xtrabackup_log/${host}_${time}_incr.log;

fi

time_end=`date +%s`

times=$((${time_end}-${time_start}))

if [ $week -eq $n ]

then

echo "it takes ${times} seconds to backup the full backup!!!" >> /home/mysql/log/xtrabackup_log/${host}_${time}_full.log

else

echo "it takes ${times} seconds to backup the incr backup!!!" >> /home/mysql/log/xtrabackup_log/${host}_${time}_incr.log

fi

###数据库备份策略###

###周日全备,周一~周六增量备份###

vim mysql_xtrabackup.sh

#!/bin/bash

if [ $# -ne 1 ]

then

echo "usage: `basename $0` [full|incr]"

exit 1

fi

name=`hostname`               # the name for bakcup

conf_file=/etc/my.cnf           # the mysql config file

bakuser="backup"

bakpass="backup"

bakdir=/data/mysql/mysql3306/tmp/   # the directory to backup

baklog=/home/mysql/log

host=localhost

innobackupex=/usr/bin/innobackupex

remotedir="/mysqlbackup/databak/${name}"

time=`date "+%Y%m%d_%H%M%S"`              # don‘t modify

yesterday=`date  +"%Y%m%d" -d  "-1 days"`

chkpointdir=/home/mysql/chkpoint/

full() {

ssh [email protected] "mkdir ${remotedir}/${name}_${time}_full/"

innobackupex --defaults-file=${conf_file} --user=${bakuser} --password=${bakpass} --host=${host} --slave-info --stream=xbstream --compress --extra-lsndir=${chkpointdir} --parallel=16 --throttle=120 ${bakdir}|ssh [email protected] \ "xbstream -x -C ${remotedir}/${name}_${time}_full/"

scp /etc/my.cnf mysql02:${remotedir}/${name}_${time}_full/

}

incr() {

ssh [email protected] "mkdir /${remotedir}/${name}_${time}_incr/"

lsn=`cat ${chkpointdir}/xtrabackup_checkpoints|grep to_lsn|awk ‘{print $NF}‘`

innobackupex --defaults-file=${conf_file} --user=${bakuser} --password=${bakpass} --host=${host} --slave-info --stream=xbstream --compress --extra-lsndir=${chkpointdir} --parallel=16 --throttle=120 --incremental --incremental-lsn=${lsn}  ${bakdir}|ssh [email protected] \ "xbstream -x -C ${remotedir}/${name}_${time}_incr/"

scp /etc/my.cnf mysql02:${remotedir}/${name}_${time}_incr/

}

case "$1" in

full)

full

;;

incr)

incr

;;

*)

echo "Usage: $0 full|incr"

esac

需求场景:

备份策略:周日全备,周一到周六增备。

备份路径:异地备份,压缩备份。

前提条件:mysql服务器同备份机mysql02配置了ssh互信。

数据库日志备份脚本:

vim binlog_mysql01.sh

#!/bin/sh

BACKUP_BIN="/usr/bin/mysqlbinlog"

LOCAL_BACKUP_DIR="/mysqlbackup/logbak/mysql01/"

BACKUP_LOG="/home/mysql/log/binlog_log"

REMOTE_HOST="192.168.1.1"

REMOTE_PORT="3306"

REMOTE_USER="backup"

REMOTE_PASS="backup"

FIRST_BINLOG="mysql-bin.000001"

#time to wait before reconnecting after failure

SLEEP_SECONDS=10

##create local_backup_dir if necessary

mkdir -p ${LOCAL_BACKUP_DIR}

cd ${LOCAL_BACKUP_DIR}

## 运行while循环,连接断开后等待指定时间,重新连接

while :

do

if [ `ls -A "${LOCAL_BACKUP_DIR}" |wc -l` -eq 0 ];then

LAST_FILE=${FIRST_BINLOG}

else

LAST_FILE=`ls -l ${LOCAL_BACKUP_DIR} | grep -v backuplog |tail -n 1 |awk ‘{print $9}‘`

fi

${BACKUP_BIN} --raw --read-from-remote-server --stop-never --host=${REMOTE_HOST} --port=${REMOTE_PORT} --user=${REMOTE_USER} --password=${REMOTE_PASS} ${LAST_FILE}

echo "`date +"%Y/%m/%d %H:%M:%S"` mysqlbinlog停止,返回代码:$?" | tee -a ${BACKUP_LOG}

echo "${SLEEP_SECONDS}秒后再次连接并继续备份" | tee -a ${BACKUP_LOG}

sleep ${SLEEP_SECONDS}

done

nohup sh binlog_mysql01.sh 方式启动脚本,实时备份binlog数据。

使用shell实现mysql自动全备、增备&日志备份

时间: 2024-12-21 15:53:33

使用shell实现mysql自动全备、增备&日志备份的相关文章

基于mysqldump编写自动全备增备的shell脚本

基于mysqldump编写自动全备增备的shell脚本 在线上MySQL数据库备份分为全备和增备,而xtrabackup备份已经支持了增量备份了,但是mysqldump就不支持增量备份,所以我们需要写一个shell脚本对于mysqldump来自动全备和增备. 一下脚本要求我们做一个全备的策略,然后如何做增量备份,自动完成每天执行增量备份,每个星期天执行全备.备份完删除二进制文件,减低磁盘压力. [[email protected] ~]# cat mysqlback.sh #!/bin/bash

mysql-zrm备份工具实现全备+增备策略

本博文声明,特别适合初次应用此工具的小白使用,原因看完就明白,OK,开始吧! 1.前期准备: 因为mysql-zrm这个备份工具是用perl语言写成的工具,所有要先安装一些软件包,来为mysql-zrm工具提供必要的环境 yum install perl-DBI perl-DBD-MySQL perl-XML-Parser -y PS:(网上好多人云亦云,要不就是复制.转载别人的,不需要那么复杂,只需要安装这3个包即可) 2.创建备份用户 mysql> grant select,insert,u

Innobackupex MySQL 全备、增备及恢复

简介: 在这之前都是通过 mysqldump 来备份数据库的,由于是逻辑备份,所以采用这种备份方式数据是很安全的,跨平台.版本都很容易. 凡事有利必有弊,逻辑备份在你数据库比较大时,备份.恢复数据所耗费的时间也是蛮长的,所以要不断改进,使用物理备份. 由于线上数据库表使用的是混合引擎 MyISAM 跟 Innodb ,所以也不能使用 mysqlhotcopy ,这个工具还是蛮好用的,可惜只能备份 MyISAM. Percona XtraBackup 是 Percona 公司开发的一个用于 MyS

一种基于MySQL Innodb数据引擎的增备方法_爱学术

[摘要]针对MySql Innodb数据引擎二进制日志备份较慢的问题,提出了一种基于MySQL Innodb存储引擎的增量备份方法,可以实现最短时间的备份,每次记录相对于上次完全备份点差异的数据.增备是速度最快的备份方法,而且需要最少的存储空间.但是增备却需要最长时间来完成恢复.增备方法基于日志页序列号,通过计算差值而直接对LOG页进行拷贝而实现,避免重复执行SQL语句,相比优于以前的BINLOG复制增备方案. [作者] 邬文轩  胡晓勤 转载至爱学术:https://www.ixueshu.c

shell脚本:mysql全备与binlog增量备份

脚本功能:mysql库备份脚本,全备与binlog日志备份 脚本可以根据指定的参数进行全备,其余时间备份binlog日志 --------------- #!/bin/bash # description:Trian Server backup databases # revision on 2016-02-18 # by colin # #################################### # 功能说明:该脚本运用于mysql每天备份与上传 #  # 使用说明: # ./m

基于Innobackupex的增备及恢复

MySQL的热备(物理备份)可以采取全备加增量备份的方式来减轻数据库I/O压力及系统资源的占用.增量备份主要是以全备或增量备份为基础,备份那些变更过的页面.其备份的原理是基于一个不断增长的LSN序列,这个LSN与Oracle的SCN类似.在恢复期间,我们需要将已提交的事务前滚,未提交的事务回滚.本文主要描述了增量备份及增量恢复. 1.增备的相关知识点    As not all information changes between each backup, the incremental ba

mysql增备

mysql每隔5分钟增备一次 1,逻辑示意图 2,目录结构图 3,producer #!/usr/local/bin/python3 # -*- coding: UTF-8 -*- # ==================================================== # Author: changbo - [email protected] # Last modified: 2017-9-3 # Filename: mysqlincrement.py # Descript

思路:如何快速写一个全面的数据库 增备+全备+删除,自动化的脚本?

1.数据作用: 数据对我们来说是非常非常的重要,如果你是管理数据员.运维人员的,数据丢失了,找不回来,也就意味着,你的职业生涯就结束了,为了避免数据丢失,我们也做了很多的维护.备份,比如做主从复制.做全备.增备等等.这个可以参考我的另一篇文章Mysql主从复制. 我这里就不多说,今天我们要怎么写一个比较好的数据备份自动化脚本,让我们更好的管理数据库. 2.mysql备份脚本思路 首先要有一个思路,我的要求是每个的周一到周五做增量备份,周六做全备,对前两天的增备的日志删除,对两个星期前的全备也进行

MySQL自动化运维之用mysqldump和mysqlbinlog实现某一数据库的每周全备和每天差异备份,并添加到执行计划【热备】

案例: 线上有一数据库,需要每周全备一次,每天差备一次[安全起见还是差备吧,不要增备,不要吝啬磁盘哦,而且差备恢复还很快] 1.每周对数据库hellodb做完全备份 crontab任务计划: 10 01 * * 1 /bin/bash /work/dump-complete-hello.sh ===>每周周一凌晨1点10分执行全备脚本/work/dump-complete-hello.sh 全备脚本/work/dump-complete-hello.sh内容如下: #!/bin/bash # 全