Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104646
  • 博文数量: 43
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 252
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-03 14:41
个人简介

池中物

文章分类

全部博文(43)

文章存档

2018年(5)

2016年(1)

2015年(11)

2014年(7)

2013年(19)

我的朋友

分类: Python/Ruby

2013-06-03 14:43:28

一。前言
        小编其实学习python有一个多月了,感觉学着很痛苦,很吃力。所以,在工作中需要用的的脚本,全部应用paython去做,暂时摈弃了shell。
        shell基础还不错,所以用python完全是按照shell那套思路去做的,以后慢慢改进。
        python是面向对象的编程语言,能实现一些工作比shell来的简单。python支持很多库,这些库各自能实现很多功能,当需要用到什么功能的时候,就导入(import)这个库就行,这样放百年多了。

二。实例
        背景:全备mysql数据库,并压缩

        这个用shell实现起来很简单,一句mysqldump就行了,这次小编采取python来写,哈哈~慢慢提升自己的能力,在工作中学习才是最有效的。
代码如下:
  1. #!/usr/local/bin/python
  2. #NOTICE:if you want to add mysql database for bakup,please add parameter
  3. # like "DBNAME001,db001_name,db001_dir,db001_file_name,db001_zip_name" ,and
  4. # add parameter in "DBNAME,DB_FILE_NAME,DB_ZIP_NAME,DB_DIR"
  5. #author:xiexintao
  6. #time:2013-05-29
  7. import os
  8. import time

  9. DBUSER = "root"
  10. DBPASS = "123456"
  11. DBIP = "localhost"
  12. SOCKET = "/var/run/mysqld/mysqld.sock"

  13. DBNAME001 = "log market people"

  14. timeformat = "%Y%m%d%H%M"
  15. nowtime = time.strftime(timeformat)

  16. zip_dir = "/data/mysql_bakcup/all_backup"
  17. db001_name = "log_market_people"

  18. db001_dir = os.path.join(zip_dir,db001_name)

  19. db001_file_name = "%s.sql.%s" % (db001_name,nowtime)
  20. db001_zip_name = "%s/%s_%s.tar.bz2" % (db001_dir,db001_name,nowtime)

  21. DBNAME = [DBNAME001,]
  22. DB_FILE_NAME = [db001_file_name,]
  23. DB_ZIP_NAME = [db001_zip_name,]
  24. DB_DIR = [db001_dir,]

  25. mysqldump = "mysqldump -u"%s" -p"%s" -S"%s" -h"%s" -B %s > "%s""
  26. compress = "tar -jcf "%s" "%s""

  27. for i in range(len(DBNAME)):
  28.         dump_result = mysqldump % (DBUSER,DBPASS,SOCKET,DBIP,DBNAME[i],DB_FILE_NAME[i])
  29.         compress_result = compress % (DB_ZIP_NAME[i],DB_FILE_NAME[i])

  30.         os.system("mkdir -p %s" % DB_DIR[i])
  31.         os.system(dump_result)
  32.         os.system(compress_result)
  33.         os.remove(DB_FILE_NAME[i])
基本思路:
        利用mysqldump备份我所需的数据库后,将备份出来的sql打包压缩成tar.bz2,再将sql删掉

