1. 程式人生 > >python3.6指令碼備份mysql資料庫

python3.6指令碼備份mysql資料庫

環境cnetos7.3+python3.6+mysql5.7

安裝python3.6環境

1.安裝IUS軟體源

安裝EPEL依賴
sudo yum install epel-release

2.安裝python3.6
sudo yum install python36u

安裝Python3完成後的shell命令為python3.6,為了使用方便,建立一個到python3的符號連結
sudo ln -s /bin/python3.6 /bin/python3

3.安裝pip3
sudo yum install python36u-pip

安裝pip完成後的shell命令為pip3.6,為了使用方便,建立一個到pip3的符號連結
sudo ln -s /bin/pip3.6 /bin/pip3

控制檯輸入python3,如下圖所示代表安裝成功
控制檯輸入python3顯示如下表示安裝成功

指令碼檔案

# Import required python libraries
import os
import time
import datetime
import glob
import shutil
# MySQL database details to which backup to be done. Make sure below user having enough privileges to take databases backup.
# To take multiple databases backup, create any file like /backup/dbnames.txt and put databses names one on each line and assignd to DB_NAME variable.
#這裡填你的公網ip
DB_HOST = ' '
#這裡填資料庫使用者名稱
DB_USER = ' '
#這裡填資料庫密碼
DB_USER_PASSWORD = ' '
#DB_NAME = '/backup/dbnames.txt'
#這裡填要備份的資料庫
DB_NAME = ' '
#這裡填需要備份到的路徑
BACKUP_PATH = ' '

# Getting current datetime to create seprate backup folder like "12012013-071334".
DATETIME = time.strftime('%Y%m%d')

TODAYBACKUPPATH = BACKUP_PATH + DATETIME

# Checking if backup folder already exists or not. If not exists will create it.

print ('del folder three days ago')
folders = glob.glob('這裡填前面填的需要備份到的路徑/*')
#刪除前三條備份的檔案目錄
today = datetime.datetime.now()
for item in folders:
    try:
        foldername = os.path.split(item)[1]
        day = datetime.datetime.strptime(foldername, "%Y%m%d")
        diff = today - day
        if diff.days >= 3:
            shutil.rmtree(item)
    except:
        pass

print ("creating backup folder")
if not os.path.exists(TODAYBACKUPPATH):
    os.makedirs(TODAYBACKUPPATH)

# Code for checking if you want to take single database backup or assinged multiple backups in DB_NAME.
print ("checking for databases names file.")
if os.path.exists(DB_NAME):
    file1 = open(DB_NAME)
    multi = 1
    print ("Databases file found...")
    print ("Starting backup of all dbs listed in file " + DB_NAME)
else:
    print ("Databases file not found...")
    print ("Starting backup of database " + DB_NAME)
    multi = 0

# Starting actual database backup process.
if multi:
    in_file = open(DB_NAME,"r")
    flength = len(in_file.readlines())
    in_file.close()
    p = 1
    dbfile = open(DB_NAME,"r")

    while p <= flength:
        db = dbfile.readline()   # reading database name from file
        db = db[:-1]         # deletes extra line
        dumpcmd = "mysqldump -u " + DB_USER + " -p" + DB_USER_PASSWORD + " " + db + " > " + TODAYBACKUPPATH + "/" + db + ".sql"
        os.system(dumpcmd)
        p = p + 1
    dbfile.close()
else:
    db = DB_NAME
    dumpcmd = "mysqldump -u " + DB_USER + " -p" + DB_USER_PASSWORD + " " + db + " > " + TODAYBACKUPPATH + "/" + db + ".sql"
    os.system(dumpcmd)

print ("Backup script completed")
print ("Your backups has been created in '" + TODAYBACKUPPATH + "' directory")

新建一個sh啟動指令碼
vi auto.sh

新增內容


#!/usr/bin/env bash
#/test/db 是我前面設定的需要備份到的路徑
#db_backup.py
cd /test/db是我的python指令碼檔名
setsid python3 db_backup.py

設定定時器執行間隔時間(我設定的是兩分鐘執行一次,具體的可根據個人需要設定)
vi /etc/crontab
在檔案末尾新增如下格式
*/2 * * * * root /test/db/auto.sh
設定定時器執行時間