python备份mysql


#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import datetime
import glob
import time
import zipfile
import urllib
import re
import shutil
import subprocess
import sys
import commands

# by evan this one is good
#定义系统日志

def syslog(message=''):
systemlog=open(bak_log,'a')
systemlog.write(message+'\n')
systemlog.close()

def get_ip():
try:
url = "http://pv.sohu.com/cityjson"
#http://www.whereismyip.com
#http://www.ip138.com/ip2city.asp
request = urllib.urlopen(url).read()
myip = re.findall(r"\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}",request)
return myip[0]
except:
myip = u"获取不到外网IP,请重新运行脚本"
return myip
exit(1)

def zip_files(zip_src,zip_dest):
f = zipfile.ZipFile(zip_dest, 'w' ,zipfile.ZIP_DEFLATED)
f.write(zip_src)
f.close()

def zip_dir(dirname,zipfilename):
filelist = []
if os.path.isfile(dirname):
filelist.append(dirname)
else :
for root, dirs, files in os.walk(dirname):
for name in files:
filelist.append(os.path.join(root, name))

zf = zipfile.ZipFile(zipfilename, "w", zipfile.zlib.DEFLATED)
for tar in filelist:
arcname = tar[len(dirname):]
#print arcname
zf.write(tar,arcname)
zf.close()

def get_spid():
spid = []
zones = []
if games:
#spid = games[0].split("_")[1]
VSPDef = r"%s\data\VSPDef.txt" % games[0]
with open(VSPDef,"r") as f:
for line in f.readlines():
if "SPID =" in line:
spid = line.split("=")[-1].strip()
for zone in games:
zones.append(zone.split("\\")[-1].split("_")[-1])
else:
print u"空服务器"
exit(1)
return spid,zones

# 本机备份保留7天数据
def delOldBak(beforeTime, path = "."):
for root, dirs, files in os.walk(path):
for name in files:
f = os.path.join(root, name)
lastMTime = os.stat(f).st_mtime
if lastMTime <= beforeTime: try: if os.path.isfile(f): os.remove(f) elif os.path.isdir(f): shutil.rmtree(f) else: os.remove(f) print u"删除 {0}, 成功!".format(f) syslog("[%s]: 删除 [%s] 成功!: " % (timestat2,f)) except Exception as e: print u"删除 {0}, 失败! 错误如下:".format(f) syslog("[%s]: 删除 [%s] 失败!: " % (timestat2,f)) print e if __name__=="__main__": # 解决编码问题 #reload(sys) #sys.setdefaultencoding('utf-8') #获取本机公网ip ExtranetIP = get_ip() # 定义 timestat2 = time.strftime("%Y%m%d-%H%M%S", time.localtime()) bak_path = 'D:/gamebackup1' bakunix_path = '/cygdrive/d/gamebackup1/*' bak_log = "%s/backup.log" % bak_path games_path = 'D:/games' games = glob.glob(r"%s/*" % games_path) # 保留 7天数据 currTime = time.time() deltTime = 3600*24*7 # 获取spid spid,zones = get_spid() print spid,zones db_host="192.168.1.200" db_user="root" db_passwd="123456" db_charset="utf8" actor = "t_actor" ''' Host = "127.0.0.1", Port = 3306, DBName = "t1_actor", DBUser = "cqmaster", DBPass = "yFk1L/lNIiul9YDvcD8P6g==", ''' bak_host = { "hostname":'59.38.194.114', # 备份机器 "username":'root', # 账号 "password":'test', # 密码 "port":16247 # 端口 } #清理本地文件 #清理老文件 delOldBak(currTime - deltTime,bak_path) print u"[%s]: 备份的数据库和runtime列表:%s" % (timestat2,zones) syslog("[%s]: 备份的数据库和runtime列表:%s" % (timestat2,zones)) for zone in zones: #备份runtime #创建zip runtime_backup_name = bak_path+'/'+spid+'_runtime_'+ExtranetIP+'_'+zone+'_'+timestat2+".zip" print runtime_backup_name zip_dir(games_path+'/'+zone,runtime_backup_name) #备份mysql db_backup_name = bak_path+'/'+spid+'sql_'+ExtranetIP+'_'+zone+'_'+timestat2+".sql" print db_backup_name try: mysqldump = r"mysqldump.exe" rundump = "mysqldump.exe -a --add-locks -C -c -x -R -h%s -u%s -p%s %s%s --default_character-set=%s > %s" %(db_host, db_user, db_passwd, actor, zone[1:], db_charset, db_backup_name)
os.system(rundump)
print(rundump)
except Exception,e:
print u"[%s]: mysqldump数据库失败:%s%s" % (timestat2,actor,zone),e
#syslog("[%s]: mysqldump数据库失败:%s%s" % (timestat2,actor,z))

'''
#同步rsync文件到备份服
print u"[%s]: rsync同步数据到备份服务器:[%s]" % (timestat2,bak_host['hostname'])
syslog("[%s]: rsync同步数据到备份服务器:[%s]" % (timestat2,bak_host['hostname']))
rsync_bin = r"D:/cqAdmin/cwRsync_5.5.0/bin/rsync.exe"
rsync_option = r"-vzrtopgu --ignore-existing --progress --port="+str(bak_host['port'])+" "+bakunix_path+" root@%s::gamebackup" % bak_host['hostname']
print rsync_option
if os.path.exists(rsync_bin):
try:
rsync = os.popen("\"%s\" %s" % (rsync_bin,rsync_option))
output = rsync.read()
rsync_error = []
for num in zones:
runtime_backup_name = spid+'_runtime_'+ExtranetIP+'_'+z
if output.find(runtime_backup_name) == -1:
rsync_error.append(runtime_backup_name)
if len(rsync_error) == 0:
print u"[%s]: rsync 备份数据同步成功" % timestat2
syslog("[%s]: rsync 备份数据同步成功" % timestat2)
else:
print u"[%s]: rsync 备份数据同步失败:%s" % (timestat2,rsync_error)
syslog("[%s]: rsync 备份数据同步失败:%s" % (timestat2,rsync_error))
#判断是否成功
except:
print u"[%s]: rsync 同步执行异常" % timestat2
syslog("[%s]: rsync 同步执行异常" % timestat2)
else:
print u" rsync 客户端未安装,rsync同步失败"
syslog(" rsync 客户端未安装,rsync同步失败")
'''

