IT你好技术论坛

标题: Linux下定时备份MySQL数据库的Shell脚本 [打印本页]

作者: xiaowuhello    时间: 2011-6-4 12:40     标题: Linux下定时备份MySQL数据库的Shell脚本

对任何一个已经上线的网站站点来说,数据备份都是必须的。无论版本更新还是服务器迁移,备份数据的重要性不言而喻。人工备份数据的方式不单耗费大量时间和精力,还灰常不专业的说。于是,有了下面这段脚本的出现。参考了网上的很多教程,外加自己的测试,以下脚本经测试可用。


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




欢迎光临 IT你好技术论坛 (http://it.o-o.zone/) Powered by Discuz! X1