全球主机交流论坛

标题: 发个WINDOWS下用Email附件备份数据VBS脚本 [打印本页]

作者: Neta    时间: 2010-10-6 19:42
标题: 发个WINDOWS下用Email附件备份数据VBS脚本
前几天有个哥们Windows下的MYSQL数据库被未知生物袭击了
清空了所有的内容 然后删除了所有的库
用数据恢复软件恢复出来的 都是空表
那哥们可是欲哭无泪啊...

然后就让我帮忙搞个备份功能....
记得论坛里发过一个Linux下用邮箱附件备份数据的软件 就想照这功能写个Win下的
本人不才 没学过VBScript 不当之处 欢迎指出
是先先rar打包 再发送
压缩包里的rar.exe 可以在您的WinRAR根目录里找到.. 当前貌似3.93版
  1. '-----------------------------------------------------------------------------------

  2. '应用程序配置项↓

  3. '-----------------------------------------------------------------------------------

  4. '数据库目录 (目录均以"" 结尾)
  5. Const MySqlDataDir = "C:\Users\Neta\Desktop\Data"
  6. '备份数据库目录
  7. Const MySqlBackupDir = "C:\Users\Neta\Desktop"
  8. 'RAR压缩程序文件路径
  9. Const RarExePath = "rar.exe"
  10. '发件邮箱
  11. Const EmailFrom = "[email protected]"
  12. '收件邮箱 推荐网易邮箱
  13. Const EmailTo = "[email protected]"
  14. 'SMTP地址
  15. Const SmtpServer = "smtp.qq.com"
  16. 'SMTP端口
  17. Const SmtpServerPort = 25
  18. 'SMTP发信登陆帐号
  19. Const SendUserName = "[email protected]"
  20. 'SMTP发信登陆密码
  21. Const SendPassWord = "password"
  22. '发送完毕是否删除备份数据文件 true | false
  23. Const DeleteFile = true
  24. '单个附件大小 单位为MB
  25. Const AttachmentSize = 30

  26. '---------------------------------------------------------------------------------------
  27. '其他说明: 当执行RAR压缩的时候 会出现一个命令行窗口 显示压缩过程 请勿关闭!
  28. '---------------------------------------------------------------------------------------
  29. backupDateTime = now()
  30. backupFileName = GetName(backupDateTime)


  31. attach = MySqlBackupDir & backupFileName & ".rar"

  32. '开始备份
  33. Set WshShell = CreateObject("WScript.Shell")
  34. Set fso = CreateObject("Scripting.FileSystemObject")
  35. WshShell.run RarExePath & " a -ibck " & attach & " " & MySqlDataDir,,true

  36. Set backupFile = fso.GetFile(attach)

  37. '判断附件大小 如果超过AttachmentSize  则进行分卷打包
  38. IF backupFile.Size > AttachmentSize * 1024 * 1024 Then

  39.   '计算分卷打包文件个数
  40.   TotalFile = GetInteger(backupFile.Size / (AttachmentSize * 1024 * 1024))
  41.   
  42.   '重新取得文件打包时间
  43.   backupDateTime = now()
  44.   backupFileName = GetName(backupDateTime)
  45.   
  46.   '开始分卷打包
  47.   WshShell.run RarExePath & " a -v" & AttachmentSize & "m -ibck " & MySqlBackupDir & backupFileName & " " & attach,,true
  48.   
  49.   '删除初次打包的文件
  50.   Call DelFile(attach)
  51.   
  52.   '发送分卷
  53.   For P = 1 To TotalFile
  54.     attach = MySqlBackupDir & backupFileName & ".part" & P & ".rar"
  55.     Call SendMail(attach,backupDateTime)
  56.   Next
  57.   
  58. Else
  59.   Call SendMail(attach,backupDateTime)
  60. End IF


  61. Set WshShell = Nothing
  62. Set fso = Nothing

  63. Function GetName(time)
  64.         GetName = Replace(Replace(Replace(time, "/", "-"), " ", "-"), ":", "-")
  65. End Function

  66. Function GetInteger(number)
  67.         GetInteger = int(number)
  68.         IF GetInteger < number Then
  69.                 GetInteger = GetInteger + 1
  70.         End IF
  71. End Function

  72. Sub DelFile(path)
  73.         IF deleteFile Then
  74.           fso.DeleteFile(path)
  75.         End IF
  76. End Sub

  77. Sub SendMail(file,time)
  78.         NameSpace = "http://schemas.microsoft.com/cdo/configuration/"
  79.         set Email = CreateObject("CDO.Message")

  80.         Email.From = EmailFrom
  81.         Email.To = EmailTo
  82.         Email.Subject = "MYSQL BACKUP : " & time

  83.         Email.Textbody = "这个是数据库备份文件,备份于: " & time
  84.         Email.AddAttachment file

  85.         With Email.Configuration.Fields
  86.           .Item(NameSpace&"sendusing") = 2
  87.           .Item(NameSpace&"smtpserver") = SmtpServer
  88.           .Item(NameSpace&"smtpserverport") = SmtpServerPort
  89.           .Item(NameSpace&"smtpauthenticate") = 1
  90.           .Item(NameSpace&"sendusername") = SendUserName
  91.           .Item(NameSpace&"sendpassword") = SendPassWord
  92.           .Update
  93.         End With

  94.         Email.Send
  95.         Set Email = Nothing
  96.        
  97.         Call DelFile(file)
  98. End Sub
复制代码

[ 本帖最后由 Neta 于 2010-10-6 19:44 编辑 ]
作者: usa    时间: 2010-10-6 19:44
不错。。。
作者: Neta    时间: 2010-10-6 19:45
  usa 真是极速 我还没编辑完沙发就没了...
作者: sunday    时间: 2010-10-6 19:47
好帖还是要支持支持
作者: drivel    时间: 2010-10-6 19:53
支持一下
作者: jimmy0017    时间: 2010-10-6 20:37
支持一下!
作者: press    时间: 2010-10-6 20:39
不错。收藏一个!
作者: 小夜    时间: 2010-10-6 20:51
好贴,要给分。
作者: Captain    时间: 2010-10-7 16:13
WScript.Shell
必须开着,有一定安全风险
作者: zrdlrofmine    时间: 2010-10-7 16:23
支持
作者: zyypp    时间: 2010-10-7 18:37
好东西收藏了

不过在win下如果bat能解决的我更喜欢用bat
嘿嘿
作者: Neta    时间: 2010-10-7 21:44
原帖由 zyypp 于 2010-10-7 18:37 发表
好东西收藏了

不过在win下如果bat能解决的我更喜欢用bat
嘿嘿


我当时也想用bat 但是发现发信这块VBS可以直接使用CDO.Message 省去了很多麻烦

Captain 说的WScript.Shell 的确是个问题
当时想用bat处理压缩这段 但是他那没禁用Script.Shell 我就直接调用了
作者: zyypp    时间: 2010-10-7 22:43
额 bat 确实发信这块没法简单实现
不过可以改为ftp上传 嘿嘿

WScript.Shell 这个确实有一定的安全风险
不过现在一般的win主机做php服务器时貌似没多少人会勤快的禁用吧




欢迎光临 全球主机交流论坛 (https://www.91ai.net/) Powered by Discuz! X3.4