python异常处理举例

# -*- coding: utf-8 -*-

import sys ,os
db_host="192.168.1.200"
db_user="root"
db_passwd="123456"
db_charset="utf8"
actor = "eva"
zone="t5"

db_backup_name = "my.sql"
#print db_backup_name
try:
mysqldump = r"mysqldump.exe"
os.system(mysqldump+" -a --add-locks -C -c -x -R -h%s -u%s -p%s %s%s --default_character-set=%s > %s" %(db_host, db_user, db_passwd, actor, zone, db_charset, db_backup_name))
except Exception,e:
print u" mysqldump数据库失败:",e

http://www.cnblogs.com/dkblog/archive/2011/06/24/2089026.html

好用的Windows远程桌面客户端

mRemote 我的最爱

它具有如下几个功能:
1.摆脱了mstsc那种一个程序一个界面的模式,采用了左边树+右边Tab页的显示形式,让你在一个mRemote界面中,可以连接多个远程桌面,再也不用为切来切去而烦恼了(如上图)。
2.引入了继承和分类的概念。你可以在左边的树中自定义分类目录且下级目录可选是否继承上级目录的配置(连接用户名,密码等)。如上图。
3.配置方便。mRemote采用xml来保存用户的配置信息。这样用户可以方便的存储多个远程桌面集合文件,且分发导入都十分方便。这里值得一提的是,mRemote在xml中把用户密码进行了加密,防止明文密码出现在文本配置文件中。
4.支持多种访问模式。RDP,VNC,SSH1,SSH2,Telnet,Rlogin,RAW,HTTP,HTTPS,ICA.
5.附带多种实用小工具。SSH文件传输,端口扫描,外部应用等。
6.开源软件。mRemote有GPL版本,大家可以放心使用。

PS: WINDOWS 下推荐使用COPSSH

freesshd也不错,但是中文显示乱码。

推荐三个Windows远程桌面客户端,mRemote、TSMMC.MSC、Terminals

10 款最好的远程桌面软件

Windows下连接Linux的ssh工具有哪些

putty
  Putty是最有名的SSH和telnet客户端,由Simon Tatham为Windows平台开发。Putty是一款开源软件,提供可用的源代码并有一批志愿者进行开发和支持。
  Putty易于安装和使用,通常大部分的配置选项不需要修改。用户只需要输入少量基本的参数,就可以开始很简单地建立连接会话。

Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。
Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的

Bitvise SSH Client
  Bitvise SSH是一款支持SSH和SFTP的Windows客户端。由Bitvise开发和提供专业支持。这款软件工具性能突出,易于安装、便于使用。Bitvise SSH客户端拥有功能丰富的图形界面,通过自动重连功能的内置代理进行动态端口转发。
  Bitvise SSH客户端对个人用户使用是免费的,同时对于在内部的个人商业使用同样免费

MobaXterm
  MobaXterm是远程计算的终极工具箱。在 单独一个Windows应用里,MobaXterm为程序员、网站管理员、IT管理员及其它用户提供了远程操作一揽子功能。
  另 外,MobaXterm提供了所有重要的远程网络工具(如SSH、X11、RDP、VNC、FTP、MOSH等),以及Windows 桌面上的Unix命令(bash、ls、cat、sed、grep、awk、rsync等),这些均是由一个开箱即用的单一的便携可执行文件提供,并对个 人使用免费。
http://mobaxterm.mobatek.net/download-home-edition.html
MobaXterm:“十项全能”的远程终端登录软件 【开源硬件佳软介绍 #1】

  DameWare SSH
  DameWare SSH是最好的免费SSH客户端。该免费工具是一个终端模拟器,可以从一个易用的控制台建立多个telnet和SSH连接。将常用的会话保存在 Windows 文件系统中使用多套保存的证书来轻松登录不同的设备,使用telnet、SSH1和SSH2协议连接计算机和设备。

  SmarTTY
  SmarTTY是一款免费的多标签SSH客户端,支持使用SCP命令随时复制文件和目录。
  SSH服务器每个连接支持最多10个子会话.SmarTTY在做得最好:没有多个窗口,不需要重新登录,仅打开一个新的标签页就可以。

Cygwin
  Cygwin 是一款GNU和开源工具的集合,提供类似一个Windows平台下Linux的功能。
  Cygwin 包括一个称为模拟库的Unix系统:cygwin.dll,集成大量GNU和其它免费软件。在安装包中,有高质量的编译器和其他软件开发工具、一个X11 服务器、一套完整的X11开发套件、GNU emacs编辑器、Tex和LaTeX、openSSH(客户端和服务器),此外还包括在Windows下需要编译和使用PhysioToolkit软件 的所有。

FileZilla Could not load TLS libraries.

用FileZilla来快速搭建,但安装好以后报错,提示:Could not load TLS libraries. Aborting start of administration interface
查了一下是windows KB 2533623未安装的原因,果断换了个旧版的FileZilla 就好了