綜合別人的python實現備份mysql的自動化腳本,centos7下用python3實現的腳本(python2的只需要修改下print的位置即可)
親測可執行,且服務器可以定義為其他服務器,未對數據庫名是否正確做判斷和處理(測試了僅僅輸出的備份文件里沒什么有效信息而已,不影響)
腳本如下:
1 #!/usr/bin env python3 2 import os 3 import time 4 import datetime 5 #定義服務器,用戶名、密碼、數據庫名稱(多個庫分行放置)和備份的路徑 6 DB_HOST = 'localhost' 7 DB_USER = 'root' 8 DB_USER_PASSWD = 'mypassword' 9 DB_NAME = '/mnt/dbbackup/dbnames.txt' 10 BACKUP_PATH = '/mnt/dbbackup/mysql/' 11 12 DATETIME = time.strftime('%Y%m%d-%H%M%S') 13 TODAYBACKUPPATH = BACKUP_PATH + DATETIME 14 15 print("createing backup folder!") 16 #創建備份文件夾 17 if not os.path.exists(TODAYBACKUPPATH): 18 os.makedirs(TODAYBACKUPPATH) 19 20 print("checking for databases names file") 21 22 23 #定義執行備份腳本,讀取文件中的數據庫名稱,注意按行讀寫,不校驗是否存在該庫 24 def run_backup(): 25 in_file = open(DB_NAME,"r") 26 for dbname in in_file.readlines(): 27 dbname = dbname.strip() 28 print("now starting backup database %s" %dbname) 29 dumpcmd = "mysqldump -u" +DB_USER + " -p"+DB_USER_PASSWD+" " +dbname+" > "+TODAYBACKUPPATH +"/"+dbname+".sql" 30 print(dumpcmd) 31 os.system(dumpcmd) 32 file1.close() 35 #執行壓縮的函數 36 def run_tar(): 37 compress_file = TODAYBACKUPPATH + ".tar.gz" 38 compress_cmd = "tar -czvf " +compress_file+" "+DATETIME 39 os.chdir(BACKUP_PATH) 40 os.system("pwd") 41 os.system(compress_cmd) 42 print("compress complete!") 43 #刪除備份文件夾 44 remove_cmd = "rm -rf "+TODAYBACKUPPATH 45 os.system(remove_cmd) 46 47 #備份數據庫文件存在就執行備份和壓縮,否則退出 48 if os.path.exists(DB_NAME): 49 file1 = open(DB_NAME) 50 print("starting backup of all db listed in file "+DB_NAME) 51 run_backup() 52 run_tar() 53 print("backup success!") 54 else: 55 print("database file not found..") 56 exit()