1122Shell脚本之利用mysqldump备份MySQL数据库

时间:2023-03-09 00:23:04
1122Shell脚本之利用mysqldump备份MySQL数据库
  1. #!/bin/bash
  2. #Mysql 自动备份 压缩并上传到 指定ftp
  3. #设想每天凌晨3点备份mysql
  4. #编辑crontab配置文件
  5. #00 03 * * * backupmysql.sh
  6. #压缩并以“服务器名+时间 ”命名打包文件
  7. #数据量小的情况下以mail的方式发送到指定邮箱(需要建立sendmail服务)
  8. #数据量大的情况下以ftp的方式传送到指定的ftp服务器(远程ftp需开启)
  9. #linzhanghui.blog.chinaunix.net
  10. #程序部分以伪代码方式存在。
  11. #
  12. #1.设置mysql登陆参数
  13. dbuser=root
  14. dbpassword=123456
  15. dbserver=localhost
  16. dbname=cacti
  17. dbopt=--opt
  18. backupdir=/tmp/dbbackup/
  19. #2.设置ftp具体参数
  20. ftpserver=192.168.137.3
  21. ftpuser=userlin
  22. ftppassword=passwdlin
  23. #3.设置文件备份文件名,备份文件保存天数
  24. fileprefix=lzhserver
  25. dumpfilename=$backupdir$fileprefix`date -d now +%Y%m%d`.sql
  26. newfile=$fileprefix-`date -d now +%Y%m%d`.tar.gz
  27. keepdays=7
  28. #4.写入操作到日志文件(事先需建立)
  29. logfile=/var/log/mysqlbackup.log
  30. logtmp=/var/log/mybackup.tmp
  31. #=====如果没有备份文件夹则建立之======
  32. if [ ! -d "$backupdir" ];
  33. then
  34. echo "无此文件夹,建立中..."
  35. mkdir -p $backupdir
  36. fi
  37. #=====事先删除7天之前的备份数据库文件=====
  38. echo "开始执行备份...">>$logfile
  39. echo "删除保留天数之前的备份文件...">>$logfile
  40. find $backupdir -name $fileprefix* -mtime +$keepdays -fls $logtmp -exec rm {};
  41. echo "删除的备份文件:">>$logfile
  42. cat $logtmp >>$logfile
  43. echo "删除旧备份文件成功!" >>$logfile
  44. #=====备份+打包======
  45. if [ -f $backupdir$newfile ]
  46. then
  47. echo "$newfile 备份文件存在, 备份结束 ...">>$logfile
  48. else
  49. if [ -z $dbpasswd ]
  50. then
  51. mysqldump -u$dbuser -h$dbserver $dbopt $dbname >$dumpfilename
  52. else
  53. mysqldump -u$dbuser -p$dbpasswd -h$dbserver $dbopt $dbname >$dumpfilename
  54. fi
  55. tar czvf $backupdir$newfile $dumpfilename
  56. echo "$backupdir$newfile 备份成功!+“$压缩包容量”">>$logfile
  57. fi
  58. #======以ftp方式发送=====
  59. ftp -i -n <<end_ftp
  60. open $ftpserver
  61. user $ftpuser $ftppassword
  62. lcd $backupdir
  63. hash
  64. prompt
  65. put $newfile
  66. close
  67. bye
  68. end_ftp