本文档采用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任务,每天执行备份脚本
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 <<EOF
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 <<EOF
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脚本的更多相关文章

  1. xtrabackup增量备份mysql +MHA

    http://blog.csdn.net/yanggd1987/article/category/2214421 https://www.centos.bz/2013/09/innobackupex- ...

  2. 按时间划分备份MySQL脚本

    按时间划分备份MySQL脚本 #!/bin/bash BASE_PATH=/data/dump/ JIRA_FILE_NAME=ZY798-`date +%Y%m%d%H%M%S`; cd /usr/ ...

  3. shell脚本 binlog方式增量备份mysql

    一.简介 源码地址 日期:2018/4/12 介绍:复制Binlog日志方式的增量备份脚本,并保存固定天数的备份 效果图: 二.使用 适用:centos6+ 语言:中文 注意:使用前先修改脚本中变量 ...

  4. Linux 平台下 RMAN 全备 和 增量备份 shell 脚本

    转:http://blog.csdn.net/tianlesoftware/article/details/5740630 全备脚本 以 nocatalog 模式为例: Shell 脚本: ##### ...

  5. centos中创建自动备份Mysql脚本任务并定期删除过期备份

    背景: OA系统数据库是mysql,引擎为myisam,可以直接通过拷贝数据库文件的方式进行备份 创建只备份数据库的任务: 创建保存mysql数据库备份文件的目录mysqlbak mkdir /hom ...

  6. 每天自己主动备份mysql脚本

    定时运行脚本: 1.运行 crontab -e 00 00 * * * /bin/bash yourpath/mysqlbak.sh 2.打开自己主动运行文件 vi /etc/crontab 在etc ...

  7. Centos7 增量备份数据脚本

    #!bin/bash#Automatic Backup Linux System Files#By Author www.jfedu.net#Define VariablesSOURCE_DIR=( ...

  8. Percona Xtrabackup备份mysql全库及指定数据库(完整备份与增量备份)

    原文地址:http://www.tuicool.com/articles/RZRnq2 Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对In ...

  9. Percona备份mysql全库及指定数据库(完整备份与增量备份)

    Percona Xtrabackup备份mysql全库及指定数据库(完整备份与增量备份) Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对I ...

随机推荐

  1. python学习笔记:第11天 闭包及迭代器

    目录 1. 函数名的使用 2. 闭包 3. 迭代器 1. 函数名的使用 其实函数名也是一个变量,但它是一个比较特殊的变量,与小括号配合可以执行函数的变量: 函数名其实和内存一样,也可以使用print查 ...

  2. Go Web Gin EasyUI 框架

    项目结构 第三方: 1.gin微服务框架 2.EasyUI框架

  3. 笔记-django第一个项目

    笔记-django第一个项目 1.      创建项目 安装 Django 之后,现在有了可用的管理工具 django-admin.可以使用 django-admin 来创建一个项目: 看下djang ...

  4. 北京Uber优步司机奖励政策(3月8日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  5. 上海Uber优步司机奖励政策(1月4日~1月10日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  6. [Jmeter并发报错解决方案]org.apache.http.NoHttpResponseException: 10.0.4.147:8000 failed to respond

    背景:公司模型框架是Nginx+uwsgi+Django+nginx,一开始使用Jmeter进行高并发请求测试,发现成功率只有50%,换用postman,成功率100%,代码进行高并发一样不会报错. ...

  7. LeetCode: 51. N-Queens(Medium)

    1. 原题链接 https://leetcode.com/problems/n-queens/description/ 2. 题目要求 游戏规则:当两个皇后位于同一条线上时(同一列.同一行.同一45度 ...

  8. android 8.0 Account行为变更 账号系统

    我们有个方法,是判断系统的账号有没有登录. public static boolean isAccountLogin(Context context) { String df = "com. ...

  9. DBoW2 词袋模型笔记

    DBoW算法用于解决Place Recognition问题,ORB-SLAM,VINS-Mono等SLAM系统中的闭环检测模块均采用了该算法.来源于西班牙的Juan D. Tardos课题组. 主要是 ...

  10. spring源码-国际化-3.5

    一.国际化在实际代码中是非常常见的一中方式.为了结合web做一下语言上面的切换,而达到展示的目的. 二.这里呢,主要是介绍spring中对于国际化做了哪些处理. 三.实现方式 1)xml配置 < ...