代码之家  ›  专栏  ›  技术社区  ›  Tauquir

转储数据库的bash脚本

  •  1
  • Tauquir  · 技术社区  · 14 年前

    2 回复  |  直到 14 年前
        1
  •  2
  •   Tauquir    13 年前

    我得到了一个python脚本谁采取转储并上传到s3。我认为它比bash脚本更好:

    import datetime
    
    import subprocess, tarfile, os, S3, tempfile
    
    #Mysql
    MYSQL_USER = "xxxx"
    MYSQL_PASS = "xxx"
    MYSQL_DB = "xxxxx"
    MYSQL_HOST = "localhost"
    MYSQL_DUMP = "mysqldump"
    
    AWS_ACCESS_KEY_ID = "xxxxxxxxxxxx"
    AWS_SECRET_ACCESS_KEY = "yyyyyyyyyyyyyyyyyyyy"
    
    BUCKET_NAME = "bucket"
    
    FOLDER = "backup/"
    
    KEEP = 5
    
    EXT_TIME = datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%dT%H:%M')
    
    print "start mysqldump..."
    
    proc1 = subprocess.Popen(MYSQL_DUMP + " --no-create-info  -u %s -p%s   -x  --databases  %s" % (MYSQL_USER, MYSQL_PASS, MYSQL_DB), shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
    
    t1 = tempfile.NamedTemporaryFile()
    t1.write(proc1.communicate()[0])
    
    tar = tarfile.open( (os.path.join(os.curdir, MYSQL_DB + "_%s.tar.gz" % (EXT_TIME))), "w|gz")
    
    tar.add(t1.name, MYSQL_DB + "_data.sql")
    t1.close()
    tar.close()
    
    print "uploading to S3..."
    conn = S3.AWSAuthConnection( AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY )
    tardata = open(os.path.join(os.curdir, MYSQL_DB + "_%s.tar.gz" % EXT_TIME) , "rb").read()
    response = conn.put(BUCKET_NAME, FOLDER + MYSQL_DB + "_%s.tar.gz" % EXT_TIME, S3.S3Object(tardata))
    
    if response.http_response.status == 200 :
        print "sucessfully uploaded the archive to Amazon S3"
    else:
        print "Uploading database dump to Amazon S3 is not successful" 
    
    os.remove(os.path.join(os.curdir, MYSQL_DB + "_%s.tar.gz" % (EXT_TIME)))
    
        2
  •  1
  •   Mikhail Chernykh    14 年前

    试试这个:

    #!/bin/bash
    mysqldump $1 > test.sql
    mysql $2 -uusername -ppassword < test.sql
    rm test.sql
    

    可能您需要mysqldump和mysql命令的任何可选参数