Python自動化運維之mysql數據庫備份和rsync同步

# Author:xmh import os,time,datetime import subprocess # defin server、user、password and database name and backup path DB_HOST = 'localhost' DB_USER = 'root' DB_USER_PASSWD = '123456' DB_NAME = '/data/db_backup/dbnames.txt' # 存放數據庫名 IP=subprocess.getoutput("ifconfig eth1 |awk 'NR==2{print $2}'") IP_ADDR=IP+"/" BACKUP_PATH = '/backup/mysql/' # 數據庫備份路徑 MYSQLDUMP_OPT='--hex-blob --complete-insert=false --extended-insert=false --quick --skip-comments --compress --default-character-set=utf8 --set-gtid-purged=OFF --single-transaction' DAYTIME = time.strftime('%Y-%m-%d') # 目錄時間 # defin rsync --> server、user、mode、password RSYNC_SERVER = '172.16.1.41' RSYNC_USER = "rsync_backup" RSYNC_MODE = "backup" RSYNC_PASSWORD = "/etc/rsync.pass" DIR_PATH = BACKUP_PATH + IP_ADDR + DAYTIME """ ----------- mysqldump備份參數 ----------- --hex-blob #使用十六進制法來轉存二進制列 --complete-insert #是否使用包含列名的insert語句 --extended-insert #是否是否多行的insert語句 --quick #每次從服務器中逐行檢索表的行 --skip-comments #不向dump file添加註釋 --compress #壓縮客戶端和服務端之間發送的所有信息 --default-character-set=utf8 #指定默認字符集 --set-gtid-purged=OFF #是否添加set語句 --single-transaction #備份的時候對數據進行快照,然後在對快照進行備份,不會影響到數據庫業務 -------------------------------------------- """ print('createting backup dir') # 創建以本機IP地址和當天時間命名的備份文件夾(/backup/mysql/10.0.0.200/2019-03-25/) if not os.path.exists(DIR_PATH): os.makedirs(DIR_PATH) print('checking for database names file') # 獲取數據庫名 os.chdir('/data/db_backup/') if os.path.exists(DB_NAME): # 如果存在dbnames.txt文件先將其刪除 os.remove('dbnames.txt') os.system('mysql -u%s -p%s -e "show databases;"|sed 1d |grep -v "_schema" >%s' %(DB_USER,DB_USER_PASSWD,DB_NAME)) # 定義執行備份腳本,讀取文件中的數據庫名稱,並按行讀寫,將每行數據庫判斷是否已備份,如果已備份則不需要再次備份 def run_backup(): in_file = open(DB_NAME,"r") for dbname in in_file.readlines(): dbname = dbname.strip() print('now starting backup database %s' %dbname) dumpcmd = 'mysqldump -u' + DB_USER + ' -p' + DB_USER_PASSWD +' ' + MYSQLDUMP_OPT +' ' +dbname + ' |gzip' + ' >' + DIR_PATH + '/' + dbname + '_' +DAYTIME +'.sql' +'.gzip' os.system(dumpcmd) in_file.close() # 定義rsync腳本,將備份文件推送到rsync服務端 def rsync_backup(): rsync_cmd = "rsync -avz %s %s@%s::%s --password-file=%s" %(BACKUP_PATH,RSYNC_USER,RSYNC_SERVER,RSYNC_MODE,RSYNC_PASSWORD) os.system(rsync_cmd) # 運行函數 run_backup() rsync_backup()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章