脚本详解:
        python是基于模块的,你需要用到什么功能就需要到导入相应的模块,有些模块需要下载,有些模块这是安装python时自带了,建议大家python为2.7。
        本脚本用到了两个模块os和time,所以脚本最开始就要导入这两个个模块:
            import os
            import time
        本脚本需要用到的功能,调用系统命令,打印时间:
            思路设计之初,利用mysqldump备份mysql库,然后用tar打包,文加名上加上当前时间,然后删除备份的sql文本。
            这里调用系统命令,用到了os模块中的system模块:
                    system模块调用linux系统命令,例如我在linux命令行输入python进入python命令行:
                            #python
                            >>>import os
                            >>>os.system("ls")                                           ##不加引号表示python中定义的变量或python内部命令
                            ...这里会打印进入python之前目录下的文件和文件夹
                            >>>os.system("date")
                            ...这里会打印当前时间
            这里调用当前时间,并没有使用os.system("date")的格式,python中有time模块,用于打印时间相关,如果再去用os.system("date")就太不专业了。。。
                   time中strftime的模块,可以打印指定格式,脚本中使用如下:
                            time.strftime("%Y%m%d%H%M")
                   这样答应出来的格式%Y%m%d%H%M,同date命令,各位不防在python命令下import time,试一下
       这里删除导出的sql文本用的是os模块下的remove模块,这个类似于命令行下的rm,不妨python命令行下一试:
           #python
           >>>import os
           >>>os.system("touch /tmp/a")     ###在tmp下创建a文件  
                          >>>os.system("ls /tmp" )              ###查看/tmp目录下,有a文件
                   >>>os.remove("/tmp/a")        ###删除/tmp下a文件

            python变量定义:
            本脚本中的变量(典型)如下:同shell很像,shell不能有空格,python建议各位用空格
                    DBUSER = "root"
                    DBPASS = "123456"
                    DBIP = "localhost"
                    SOCKET = "/var/run/mysqld/mysqld.sock"
                    DBNAME001 = "log_market_people"
                    timeformat = "%Y%m%d%H%M"
                    zip_dir = "/data/mysql_bakcup/all_backup"
                    db001_name = "log_market_people"
          变量调用(典型举例):%d调用整型,%s调用字符串,同C语言很像的说  
                    db001_file_name = "%s.sql.%s" % (db001_name,nowtime)
                            释义:第一个%s为调用db001_name的值,第二个%s为调用nowtime的值,这里要注意,因为我要调用的db001_name和nowtime都是变量
                                       所以他们没有引号括起来,调用的格式如上所示,也可以是下面这种:
                                                  a = "%s" % ("god")
                                       这样就将god赋值到a中了                                            
                    db001_zip_name = "%s/%s_%s.tar.bz2" % (db001_dir,db001_name,nowtime)
                            同上释义
          数组:
                  数组格式定义如下:
                         a = ["aaa","bbb","ccc"]
                         这样a[0]就是aaa,a[1]就是bbb,a[3]就是ccc,如是数组中更多的元素的一次类推。
                 (脚本中典型)
                         DBNAME = [DBNAME001,]
                         脚本中数据库名暂时只有一个,所有数组中只定义了一个。
         for循环:
                for循环基本格式:(注意以冒号分割,for循环内容需要向后缩进,python默认在一个缩进层的为同级别,若下面print i不缩进,则print i就不属于佛如循
                                              环内部的内容。
                         for i in range(1,100):
                                print    i
                这里range(1,100)表示顺序取1到100的数
                print i打印i值,这里i没加双引号,即打印变量i的值,若想打印i本身,应该这样:print ("i")
                脚本典型:                        
                         for i in range(len(DBNAME)):              ###这里range(len(DBNAME)),是为了让DBNAME[i],DB_FILE_NAME[i],DB_ZIP_NAME[i]在循环
                                                                                ###过程中i的值相同
                         dump_result = mysqldump % (DBUSER,DBPASS,SOCKET,DBIP,DBNAME[i],DB_FILE_NAME[i])   ###将mysqldump命令定义为一个变量
                         compress_result = compress % (DB_ZIP_NAME[i],DB_FILE_NAME[i])           ###压缩备份出来sql的命令定义为命令
                         os.system("mkdir -p %s" % DB_DIR[i])               ###创建目录,注意这里调用变量的方法
                         os.system(dump_result)                             ###使用之前定义好的命令来调用mysqldump
                         os.system(compress_result)                         ###使用之前定义好的命令来压缩打包
                         os.remove(DB_FILE_NAME[i])                         ###删除临时的sql文本文件,只保存最后的sql压缩文件




三。总结
        整个脚本中的用到python的知识点基本说道了,现在再重新去读一下这个脚本,一定豁然开朗,迅速进入pyton的学习,直接全看教程还是有些茫然,建议,直接从实战入手,学的很快~~~


阅读(1249) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:如何在C/C++中调用Java

给主人留下些什么吧!~~