#!/usr/bin/python

#coding=utf-8
import os,io
import hashlib
import string
import sys
#################################
####mysql服务启动################
#################################
def service_start():
 os.system('service mysqld start')
#################################
####mysql状态检查################
#################################
def service_status():
 a=os.popen('service mysqld status|cut -c 10-12').readlines()
 b=os.popen('netstat -aon|grep 3306|cut -c 24-27').readlines()
 #a=os.popen('ls /home').readlines()
 #a=os.listdir('/home')
 if(a[0].strip('\n')=='not'):
#  os.system('service mysql.server start')
  print ('服务未启动')
 else: 
  print ('服务已启动')
 try:
  if(b[0].strip('\n')=='3306'):
   print ('3306端口正常')
  else: 
   print ('3306端口未启动')
 except Exception:
  print ('3306端口未启动')
 d=os.popen('service mysqld status').readlines()
 print (d[0])
###########################
#####选择器################
###########################
def switch(type):
 x = {'1':lambda:service_start(),
      '2':lambda:service_status(),
      '3':lambda:old_md5(),
      '4':lambda:new_md5(),
      '5':lambda:bijiao_md5()}
 return x[type]()
########################################
#旧md5验证##############################
########################################
def calMd5(afile):
   m = hashlib.md5()
   file = io.FileIO(afile,'r')
   bytes = file.read(1024)
   while(bytes != b''):
      m.update(bytes)
      bytes = file.read(1024)
   file.close()
   md5value = m.hexdigest()
   return  md5value
 
def visitor(args, directoryName,filesInDirectory):     # called for each dir 
   #line='%s\n' %(directoryName)
  #myfile.write(line)
   print "\t"*(args-1),directoryName
   for fname in filesInDirectory:
      fpath = os.path.join(directoryName, fname)
      abc="%s\n" %fpath
      myfile.write(abc)
      if not os.path.isdir(fpath):
         print "\t"*args,fname,"\t",calMd5(fpath)
         line="%s\t%s\t\t\t%s\n" %(directoryName,fname,calMd5(fpath))
         myfile.write(line)
def calDirMd5(startdir, level):
   os.path.walk(startdir, visitor, level+1)
def old_md5():
   backup=raw_input("请输入mysql备份路径:")
   global myfile
   myfile=open('/opt/old_md5','w')
   calDirMd5(backup,0)
   myfile.close()
##############################
#########新md5校验############
##############################
def new_md5():
  newbackup=raw_input('请输入mysql备份路径:')
  global myfile1
  myfile1=open('/opt/new_md5','w')
  new_calDirMd5(newbackup,0)
  myfile1.close()
 
def new_visitor(args, directoryName,filesInDirectory):     # called for each dir 
   print "\t"*(args-1),directoryName
   for fname in filesInDirectory:
      fpath = os.path.join(directoryName, fname)
      abc="%s\n" %fpath
      myfile1.write(abc)
      if not os.path.isdir(fpath):
         print "\t"*args,fname,"\t",calMd5(fpath)
         line="%s\t%s\t\t\t%s\n" %(directoryName,fname,calMd5(fpath))
         myfile1.write(line)
def new_calDirMd5(startdir, level):
   os.path.walk(startdir, new_visitor, level+1)
#############################
#####验证一致性##############
#############################
def bijiao_md5():
   a=calMd5('/opt/old_md5')
   b=calMd5('/opt/new_md5')
   if a==b:
    print "数据是一致的"
   else:
    print "数据是不一致的"
if __name__=='__main__':
 shuru=raw_input('请输入数字(如:1,2,3,4): \n 1启动mysql \n 2查看mysql状态 \n 3旧数据一致性计算 \n 4新数据一致性计算 \n 5验证数据是否一致 \n')
 switch(shuru)