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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

文档介绍

本文档采用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上传到服务器。备份完后都会发送一封邮件。 

#变量说明 pass mysql账户口令,name mysql账户名称,DATA_DIR mysql存储路径,DATE 时间,MYSQL_BIN 是mysql命令路径, WAN_DIR 完全备份目录,ZENG_BACK 增量备份的目录。Host FTP服务器的IP,Username FTP账户口令,Passwd FTP账户名称, db_name 备份的数据库名, error_log 当天备份错误日志, backup_log 保存当天的备份日志,db 保存要备份的数据库名文件 

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_WAN_DIR/backup_error_DATE.log"

backup_log="ZENG_DIR/backup_ZENG_DIR/backup_DATE.log"

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

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

cd $DATA_DIR 

ls -l DATADIR|grep"d"|awkF""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 (catdb) 

    do 

       mysqldump --flush-logs -unameppass --skip-lock-tables --quick dbname>dbname.sql

        if [ $? = 0 ] 

then

             find $ZENG_BACK -name"*.log" -mtime +32 -exec rm -f {} \; >/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 ZENGBACKname".sql.tar.gz"mtime+7execrmf>>backup_log 

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

cd $WAN_DIR 

for db_back in (catdb) 

do 

    ftp -nv $Host <<EOF 

user wolf "chenqibin"

    put dbback.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 -unameppass -e "purge master logs before {TIME}" && echo "delete 10 days before log" | tee -aeMailFile 

filename=`cat DATA_DIR/chlinux-bin.index | awk -F "/"'{print2}'` 

cd /zeng_dir 

for i in $filename 

do 

     echo "StartTimestartbackupbinlog">>eMailFile 

for db_name in (catdb) 

     do 

           mysqlbinlog -unamepchenqibinddb_name Start="StartTime" DATADIR/i >>dbname.DATE.sql 

        if [ $? = 0 ] 

then

             cd /zeng_dir 

             tar -zcvf dbname.gzdumpfile dbname.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 -f {} \; >/dev/null 2>&1 

cd /zeng_dir 

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

find $WAN_DIR -name"*.tar.gz"--mtime +7 -exec rm -f {} \;

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

for db_back in (catdb) 

do 

    ftp -nv $Host <<EOF 

user wolf "chenqibin"

    put dbback.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数据库名

更多博文请移步:linux开源技术博客:http://www.chlinux.net/


有些朋友反应复制后脚本不能用,我已经把脚本上传到下载中心,提供免豆下载:下载地址 :http://down.51cto.com/data/762627 

1
<br>


本文转自1594cqb 51CTO博客,原文链接:http://blog.51cto.com/wolfchen/1162304,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
69
分享
相关文章
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
PolarDB开源数据库进阶课5 在线备份
本文介绍了如何在PolarDB RAC一写多读集群中进行在线备份,特别针对共享存储模式。通过使用`polar_basebackup`工具,可以将实例的本地数据和共享数据备份到本地盘中。实验环境依赖于Docker容器中用loop设备模拟的共享存储。
48 1
定期备份数据库:基于 Shell 脚本的自动化方案
本篇文章分享一个简单的 Shell 脚本,用于定期备份 MySQL 数据库,并自动将备份传输到远程服务器,帮助防止数据丢失。
如何使用 HBase Shell 进行数据的实时监控和备份?
如何使用 HBase Shell 进行数据的实时监控和备份?
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
354 3
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
200 3
介绍一下数据库的备份和恢复策略
【10月更文挑战第21】介绍一下数据库的备份和恢复策略
【赵渝强老师】数据库的备份方式
备份数据库是指将数据库中的数据及相关信息保存起来,以便在系统故障时恢复。备份对象不仅限于数据本身,还包括数据库对象、用户权限等。根据备份策略、类型和模式的不同,可分为整体/部分备份、完全/增量备份、一致/非一致备份。文中还附有相关视频讲解。
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
180 82