Python基于docker部署的Mysql備份查詢腳本
前言
此環(huán)境是基于docker部署的mysql,docker部署mysql可以參考如下鏈接:
顏色塊文件
root@bogon:~ 2024-04-18 16:34:23# cat DefaultColor.py ######################################################################### # File Name: DefaultColor.py # Author: eight # Mail: 18847097110@163.com # Created Time: Thu 11 Apr 2024 10:25:31 PM CST ######################################################################### #!/usr/bin/env python # -*- coding: utf-8 -*- class Color: END = '\033[0m' # normal BOLD = '\033[1m' # bold RED = '\033[1;91m' # red GREEN = '\033[1;92m' # green ORANGE = '\033[1;93m' # orange BLUE = '\033[1;94m' # blue PURPLE = '\033[1;95m' # purple UNDERLINE = '\033[4m' # underline CYAN = '\033[1;96m' # cyan GREY = '\033[1;97m' # gray BR = '\033[1;97;41m' # background red BG = '\033[1;97;42m' # background green BY = '\033[1;97;43m' # background yellow
備份代碼
######################################################################### # File Name: query_mysql.py # Author: eight # Mail: 18847097110@163.com # Created Time: Thu 18 Apr 2024 11:12:26 AM CST ######################################################################### #!/usr/bin/env python # -*- coding: utf-8 -*- import pymysql import configparser import os from datetime import datetime import DefaultColor import subprocess # 創(chuàng)建備份目錄 def mkdir(): dir_path = os.getcwd() print("--------------------------------------------------------") print("當(dāng)前腳本工作目錄:", dir_path) mysql_backup_dir = "/opt/mysql_backup" print("--------------------------------------------------------") if not os.path.exists(mysql_backup_dir): os.makedirs(mysql_backup_dir) else: return f"數(shù)據(jù)庫備份目錄 '{mysql_backup_dir}' 已經(jīng)存在,跳過創(chuàng)建" return "數(shù)據(jù)庫備份目錄:" + DefaultColor.Color.GREEN + mysql_backup_dir + DefaultColor.Color.END + " 創(chuàng)建成功" # 備份數(shù)據(jù)庫 def backup(mysql_backup_dir): config = configparser.ConfigParser() config.read("config.ini") # 獲取配置信息 host = config.get("MYSQL", "MYSQL_HOST") username = config.get("MYSQL", "MYSQL_USER") password = config.get("MYSQL", "MYSQL_PASSWORD") port = config.get("MYSQL", "MYSQL_PORT") db = config.get("MYSQL", "MYSQL_DB") current_datetime = datetime.now() formatted_datetime = current_datetime.strftime("%Y-%m-%d_%H-%M-%S") try: command = f'docker exec -it mysql-container /bin/bash -c "mysqldump -h {host} -u {username} -p{password} -P {port} -- {db} > {mysql_backup_dir}-{db}-{formatted_datetime}.sql"' subprocess.run(command, shell=True, check=True) except subprocess.CalledProcessError as e: print("Database backup failed:", e) return f"數(shù)據(jù)庫:{db}備份完成: {mysql_backup_dir}-{db}-{formatted_datetime}.sql" if __name__ == '__main__': backup_dir = mkdir() print(backup_dir) backup = backup("/opt/mysql_backup") print(backup)
此代碼如果是本地環(huán)境測(cè)試的話,邏輯是判斷當(dāng)前本地有沒有存儲(chǔ)備份數(shù)據(jù)的目錄,沒有則創(chuàng)建。
再利用subprocess執(zhí)行mysqldump命令,按照日期生成.sql文件
效果
因?yàn)槭莇ocker環(huán)境,所以判斷當(dāng)前目錄是否存在,是判斷的宿主機(jī)上的,所以此代碼不是很嚴(yán)謹(jǐn)?shù)拇a,如果是本地部署的話,把mysqldump命令前面的 docker exec -it mysql-container /bin/bash -c 刪除掉即可。
這樣備份的腳本就實(shí)現(xiàn)了腳本預(yù)期效果:將數(shù)據(jù)庫備份到指定的目錄下,以日期區(qū)別sql文件
全量代碼(讀取配置和備份和查詢)
root@bogon:~ 2024-04-18 16:30:14# cat MysqlBackup.py ######################################################################### # File Name: query_mysql.py # Author: eight # Mail: 18847097110@163.com # Created Time: Thu 18 Apr 2024 11:12:26 AM CST ######################################################################### #!/usr/bin/env python # -*- coding: utf-8 -*- import pymysql import configparser import os from datetime import datetime import DefaultColor import subprocess # 讀取mysql配置文件 def mysql_config(): config = configparser.ConfigParser() config.read("config.ini") # 獲取配置信息 host = config.get("MYSQL", "MYSQL_HOST") username = config.get("MYSQL", "MYSQL_USER") password = config.get("MYSQL", "MYSQL_PASSWORD") port = config.get("MYSQL", "MYSQL_PORT") db = config.get("MYSQL", "MYSQL_DB") print("--------------------------------------------------------") return f"主機(jī):{host}\t用戶名:{username}\t密碼:{password}\t端口:{port}\t數(shù)據(jù)庫:{db}" # 創(chuàng)建備份目錄 def mkdir(): dir_path = os.getcwd() print("--------------------------------------------------------") print("當(dāng)前腳本工作目錄:", dir_path) mysql_backup_dir = "/opt/mysql_backup" print("--------------------------------------------------------") if not os.path.exists(mysql_backup_dir): os.makedirs(mysql_backup_dir) else: return f"數(shù)據(jù)庫備份目錄 '{mysql_backup_dir}' 已經(jīng)存在,跳過創(chuàng)建" return "數(shù)據(jù)庫備份目錄:" + DefaultColor.Color.GREEN + mysql_backup_dir + DefaultColor.Color.END + " 創(chuàng)建成功" # 查詢sql語句 ##def select(): # config = configparser.ConfigParser() # config.read("config.ini") # # # 獲取配置信息 # host = config.get("MYSQL", "MYSQL_HOST") # username = config.get("MYSQL", "MYSQL_USER") # password = config.get("MYSQL", "MYSQL_PASSWORD") # port = config.get("MYSQL", "MYSQL_PORT") # db = config.get("MYSQL", "MYSQL_DB") # # 創(chuàng)建mysql連接信息 # conn = pymysql.connect(host=host, user=username, password=password, port=int(port), db=db) # cur = conn.cursor() # # 執(zhí)行查詢語句 # cur.execute("use docker;") # cur.execute("select * from DockerImages;") # print("查詢到的數(shù)據(jù)是:") # # 接收全部的返回結(jié)果行 # result = cur.fetchall() # while True: # resp = cur.fetchone() # if resp is None: # break # # 關(guān)閉查詢游標(biāo) # cur.close() # # 提交 # conn.commit() # # 關(guān)閉鏈接,釋放計(jì)算機(jī)資源 # conn.close() # return result # 備份數(shù)據(jù)庫 def backup(mysql_backup_dir): config = configparser.ConfigParser() config.read("config.ini") # 獲取配置信息 host = config.get("MYSQL", "MYSQL_HOST") username = config.get("MYSQL", "MYSQL_USER") password = config.get("MYSQL", "MYSQL_PASSWORD") port = config.get("MYSQL", "MYSQL_PORT") db = config.get("MYSQL", "MYSQL_DB") current_datetime = datetime.now() formatted_datetime = current_datetime.strftime("%Y-%m-%d_%H-%M-%S") try: command = f'docker exec -it mysql-container /bin/bash -c "mysqldump -h {host} -u {username} -p{password} -P {port} -- {db} > {mysql_backup_dir}-{db}-{formatted_datetime}.sql"' subprocess.run(command, shell=True, check=True) except subprocess.CalledProcessError as e: print("Database backup failed:", e) return f"數(shù)據(jù)庫:{db}備份完成: {mysql_backup_dir}-{db}-{formatted_datetime}.sql" if __name__ == '__main__': #mysql_config = mysql_config() #print(mysql_config) backup_dir = mkdir() print(backup_dir) #sector = select() # 循環(huán)打印所有數(shù)據(jù),如果此代碼是封裝在函數(shù)內(nèi)部,那么使用return的話,只會(huì)輸出第一條數(shù)據(jù),所以要在外部調(diào)用 #for row in sector: # print(row) backup = backup("/opt/mysql_backup") print(backup) root@bogon:~ 2024-04-18 16:30:18# root@bogon:~ 2024-04-18 16:30:32# root@bogon:~ 2024-04-18 16:30:32# cat MysqlBackup.py ######################################################################### # File Name: query_mysql.py # Author: eight # Mail: 18847097110@163.com # Created Time: Thu 18 Apr 2024 11:12:26 AM CST ######################################################################### #!/usr/bin/env python # -*- coding: utf-8 -*- import pymysql import configparser import os from datetime import datetime import DefaultColor import subprocess # 讀取mysql配置文件 def mysql_config(): config = configparser.ConfigParser() config.read("config.ini") # 獲取配置信息 host = config.get("MYSQL", "MYSQL_HOST") username = config.get("MYSQL", "MYSQL_USER") password = config.get("MYSQL", "MYSQL_PASSWORD") port = config.get("MYSQL", "MYSQL_PORT") db = config.get("MYSQL", "MYSQL_DB") print("--------------------------------------------------------") return f"主機(jī):{host}\t用戶名:{username}\t密碼:{password}\t端口:{port}\t數(shù)據(jù)庫:{db}" # 創(chuàng)建備份目錄 def mkdir(): dir_path = os.getcwd() print("--------------------------------------------------------") print("當(dāng)前腳本工作目錄:", dir_path) mysql_backup_dir = "/opt/mysql_backup" print("--------------------------------------------------------") if not os.path.exists(mysql_backup_dir): os.makedirs(mysql_backup_dir) else: return f"數(shù)據(jù)庫備份目錄 '{mysql_backup_dir}' 已經(jīng)存在,跳過創(chuàng)建" return "數(shù)據(jù)庫備份目錄:" + DefaultColor.Color.GREEN + mysql_backup_dir + DefaultColor.Color.END + " 創(chuàng)建成功" # 查詢sql語句 def select(): config = configparser.ConfigParser() config.read("config.ini") # 獲取配置信息 host = config.get("MYSQL", "MYSQL_HOST") username = config.get("MYSQL", "MYSQL_USER") password = config.get("MYSQL", "MYSQL_PASSWORD") port = config.get("MYSQL", "MYSQL_PORT") db = config.get("MYSQL", "MYSQL_DB") # 創(chuàng)建mysql連接信息 conn = pymysql.connect(host=host, user=username, password=password, port=int(port), db=db) cur = conn.cursor() # 執(zhí)行查詢語句 cur.execute("use docker;") cur.execute("select * from DockerImages;") print("查詢到的數(shù)據(jù)是:") # 接收全部的返回結(jié)果行 result = cur.fetchall() while True: resp = cur.fetchone() if resp is None: break # 關(guān)閉查詢游標(biāo) cur.close() # 提交 conn.commit() # 關(guān)閉鏈接,釋放計(jì)算機(jī)資源 conn.close() return result # 備份數(shù)據(jù)庫 def backup(mysql_backup_dir): config = configparser.ConfigParser() config.read("config.ini") # 獲取配置信息 host = config.get("MYSQL", "MYSQL_HOST") username = config.get("MYSQL", "MYSQL_USER") password = config.get("MYSQL", "MYSQL_PASSWORD") port = config.get("MYSQL", "MYSQL_PORT") db = config.get("MYSQL", "MYSQL_DB") current_datetime = datetime.now() formatted_datetime = current_datetime.strftime("%Y-%m-%d_%H-%M-%S") try: command = f'docker exec -it mysql-container /bin/bash -c "mysqldump -h {host} -u {username} -p{password} -P {port} -- {db} > {mysql_backup_dir}-{db}-{formatted_datetime}.sql"' subprocess.run(command, shell=True, check=True) except subprocess.CalledProcessError as e: print("Database backup failed:", e) return f"數(shù)據(jù)庫:{db}備份完成: {mysql_backup_dir}-{db}-{formatted_datetime}.sql" if __name__ == '__main__': mysql_config = mysql_config() print(mysql_config) backup_dir = mkdir() print(backup_dir) sector = select() #循環(huán)打印所有數(shù)據(jù),如果此代碼是封裝在函數(shù)內(nèi)部,那么使用return的話,只會(huì)輸出第一條數(shù)據(jù),所以要在外部調(diào)用 for row in sector: print(row) backup = backup("/opt/mysql_backup") print(backup)
效果
到此這篇關(guān)于Python基于docker部署的Mysql備份查詢腳本的文章就介紹到這了,更多相關(guān)Python Mysql備份查詢腳本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中28種極坐標(biāo)繪圖函數(shù)總結(jié)
這篇文章主要為大家詳細(xì)介紹了python中28種極坐標(biāo)繪圖函數(shù)的用法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下2023-09-09基于PyQt4和PySide實(shí)現(xiàn)輸入對(duì)話框效果
這篇文章主要為大家詳細(xì)介紹了基于PyQt4和PySide實(shí)現(xiàn)輸入對(duì)話框效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02Python中matplotlib庫安裝失敗的經(jīng)驗(yàn)總結(jié)(附pycharm配置anaconda)
最近根據(jù)領(lǐng)導(dǎo)布置的學(xué)習(xí)任務(wù),開始學(xué)習(xí)python中的matplotlib,朋友告訴我這個(gè)很簡單,然而剛踏入安裝的門檻,就遇到了安裝不成功的問題,下面這篇文章主要給大家介紹了關(guān)于Python中matplotlib庫安裝失敗的經(jīng)驗(yàn)總結(jié),需要的朋友可以參考下2022-08-08用python的requests第三方模塊抓取王者榮耀所有英雄的皮膚實(shí)例
下面小編就為大家分享一篇用python的requests第三方模塊抓取王者榮耀所有英雄的皮膚實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨想過來看看吧2017-12-12python實(shí)現(xiàn)自動(dòng)登錄12306自動(dòng)搶票功能
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,越來越多的人選擇通過網(wǎng)絡(luò)平臺(tái)購票,特別是在中國,12306作為官方火車票預(yù)訂平臺(tái),承擔(dān)了巨大的訪問量,對(duì)于熱門線路或者節(jié)假日出行,往往會(huì)出現(xiàn)一票難求的情況,因此,一些技術(shù)愛好者嘗試?yán)镁幊陶Z言如Python來開發(fā)搶票腳本2025-01-01梅爾倒譜系數(shù)(MFCC)實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了梅爾倒譜系數(shù)(MFCC)實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06