您当前的位置:首页 >> 网站维护
RSS

freebsd下mysql数据库自动备份的shell

作者: 来源: 2010-05-26

我们可能需要经常给数据库做定时的备份,很多情况下手动就可以完成了,不过那样子的话效率太低也麻烦。以下通过shell + crontab时间定时自动备份,

本文提供的代码在freebsd 7.2和freebsd8下测试通过。实现的功能如下:

  1. 在设定的时间自动按当前的日期为数据库备份文件的一部分进行备份;
  2. 自动删除5天前的备份数据;
  3. 数据备份为压缩格式,并自动打包当天的所有数据,打包完成后删除当天的备份文件夹;
  4. 自动记录备份状态

我是以root的身份进行备份,通常我会把一些cron方志/root/cron目录下,并将该目录设置为700属性,您可以根据需要自己修改:

#创建cron目录,如果这个文件夹已存在或者您想修改存储的位置,那么修改下面的路径
#mkdir ~/cron
#修改文件夹属性,设置为除了用户本身,其他的人无法读写
#chmod 700 ~/cron
#cd ~/cron
#创建备份的执行文件
#touch dump
#ee dump
#创建存储备份数据的文件夹,您可以放到ftp可以下载到的地方
#mkdir -p /www/mysql_backup
#修改属性让其他用户无法读取(特别是放到网站目录的时候更应该注意
#chown ftp:ftp /www/mysql_backup
#chmod 0700 /www/mysql_backup

输入下列的代码并按两次a退出:

#!/bin/sh
TODAY=`date +%Y%m%d`
DUMP_DIR="/www/mysql_backup"
SCRIPT="/root/cron/sqldump"
KEEPN="5"
DLOG="/root/cron/dump.log"

if [ -d ${DUMP_DIR} ]; then
    cd ${DUMP_DIR}
    N=`ls -1|grep -e "db[0-9].tar.gz"|wc -l`
    if [ ${N} -gt ${KEEPN} ]; then
          echo [${TODAY}]"Removing Stale MySQL DB Backup...">>${DLOG}
          ls -1 | grep -e "db[0-9].tar.gz"|sort -nr|tail -`expr ${N} - ${KEEPN}` | xargs rm -r
           echo [${TODAY}]"Files Removed">>${DLOG}
    fi
    mkdir -p ${DUMP_DIR}/${TODAY}
    if [ -f ${SCRIPT} ]; then
           cd ${DUMP_DIR}/${TODAY};${SCRIPT}
           cd ..
           tar zcf db${TODAY}.tar.gz ${TODAY}
           rm -rf ${TODAY}
    else
           echo [${TODAY}]"Configuration File ${SCRIPT} does not exist!!">>${DLOG}
           exit 1
   fi
fi

创建备份数据库的执行文件:

#!/bin/sh
DBUSER="ezool.org"
DBPASS="www.ezool.org/cn/net.cn/org.cn/com.cn"
TODAY=`date +%Y%m%d`
DLOG="/root/cron/dump.log"
#如果有多个数据库需要一起备份,只要拷贝以下的代码并修改数据库名称即可
echo [${TODAY}]"Backup db1 MySQL DB">>${DLOG}
/usr/local/bin/mysqldump  --opt -u${DBUSER} -p${DBPASS} db1|gzip > db1_${TODAY}.gz
echo [${TODAY}]"db1 mysql db backup success!">>${DLOG}

请修改上面的数据库用户名和密码,然后保存退出即可。接下来需要给两个文件可执行权限:

#chmod 0700 *

在cron文件中根据需要自己添加定时备份的代码,已周一,周三,周五早上2点自动备份为例:

#ee /etc/crontab
#在文件的最后添加cron执行任务
*     2       *       *       1,3,5       root    /root/cron/dump

至此,数据库备份完成。您可以在cron执行前自己先测试下:

#cd ~/cron
#./dump
#执行完之后切换到刚才备份的文件夹看文件是否存在,如果存在下载下来看格式是否正确
#cd /www/mysql_backup
...

事实上如果有其他的系统,我们可以通过ftp实现自动备份自动传送到远端

联系E族

关闭
  • 即时信息
  • 详细信息

发送