mysql差异备份数据库get shell_shell进行完整和增量备份mysql数据库

本文档详述如何使用mysqldump进行MySQL数据库的完全和增量备份,并结合crontab设置定期任务。备份策略包括每周执行一次的完全备份和每日执行的增量备份,完成后自动上传至FTP服务器。同时,文章提到了启用二进制日志以支持增量备份的重要性,并给出了详细的备份脚本和配置步骤。
摘要由CSDN通过智能技术生成

shell进行完整和增量备份mysql数据库

文档介绍

本文档采用mysqldump 对数据库进行备份,mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法,mysqldump 比直接拷贝要慢些。

本文描述Mysql数据库的自动备份,包括完全备份和增量备份。其中,完全备份每周执行一次,增量备份每天都会执行。备份成功后会自动上传到FTP服务器。mysql需要开启二进制日志。

备份策略布置

把脚本放到/usr/bin 目录下面

(1)、启用二进制日志

采用 binlog 的方法相对来说更灵活,省心省力,而且还可以支持增量备份。

启用 binlog 时必须要重启 mysqld。首先,关闭 mysqld,打开 /etc/my.cnf,加入以下几行:

[mysqld]

log-bin

然后启动 mysqld 就可以了。运行过程中会产生 HOSTNAME-bin.000001 以及 HOSTNAME-bin.index,前面的文件是 mysqld 记录所有对数据的更新操作,后面的文件则是所有 binlog 的索引,都不能轻易删除。关于binlog 的更详细信息请查看手册。

(2)、设置crontab任务,每天执行备份脚本

shell> vi /etc/crontab

添加以下:

0 00 * * * root /usr/bin/backap_mysql.sh

脚本如下:

#!/bin/bash

#set -x

#此脚本的主要用途是备份mysql服务器上的数据库。并且自动通过FTP上传到服务器。备份完后都会发送一封邮件。

echo -e “此脚本的主要用途是备份mysql服务器上的数据库.并且自动通过FTP上传到服务器。”

Host=www.chlinux.net

pass=chenqibin

name=root

DATE=`date +”%Y%m%d”`

WAN_DIR=”/wan_dir”

ZENG_BACK=”/backup”

DATA_DIR=”/usr/local/mysql/data”

MYSQL_BIN=”/usr/local/mysql/bin”

error_log=”$WAN_DIR/backup_error_$DATE.log”

backup_log=”$ZENG_DIR/backup_$DATE.log”

gzdumpfile=”$DATE.sql.tar.gz”

db=”/var/log/backup_$DATE.txt”

cd $DATA_DIR

ls -l $DATA_DIR | grep “^d” | awk -F ” ” ‘{print $9}’ >>$db

function wan() {

#检测完全备份目录是否存在,如果不存在就创建。

if [ -d $WAN_DIR ]

then

echo “完全备份目录存在” >>$backup_log

else

echo “完全备份目录不存在,开始创建…….”

/bin/mkdir $WAN_DIR

fi

eMailFile=”$WAN_DIR/mail.log”

email=kelly@r2games.net

echo ”       ” > $eMailFile

echo “———————–” >> $eMailFile

echo “`date +”%y-%m-%d %H:%M:%S”`” >> $eMailFile

echo “————————-” >> $eMailFile

cd $WAN_DIR

for dbname in $(cat $db)

do

mysqldump –flush-logs -u$name -p$pass –skip-lock-tables –quick $dbname > $dbname.sql

if [ $? = 0 ]

then

find $ZENG_BACK -name “*.log” -mtime +32 -exec rm {} \; >/dev/null 2>&1

cd $WAN_DIR

tar -zcvf $dbname.$gzdumpfile $dbname.sql

echo “Backup MySQL succeed” >>$eMailFile

mail -s “MySQL Backup” $email < $eMailFile

else

echo “Backup MySQL fail” >>$eMailFile

mail -s “MySQL Backup fail” $email < $eMailFile

fi

done

#完全备份后删除本地增量备份文件,只保留最近一个星期的增量备份文件

find $ZENG_BACK -name “*.sql.tar.gz”  –mtime +7 -exec rm -rf {} \; >>$backup_log

#将备份好的上传到FTP服务器

cd $WAN_DIR

for db_back in $(cat $db)

do

ftp -nv $Host <

user wolf “wolf#123”

put $db_back.$gzdumpfile

quit

EOF

done

}

function zeng() {

/bin/mkdir /zeng_dir

eMailFile=”$ZENG_DIR/mail.log”

email=kelly@r2games.net

echo ”       ” > $eMailFile

echo “———————–” >> $eMailFile

echo “`date +”%y-%m-%d %H:%M:%S”`” >> $eMailFile

echo “————————-” >> $eMailFile

TIME=$(date “-d 10 day ago” +%Y-%m-%d %H:%M:%S)

StartTime=$(date “-d 1 day ago” +”%Y-%m-%d %H:%M:%S”)

Start=”–start-datetime”

#删除10天前的二进制文件

mysql -u$name -p$pass -e “purge master logs before ${TIME}” && echo “delete 10 days before log” | tee -a $eMailFile

filename=`cat $DATA_DIR/chlinux-bin.index | awk -F “/” ‘{print $2}’`

cd /zeng_dir

for i in $filename

do

echo “$StartTime start backup binlog” >> $eMailFile

for db_name in $(cat $db)

do

mysqlbinlog -u$name -pchenqibin -d $db_name $Start=”$StartTime” $DATA_DIR/$i >>$db_name.$DATE.sql

if [ $? = 0 ]

then

cd /zeng_dir

tar -zcvf $db_name.$gzdumpfile $db_name.$DATE.sql

echo “Backup MySQL succeed” >>$eMailFile

mail -s “MySQL Backup” $email < $eMailFile

else

echo “Backup MySQL fail” >>$eMailFile

mail -s “MySQL Backup fail” $email < $eMailFile

fi

done

done

find $ZENG_BACK -name “*.log” -name +32 -exec rm {} \; >/dev/null 2>&1

cd /zeng_dir

#删除上次备份的完整备份的文件

find $WAN_DIR -name “*.tar.gz”  –mtime +7 -exec rm -rf {} \;

#将备份好的上传到FTP服务器

for db_back in $(cat $db)

do

ftp -nv $Host <

user wolf “wolf#123”

put $db_back.$gzdumpfile

quit

EOF

done

}

backfile=`ls -l /wan_dir | wc -l`

if [ $backfile != 0 ]

then

echo “完整备份已经存在,现在进行增量备份”

sleep 10

zeng

else

echo “还没进行完整备份,现在进行完整备份”

sleep 30

wan

fi

主要变量说明:

Host     #FTP的IP

pass     #FTP的密码

name     #FTP和mysql的用户名

DATE     #时间

WAN_DIR  #完整备份的目录

ZENG_BACK  #增量备份的目录

DATA_DIR   #mysql数据目录

error_log  #错误日志

gzdumpfile #压缩后的后缀名

db          #mysql数据库名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值