如何用python实现多台mysqlserver的远程备份

Python011

如何用python实现多台mysqlserver的远程备份,第1张

我把多台mysqlserver按照 ip:usrname:pass:port:hostname 的格式写到host.list文件中。

用bash shell写了一个脚本,可以实现在linux服务器来备份远程mysqlserver。但是由于mysqlserver数量多,库大,导致备份时间特别长。所以问一下用python能不能呢个高效的实现这个需求。我的脚本如下:

#!/bin/bashmysqldump=`which mysqldump`for i in `cat host.list`doip=$(echo "$i"|cut -f1 -d":")

uname=$(echo "$i"|cut -f2 -d":")

passwd=$(echo "$i"|cut -f3 -d":")

port=$(echo "$i"|cut -f4 -d":")

server=$(echo "$i"|cut -f5 -d":")$mysqldump -h$ip -u$uname -p$passwd -P$port DBname | /bin/gzip >"$server-DBname-`date +%F\-%T`.sql.gz"done

       在实现iOS项目的自动打包工程中,我们需要配置好工程的证书文件信息,为了能够自动的根据bundle id来设置不同的profile文件,我们可以通过脚本文件来修改工程的projext.pbxproj文件帮助我们进行自动设置。

1. Project.pbxproj

Xcode项目中的xxx.xcodeproj其实是一个文件夹,右键单击xxx.xcodeproj,显示包内容:

Project.pbxproj的解析

关于这个配置文件的结构,请参考 project.pbxproj,最熟悉的”陌生人 (http://www.olinone.com/?p=215),解析该文件可以使用现有的解析工具mod-pbxproj,该工具是一个python的脚本。其github地址为: https://github.com/kronenthaler/mod-pbxproj 。

为了修改不同taget的profile,我们需要知道这些配置在文件中的具体位置,不难发现:

我们的目标是为不同的bundle id设置不同的profile,所以只需要找到不同target的XCBuildConfiguration,修改其中PROVISIONING_PROFILE的值即可。通过分析project.pbxproj文件结构,你会发现其找到这些target的buildSettings的路径如下:

rootObject=>PBXNativeTarget=>XCConfigurationList=>XCBuildConfiguration。

XCBuildConfiguration会有Debug和Release两个版本,这里我们以修改Release版本的为例进行说明。

2. Python脚本修改profile

需要在工程目录下配置如下脚本文件,通过从json文件中读取配置信息,然后根据不同的bundle id来设置不同的profile文件和其他字段信息。其中xcode_configurator_profile.py为修改profile的脚本文件,profile.json为配置的证书信息。demo如下图所示:

首先在profile.json文件中配置好bundle id和对应的profile文件,如下如所示:

然后在工程目录下执行xcode_configurator_profile.py:

检查profile修改结果:

如果设置了以后有任何问题, 你可以在对应的xxx.xcodeproject下找到对应的备份。

#!/usr/bin/python

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

#Filename: auto_bak.py

#Author: zz

import os

import sys

def get_dir(path):

print path, '\n'

return os.listdir(path)

def bak_file(path,path_bak):

list = os.listdir(path)

for l in list:

file_path = os.path.join(path, l)

file_path_bak = os.path.join(path_bak, l)

print file_path

#如果文件路径为目录

if os.path.isdir(file_path):

#如果在备份目录中文件夹不存在则创建

if not os.path.isdir(file_path_bak):

create_com = '''mkdir -p '%s' ''' \

% (file_path_bak)

if os.system(create_com) == 0:

print create_com

else:

print 'create folder failure!'

os._exit(0)

bak_file(file_path, file_path_bak)

else:

#如果文件已经存在,则比较文件修改时间

if os.path.isfile(file_path_bak):

stat_bak= os.stat(file_path_bak)

stat_source = os.stat(file_path)

#判断文件修改时间

if stat_source.st_mtime <= stat_bak.st_mtime:

continue

cp_com = '''cp '%s' '%s' ''' \

% (file_path, file_path_bak)

if os.system(cp_com) == 0:

print cp_com

else:

print 'create folder failure!'

os._exit(0)

#要备份的文件目录

path = '/home/zyf/appspot/auto_bak/a'

#备份文件目录

path_bak = '/home/zyf/appspot/auto_bak/bak'

#开始备份

bak_file(path, path_bak)