前几天我的Linux VPS出了问题(一个挂载点变成只读的了,无法修改权限,不能写入、删除,让机房技术处理,结果被告知重启后系统挂了。至今我还没弄清到底是怎么回事。),机房的技术告知只能重做系统了,而且数据无法恢复了,无语啊。
后来重装系统竟然花了3天时间,再次对四博互联无语。
四博互联的VPS稳定性实在不行,几乎每个月都要出一次问题,比linode.com的云VPS差太远了,linode.com用了也快一年了,几乎没出过问题。
之前幸好数据做了备份,不然就真的彻底杯具了。
下面分享一下我的备份脚本:
该脚本采用Python编写(Linux自带Python解释器),支持将数据库和本地文件打包并上传到指定的FTP。
先看配置文件:
setting.ini
[setting] ftp_host=*** ftp_user=*** ftp_pass=*** bak_dirs=/data/wwwroot(如果有多个,用分号";"隔开) mysql_user=root mysql_pass=*** mysql_dbs=rediceblog;sitedigger;snyongli;webscraping(如果有多个,用分号";"隔开)
备份脚本:
linux_baker.py
# linux_baker.py # by redice 2011.08.27 import os import ConfigParser import shutil from datetime import datetime from ftplib import FTP # path of mysqldump MYSQLDUMP = '/usr/bin/mysqldump' class Baker: def __init__(self): # read ftp and mysql parameters cfg = ConfigParser.ConfigParser() cfg.read('setting.ini') self.ftp_host = self.__read_conf('ftp_host', cfg) self.ftp_user = self.__read_conf('ftp_user', cfg) self.ftp_pass = self.__read_conf('ftp_pass', cfg) self.bak_dirs = self.__read_conf('bak_dirs', cfg) self.mysql_user = self.__read_conf('mysql_user', cfg) self.mysql_pass = self.__read_conf('mysql_pass', cfg) self.mysql_dbs = self.__read_conf('mysql_dbs', cfg) self.tmp_dir = os.path.join(self.__path(), 'tmp') def __read_conf(self, field, cfg): try: return cfg.get('setting', field) except Exception, e: pass def __path(self): return os.path.dirname(__file__) def __date(self): return datetime.now().strftime('%Y%m%d') def bak(self): """Baking mysql and dirs """ # clear old files if os.path.exists(self.tmp_dir): shutil.rmtree(self.tmp_dir) os.mkdir(self.tmp_dir) # dumping all mysql_dbs if self.mysql_user and self.mysql_dbs: for db in self.mysql_dbs.split(';'): print 'dumping %s.' % db os.system('%s -u %s -p%s %s > %s' % (MYSQLDUMP, self.mysql_user, self.mysql_pass, db.strip(), \ os.path.join(self.tmp_dir, '%s_%s.sql.bak' % (db, self.__date())))) # zip all dirs if self.bak_dirs: for _dir in self.bak_dirs.split(';'): print 'zip %s.' % _dir os.system('tar zcvf %s %s' % (os.path.join(self.tmp_dir, '%s_%s.tar.gz' % (_dir.replace('/', '_'), self.__date())), _dir)) def upload(self): """Uploading files onto ftp. """ if self.ftp_host: ftp = FTP(self.ftp_host) try: ftp.login(self.ftp_user, self.ftp_pass) print ftp.getwelcome() for root, _, files in os.walk(self.tmp_dir): for f in files: print 'uploading %s to %s.' % (f, self.ftp_host) ftp.storbinary('STOR %s' % f, open(os.path.join(root, f), 'rb')) ftp.quit() except Exception, e: print str(e) if __name__ == '__main__': baker = Baker() baker.bak() baker.upload() print 'baking finished.'
添加到计划任务:
每周一晚0点执行备份操作。
crontab -e 0 0 * * 1 /usr/local/bin/python2.5 /data/Python/linux_baker/linux_baker.py
呵呵,谢谢
VaTG790i.最好的<a href=http://www.kyfei.com>网站推广软件</a>,
非常好
....................
;ui;普i;uighur;ui;ui;个
在unix网络编程中看到了关于TCP/IP的一些内容,我感觉还是写的不够。正在下载中,一定
下载地址呢