Python 数据库备份脚本(邮件通知)

释放双眼,带上耳机,听听看~!

今天用Python写了一个数据库备份脚本,备份失败会用邮件的形式通知系统管理员,感觉还行,先凑和着用:

  1. #!/usr/bin/python

 

  1. #coding:utf-8

 

  1.  
  2. import

 subprocess 

  1. import

 time 

  1. import

 os 

  1. import

 sys 

  1. import

 sendEmail 

  1. import

 getip 

  1.  
  2. mail_to_list = [

'lihuipeng007@51cto.com'
,] 

  1.  
  2. def

 backup(user=
'root'
, password=
'123456'
, host=
'localhost'
, dbname=
'mysql'
): 

  1.     start_time = time.clock() 
  2.     ip = getip.get_ip_address(

'eth0'

  1.     today = time.strftime(

"%Y%m%d"
, time.localtime()) 

  1.     backup_dir = 

'/data/dbbackup/%s'
 % today 

  1.     

if
 
not
 os.path.isdir(backup_dir): 

  1.         os.makedirs(backup_dir) 
  2.     os.chdir(backup_dir) 
  3.     cmd = 

"/usr/local/mysql/bin/mysqldump –opt -u%s -p%s -h%s %s | gzip > %s-%s-%s.sql.gz"
 \ 

  1.                 % (user,password,host,dbname,today,ip,dbname) 
  2.     result = subprocess.Popen(cmd, shell=

True
,stdout=subprocess.PIPE,stderr=subprocess.STDOUT) 

  1.     content = result.stdout.read() 
  2.     

if
 content: 

  1.         

print
 
"Dump error at %s"
 % content 

  1.         subject = 

"%s – %s backup error"
 % (ip,dbname) 

  1.         sendEmail.send_mail(mail_to_list,subject,content) 
  2.     end_time = time.clock() 
  3.     use_time = end_time – start_time 
  4.     

print
 
"backup use: %s"
 % use_time 

  1.      
  2. def

 help(): 

  1.     

print
 
''
'''Usage: %s dbname'''
  % sys.argv[
0

  1.     sys.exit(

1

  1.          
  2. if

 name == 
"main"

  1.     

if
 len(sys.argv) != 
2

  1.         help() 
  2.     backup(dbname=sys.argv[

1
]) 

发送邮件的PY接口:

sendEmail.py

  1. #!/usr/bin/python

 

  1. #coding:utf-8

 

  1.  
  2. import

 smtplib 

  1. from

 email.mime.text 
import
 MIMEText 

  1.  
  2. mail_to_list = [

'lihuipeng007@51cto.com'
,] 

  1. mail_host = 

'smtp.163.com'
 

  1. mail_user = 

'lihuipeng007'
 

  1. mail_pass = 

'xxxxxxx'
 

  1. mail_postfix = 

'163.com'
 

  1.  
  2. def

 send_mail(to_list,subject,content): 

  1.     me = mail_user+

"<"
+mail_user+
"@"
+mail_postfix+
">"
 

  1.     msg = MIMEText(content) 
  2.     msg[

'Subject'
] = subject 

  1.     msg[

'From'
] = me 

  1.     msg[

'to'
] = 
";"
.join(mail_to_list) 

  1.      
  2.     

try

  1.         s = smtplib.SMTP() 
  2.         s.connect(mail_host) 
  3.         s.login(mail_user,mail_pass) 
  4.         s.sendmail(me,to_list,msg.as_string()) 
  5.         s.close() 
  6.         

return
 
True
 

  1.     

except
 Exception,e: 

  1.         

print
 str(e) 

  1.         

return
 
False
 

  1.      
  2. if

 name == 
"main"

  1.     

if
 send_mail(mail_to_list, 
'Test for python_mail'

"aaaaaaaaaaaaaaa"
): 

  1.         

print
 
"send success!"
 

  1.     

else

  1.         

print
 
"send fail!"
  

获取本机IP地址的PY接口:

getip.py

  1. #!/usr/bin/python

 

  1. #coding:utf-8

 

  1.  
  2. import

 socket 

  1. import

 fcntl 

  1. import

 struct 

  1. def

 get_ip_address(ifname): 

  1.     s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
  2.     

return
 socket.inet_ntoa(fcntl.ioctl( 

  1.         s.fileno(), 
  2.         

0x8915
,  
# SIOCGIFADDR
 

  1.         struct.pack(

'256s'
, ifname[:
15
]) 

  1.     )[

20
:
24
]) 

  1.      
  2. if

 name == 
"main"

  1.     

print
 get_ip_address(
'eth0'

  1.     

print
 get_ip_address(
'lo'

参考博文:

http://www.cnblogs.com/gudai/archive/2008/12/17/1356723.html

http://www.juyimeng.com/simple-python-send-mail-sample-code-with-smtp-auth.html

本文转自运维笔记博客51CTO博客,原文链接http://blog.51cto.com/lihuipeng/1059805如需转载请自行联系原作者

lihuipeng

给TA打赏
共{{data.count}}人
人已打赏
安全技术

c++ vector

2022-1-11 12:36:11

安全经验

Jenkins高级篇之Pipeline技巧篇-5-pipeline中如何代码串联多个job的执行

2021-10-11 16:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索