当前位置:首页 > Mysql教程 > 列表

linux中shell脚本进行MySQL数据库定时备份

发布:smiling 来源: PHP粉丝网  添加日期:2014-10-09 14:15:12 浏览: 评论:0 

数据库备份有很多种方法,最常用的一般是数据库自动定时备份了,下面我来介绍在linux中利用shell脚本进行MySQL数据库定时备份方法.

具体方法,代码如下:

  1. #!/bin/bash 
  2. #Shell Command For Backup MySQL Database Everyday Automatically By Crontab 
  3. #Author : Carlos Wong 
  4. #Date : 2010-08-24 

配置参数,代码如下:

  1. USER=root #数据库用户名" >用户名 
  2. PASSWORD=××××× #数据库用户密码 
  3. DATABASE=TIENIUZAI    #数据库名称 
  4. WEBMASTER=tieniuzai@qq.com #管理员邮箱地址,用以发送备份失败消息提醒 
  5. BACKUP_DIR=/var/www/Data_Backup/topons/ #备份文件存储路径 
  6. LOGFILE=/var/www/Data_Backup/topons/data_backup.log #日记文件路径 
  7. DATE=`date ‘+%Y%m%d-%H%M’` #日期格式(作为文件名) 
  8. DUMPFILE=$DATE.sql #备份文件名 
  9. ARCHIVE=$DATE.sql.tgz #压缩文件名 
  10. OPTIONS=”-u$USER -p$PASSWORD –opt –extended-insert=false –triggers=false -R –hex-blob –flush-logs –delete-master-logs -B $DATABASE”  #mysqldump 参数 详情见帮助 mysqldump -help  

判断备份文件存储目录是否存在,否则创建该目录,代码如下:

  1. if [ ! -d $BACKUP_DIR ] ; 
  2. then 
  3. mkdir -p “$BACKUP_DIR” 
  4. fi 

开始备份之前,将备份信息头写入日记文件,代码如下:

  1. echo ” ” >> $LOGFILE 
  2. echo ” ” >> $LOGFILE 
  3. echo “———————————————–” >> $LOGFILE 
  4. echo “BACKUP DATE:” $(date +”%y-%m-%d %H:%M:%S”) >> $LOGFILE 
  5. echo “———————————————– ” >> $LOGFILE  

切换至备份目录,代码如下:

cd $BACKUP_DIR

使用mysqldump 命令备份制定数据库,并以格式化的时间戳命名备份文件,代码如下:

mysqldump $OPTIONS > $DUMPFILE

判断数据库备份是否成功,代码如下:if [[ $? == 0 ]]; then

创建备份文件的压缩包,代码如下:

tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1

输入备份成功的消息到日记文件,代码如下:

echo “[$ARCHIVE] Backup Successful!” >> $LOGFILE

删除原始备份文件,只需保 留数据库备份文件的压缩包即可,代码如下:

  1. rm -f $DUMPFILE 
  2. else 
  3. echo “Database Backup Fail!” >> $LOGFILE 

备份失败后向网站管理者发送邮件提醒,需要mailutils或者类似终端下发送邮件工具的支持,代码如下:

#mail -s “Database:$DATABASE Daily Backup Fail” $WEBMASTER

fi

输出备份过程结束的提醒消息,代码如下:echo “Backup Process Done” 

使用:

01.将以上代码保存到: /usr/sbin/DataBackup     (文件名随意,只要不跟系统原有的命令同名即可;代码可以放到任何地方,放在sbin目录下只是为了方便执行,sbin目录下的文件/目录可在终端直接调 用,类似于windows下PATH变量指定的目录)

02.为脚本添加可执行权限:sudo chmod +x  /usr/sbin/DataBackup

03.执行脚本: sudo  DataBackup

04.如果需要定时执行备份命令的,只需将下面这段代码放到crontab 文件)sudo vim /etc/crontab)中去就可以了:

01 3 * * * root /usr/sbin/DataBackup #它代表着将于每天3点执行DataBackup脚本

小注意一下下:

01.linux 下的shell脚本定义变量的格式为:key=value,注意他们两者之间的” = “前后不能出现空格,否则系统无法确认该变量.

02.用红色标注的那行,第一个类似单引号的字符”`”其实不是单引号,它的输入键在键盘ESC键下方.

03.这个脚本只适合用于一些小站点的备份,因为它是对数据库进行全部备份而不是增量备份,不适合大容量的数据库备份.

Update:由于服务器上的MySQL配置文件里 的socket项值为 “/tmp/mysql.sock”,而mysqldump在链接mysql server的时候会去查找位于/var/lib/mysql/目录下的mysql.sock文件,如果没有则会报错:

  1. mysqldump: Got error: 2002: Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ 

解决方法是:

一是,修改mysql配置文件里的socket项的值为’/var/lib/mysql/mysql.sock’,不过这种方法需要重启mysql服务,很不厚道.

二是,为/tmp/mysql.sock创建一个软链接到/var/lib/mysql/mysql.sock:ln  -s  /tmp/mysql.sock   /var/lib/mysql/mysql.sock

Tags: shell脚本备份 MySQL定时备份

分享到: