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

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

  1. RMAN备份数据库_制作和更新RMAN增量备份(Incremental Backup)

    增量备份只拷贝从指定的之前的备份以后更改过的数据文件块.使用BACKUP命令来创建增量备份. 增量备份要么是累积增量备份,要么是差异增量备份. 虽然备份的内容相同,BACKUP DATABASE和BA ...

  2. Linux系统快照一键备份恢复、不同机器恢复、增量备份恢复

    Linux系统快照一键备份恢复.不同机器恢复.增量备份恢复 前言 由于前段时间在做一个自动化部署开发环境的项目需要重复安装多种服务以及中间件,但是生产环境的服务器不像自己的虚拟机可以使用快照,如果直接 ...

  3. 【备份恢复】noarchive模式下使用增量备份恢复数据库

    使用增量备份恢复处于NOARCHIVELOG 模式的数据库 增量备份前提是有0即全库备份,另外默认的增量备份是指增量差异备份(backup as backupset incremental level ...

  4. mysql异地增量备份工具_利用 xtrabackup 工具实现增量备份 mysql(附脚本)

    1.安装 percona 源 yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-rel ...

  5. oracle dg备份恢复,DG丢失归档,使用增量备份恢复一例

    5.备份好之后,从主库传到备份库的目录中,可以与上文的目录不同. RMAN> CATALOG START WITH '/tmp/stb_bk/'; 6.查看一下controlfile的位置,因为 ...

  6. oracle的scn增量备份,【Oracle】基于SCN的增量备份修复DataGuard GAP

    1. 首先来模拟 Gap 的产生 1.1. 备库关闭: SYS@dgtest_sshutdown immediate; 1.2. 主库切换日志 SYS@dgtestselect SEQUENCE#,A ...

  7. oracle增量备份0级,oracle_linux自动运行rman增量备份脚本,一、增量备份脚本0级备份脚本...

    一.增量备份脚本 0级备份脚本:红色部分为自定义的备份文件放置的目录 #script.:BackupFull.sh #creater:xyh #date:2014-03-08 #desc:backup ...

  8. c# mysql 管理员权限_C# winform 权限管理系统完整源码下载(含数据库)

    [实例简介] [实例截图] [核心代码] using System; using System.Collections.Generic; using System.ComponentModel; us ...

  9. Percona Xtrabackup备份mysql大数据库(完整备份与增量备份)

    Percona Xtrabackup备份mysql大数据库(完整备份与增量备份) 文章目录 [隐藏] Xtrabackup简介 Xtrabackup安装 Xtrabackup工具介绍 innoback ...

最新文章

  1. 交换两个数不引入第三个变量
  2. 合并远程仓库到本地_Git工作区、暂存区、本地仓库和远程仓库科普
  3. python瀑布图怎么做_教你用Python创建瀑布图
  4. 哨兵2号波段_艾略特波段理论分析,A50和恒指走势的蛛丝马迹,完全暴露A股主力意图!...
  5. 如何侦听网线数据_网络工程师 | 七类网线水晶头又如何制作?
  6. 英语学习笔记2019-11-22
  7. Linux在多线程应用程序中处理信号
  8. 我看《Linux0.11内核完全注释2.01》的方法
  9. Python sorted功能
  10. 用户'MYCOMPUTER\ASPNET' 登录失败”的解决方法
  11. Java/JSP中使用JDBC连接SQL Server 2005~(2008类似)
  12. win10计算机管理字体糊,win10字体发虚模糊正确解决方法(5个方法)
  13. 聊聊高并发系统之限流特技(二)作者:张开涛
  14. 银河麒麟系统服务端命令_麒麟系统介绍
  15. linux日期时间转换函数,Linux时间戳、日期转换函数
  16. UML实例(一):在线购物系统问题描述
  17. 关于邮箱的正则表达式
  18. HTML5期末大作业:动物主题网站设计——酷酷动物主题响应式网页(5页) 大学生动物主题网页作品 动物网页设计作业模板 学生网页制作源代码下载
  19. 明日之后 找不到服务器,《明日之后》无法连接服务器怎么解决 服务器无法连接解决方法...
  20. PM at Google —— 最全产品经理常用术语及知识点,建议收藏!

热门文章

  1. mycli到底有多好用?
  2. mysql 本地登录失败 - 已授权
  3. 用Python手写五大经典排序算法,看完这篇终于懂了!
  4. 用 Python 编写一个天气查询应用 pyqt5
  5. 年度总结 | Flink 年度最佳学习路线总结
  6. MongoDB与python交互
  7. Asp.net ajax、Anthem.net、Ajax pro三大ajax框架论坛网友比较
  8. 浅谈LINQ to SQL集成数据库语言优劣
  9. [深度学习-NLP]Imdb数据集情感分析之模型对比(贝叶斯, LSTM, GRU, TextCNN, Transformer, BERT)
  10. php怎么给span赋值,php给一组指定关键词添加span标签的方法