两个shell备份mysql的脚本

来源:互联网 发布:matlab 矩阵转列向量 编辑:程序博客网 时间:2024/05/19 11:46

原文:http://isadba.com/index.php/2012/01/%E5%88%86%E4%BA%AB%E4%B8%A4%E4%B8%AAshell%E5%A4%87%E4%BB%BDmysql%E7%9A%84%E8%84%9A%E6%9C%AC/

分享两个shell script脚本,用来备份mysql用的。
第一个脚本是使用mysqldump命令来备份,第二个脚本是使用innobackupex也就是xtrabackup程序来做备份。
他们的主要区别在于:
mysqldump优点:备份出来的数据比较小,基本算是纯数据,如果是innodb引擎,数据都在内存里面的话,不会发生物理磁盘的读操作。
mysqldump缺点:不支持增量备份,会发生表锁,如果数据量过大,表锁时间会很长。
xtrabackup优点:支持热备,支持增量备份。
xtrabackup缺点:备份是物理拷贝+逻辑备份的方式备份数据库,会发生物理磁盘的读操作,但是物理备份的速度会比较快。
总的来看xtrabackup会比mysqldump优秀很多,因为他支持热备和增量备份。但是这个也是根据数据库情况而定,如果是在slave上做备份,不用太多的考虑表锁问题,mysqldump也是很不错的。还有就是如果数据量不大,小于5G,数据基本都是update语句较多的情况下,不太适合使用xtrabackup做全备和增量备份策略,因为xtrabackup增量备份的原理是通过lsn来操作的,
如果你的数据库更新太频繁,每天新的lsn太多,那增量备份还没有全备来的快,还有就是xtrabackup全备的时候会备份ib_logfile*和ibdata*,就算你使用的独享表空间也会备份这些文件,所以每次全备的size会比较大,磁盘空间和系统资源的占用也比较多。
根据上面的一些简单分析,大家可以根据自己的情况来指定自己的备份策略,使用这两个脚本加上crontab就能完成普通的备份任务。
下面是两个脚本,第一个是使用mysqldump来备份,第二个是使用innobacpupex,innobaclupex是每天第一次备份是全备,后面就会基于每天的第一个全备做0级增量备份。
mysqldump:

# cat mysql_bak.sh#temp script,use backup ZION_DB#!/bin/bashFILE_TIME=`date +%Y-%m-%d-%H`DIR_TIME=`date +%Y-%m-%d`BACK_DIR=/backup/DBBAK/$DIR_TIME[ -d $BACK_DIR ] || mkdir -p $BACK_DIRcd $BACK_DIR/usr/local/perconamysql/bin/mysqldump -uroot  db > db.sql-zhanshen-$FILE_TIME

innobackupex:

# cat innoback_mysql.sh#!/bin/bash#       mysql backup with innobackupex tool.#       version:        2012-1-12       frist version##                               by andy.feng#                               copy rightLANG=CGTIME=`date +%Y-%m-%d`DIR_TIME=innoback-`date +%Y-%m-%d`BACK_DIR=/backup/DBBAK/$DIR_TIMEif [ ! -d $BACK_DIR ]then        mkdir -p $BACK_DIR        cd $BACK_DIR        /usr/bin/innobackupex $BACK_DIR &> /dev/nullelif [ -d $BACK_DIR ]then        cd $BACK_DIR        FULLBACKUP=`ls -1 | grep  $GTIME | sort | awk 'NR==1{print $1}'`        if [ -d $FULLBACKUP ]        then                /usr/bin/innobackupex --incremental $BACK_DIR --incremental-basedir=$FULLBACKUP &> /dev/null        else                /usr/bin/innobackupex $BACK_DIR &> /dev/null        fifi