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

原址:http://zhengdl126.iteye.com/blog/1456414

  1. #!/bin/bash  
  2.     #Shell Command For Backup MySQL Database Everyday Automatically By Crontab  
  3.     #Author : Carlos Wong  
  4.     #Date : 2010-08-24  
  5.   
  6.     #配置参数  
  7.     USER=root #数据库用户名" >用户名  
  8.     PASSWORD=××××× #数据库用户密码  
  9.     DATABASE=TIENIUZAI    #数据库名称  
  10.     [email protected] #管理员邮箱地址,用以发送备份失败消息提醒  
  11.     BACKUP_DIR=/var/www/Data_Backup/topons/ #备份文件存储路径  
  12.     LOGFILE=/var/www/Data_Backup/topons/data_backup.log #日记文件路径  
  13.     DATE=`date ‘+%Y%m%d-%H%M’` #日期格式(作为文件名)  
  14.     DUMPFILE=$DATE.sql #备份文件名  
  15.     ARCHIVE=$DATE.sql.tgz #压缩文件名  
  16.     OPTIONS=”-u$USER -p$PASSWORD –opt –extended-insert=false –triggers=false -R –hex-blob –flush-logs –delete-master-logs -B $DATABASE”  #mysqldump 参数 详情见帮助 mysqldump -help  
  17.   
  18.     #判断备份文件存储目录是否存在,否则创建该目录  
  19.     if [ ! -d $BACKUP_DIR ] ;  
  20.     then  
  21.     mkdir -p “$BACKUP_DIR”  
  22.     fi  
  23.   
  24.     #开始备份之前,将备份信息头写入日记文件  
  25.     echo ” ” >> $LOGFILE  
  26.     echo ” ” >> $LOGFILE  
  27.     echo “———————————————–” >> $LOGFILE  
  28.     echo “BACKUP DATE:” $(date +”%y-%m-%d %H:%M:%S”) >> $LOGFILE  
  29.     echo “———————————————– ” >> $LOGFILE  
  30.   
  31.     #切换至备份目录  
  32.     cd $BACKUP_DIR  
  33.     #使用mysqldump 命令备份制定数据库,并以格式化的时间戳命名备份文件  
  34.     mysqldump $OPTIONS > $DUMPFILE  
  35.     #判断数据库备份是否成功  
  36.     if [[ $? == 0 ]]; then  
  37.     #创建备份文件的压缩包  
  38.     tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1  
  39.     #输入备份成功的消息到日记文件  
  40.     echo “[$ARCHIVE] Backup Successful!” >> $LOGFILE  
  41.     #删除原始备份文件,只需保 留数据库备份文件的压缩包即可  
  42.     rm -f $DUMPFILE  
  43.     else  
  44.     echo “Database Backup Fail!” >> $LOGFILE  
  45.   
  46.     #备份失败后向网站管理者发送邮件提醒,需要mailutils或者类似终端下发送邮件工具的支持  
  47.     #mail -s “Database:$DATABASE Daily Backup Fail” $WEBMASTER  
  48.     fi  
  49.     #输出备份过程结束的提醒消息  
  50.     echo “Backup Process Done”  
  51.   
  52. 使用:  
  53.   
  54.     将以上代码保存到: /usr/sbin/DataBackup     (文件名随意,只要不跟系统原有的命令同名即可;代码可以放到任何地方,放在sbin目录下只是为了方便执行,sbin目录下的文件/目录可在终端直接调 用,类似于windows下PATH变量指定的目录)  
  55.     为脚本添加可执行权限:  sudo chmod +x  /usr/sbin/DataBackup  
  56.     执行脚本: sudo  DataBackup  
  57.     如果需要定时执行备份命令的,只需将下面这段代码放到crontab 文件(sudo vim /etc/crontab)中去就可以了:  
  58.   
  59.     01 3 * * * root /usr/sbin/DataBackup    #它代表着将于每天3点执行DataBackup脚本  
  60.   
  61. 小注意一下下:  
  62.   
  63.     linux 下的shell脚本定义变量的格式为:  key=value  ,注意他们两者之间的” = “前后不能出现空格,否则系统无法确认该变量。  
  64.     用红色标注的那行,第一个类似单引号的字符”`”其实不是单引号,它的输入键在键盘ESC键下方。  
  65.     这个脚本只适合用于一些小站点的备份,因为它是对数据库进行全部备份而不是增量备份,不适合大容量的数据库备份。  
  66.   
  67. Update:  
  68.   
  69. 2010-08-24  :  由于服务器上的MySQL配置文件里 的socket项值为 “/tmp/mysql.sock”, 而mysqldump在链接mysql server的时候会去查找位于/var/lib/mysql/目录下的mysql.sock文件。如果没有则会报错:  
  70.   
  71.     mysqldump: Got error: 2002: Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’  
  72.   
  73. 解决方法是:一是,修改mysql配置文件里的socket项的值为  ’/var/lib/mysql/mysql.sock’,不过这种方法需要重启mysql服务,很不厚道。  
  74.   
  75. 二是,为/tmp/mysql.sock创建一个软链接到/var/lib/mysql/mysql.sock:  
  76.   
  77.     ln  -s  /tmp/mysql.sock   /var/lib/mysql/mysql.sock  

你可能感兴趣的:(数据库,mysql,shell,脚本,archive,邮件工具)