亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:52010
  • 待審:67
  • 小程序:12
  • 文章:1106242
  • 會(huì)員:784

此腳本自動(dòng)創(chuàng)建 MySQL 數(shù)據(jù)庫(kù)的備份、恢復(fù)它們以及管理目標(biāo) MySQL 服務(wù)器上的數(shù)據(jù)庫(kù)和用戶創(chuàng)建。

導(dǎo)入子流程
導(dǎo)入日期時(shí)間
導(dǎo)入系統(tǒng)
導(dǎo)入操作系統(tǒng)

def check_and_create_database(主機(jī)、端口、用戶名、密碼、數(shù)據(jù)庫(kù)):
    # 檢查數(shù)據(jù)庫(kù)是否存在的命令
    check_database_command = f"mysql -sN --host={主機(jī)} --port={端口} --user={用戶名} --password={密碼} -e "SELECT EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '{數(shù)據(jù)庫(kù)}')" 2>/dev/null"

    # 執(zhí)行命令
    輸出 = subprocess.check_output(check_database_command, shell=True)

    # 如果輸出包含b'1',則數(shù)據(jù)庫(kù)存在
    如果輸出中有 b'1':
        subprocess.run(check_database_command, shell=True, check=True)
        print(f"數(shù)據(jù)庫(kù)'{database}'已經(jīng)存在。")
        系統(tǒng)退出(1)
    別的:
        # 如果命令失敗,則數(shù)據(jù)庫(kù)不存在
        print(f"數(shù)據(jù)庫(kù) '{database}' 不存在。正在創(chuàng)建...")

        # 創(chuàng)建數(shù)據(jù)庫(kù)的命令
        create_database_command = f"mysql --host={主機(jī)} --port={端口} --user={用戶名} --password={密碼} -e '創(chuàng)建數(shù)據(jù)庫(kù) {數(shù)據(jù)庫(kù)}' 2>/dev/null"
        subprocess.run(create_database_command, shell=True)

def check_and_create_user(主機(jī)、端口、用戶名、密碼、數(shù)據(jù)庫(kù)、新用戶名、新密碼):
    # 檢查用戶是否存在的命令
    check_user_command = f"mysql -sN --host={主機(jī)} --port={端口} --user={用戶名} --password={密碼} -e "SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = '{new_username}')" 2>/dev/null"

    # 執(zhí)行命令
    輸出 = subprocess.check_output(check_user_command, shell=True)

    # 如果輸出包含b'1',則用戶存在
    如果輸出中有 b'1':
        print(f"用戶'{new_username}'已經(jīng)存在。")
        系統(tǒng)退出(1)
    別的:
        # 用戶不存在,創(chuàng)建
        print(f"用戶 '{new_username}' 不存在。正在創(chuàng)建...")

        # 創(chuàng)建用戶并授予權(quán)限的命令
        create_user_command = f"mysql --host={主機(jī)} --port={端口} --user={用戶名} --password={密碼} -e "創(chuàng)建用戶'{new_username}'@'%' 識(shí)別者' {新密碼}';將 {database}.* 上的所有權(quán)限授予 '{new_username}'@'%';刷新權(quán)限;“2>/dev/null”
        subprocess.run(create_user_command, shell=True)

def backup_mysql_database(主機(jī)、端口、用戶名、密碼、數(shù)據(jù)庫(kù)、備份路徑):

    # 檢查備份目錄是否存在
    如果不是 os.path.exists(backup_path):
        print(f"錯(cuò)誤:備份目錄'{backup_path}'不存在。")
        系統(tǒng)退出(1)

    # 使用當(dāng)前日期和時(shí)間為備份創(chuàng)建文件名
    時(shí)間戳 = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
    backup_file = f"{備份路徑}/{數(shù)據(jù)庫(kù)}_{時(shí)間戳}.sql"

    # 使用mysqldump創(chuàng)建數(shù)據(jù)庫(kù)備份的命令
    dump_command = f"mysqldump --no-tablespaces --host={主機(jī)} --port={端口} --user={用戶名} --password={密碼} {數(shù)據(jù)庫(kù)} > {備份文件} 2>/dev/無(wú)效的”

    # 執(zhí)行mysqldump命令
    subprocess.run(dump_command, shell=True)

    返回備份文件

def Restore_mysql_database(主機(jī)、端口、用戶名、密碼、數(shù)據(jù)庫(kù)、備份文件):
    # 使用 mysql 從備份恢復(fù)數(shù)據(jù)庫(kù)的命令
    Restore_command = f"mysql --host={主機(jī)} --port={端口} --user={用戶名} --password={密碼} {數(shù)據(jù)庫(kù)} /dev/null"

    # 執(zhí)行mysql命令
    subprocess.run(restore_command, shell=True)

def main():
    # 源MySQL數(shù)據(jù)庫(kù)的連接參數(shù)
    源主機(jī)=“127.0.0.1”
    源端口=“3309”
    源用戶名=“我的用戶”
    源密碼=“我的密碼”
    源數(shù)據(jù)庫(kù)=“我的數(shù)據(jù)庫(kù)”

    # 目標(biāo)MySQL數(shù)據(jù)庫(kù)的連接參數(shù)
    目標(biāo)主機(jī)=“127.0.0.1”
    目標(biāo)端口=“3309”
    新用戶名 = "新用戶名"
    新密碼 = "新密碼"
    target_database =“my_database_two”

    目標(biāo)用戶名=“root”
    目標(biāo)密碼=“根密碼”

    # 本地保存?zhèn)浞莸穆窂?    backup_path =“my_dbs_dumps”

    # 檢查source_database與target_database是否不同
    如果源數(shù)據(jù)庫(kù)==目標(biāo)數(shù)據(jù)庫(kù):
        print("錯(cuò)誤:源數(shù)據(jù)庫(kù)應(yīng)該與目標(biāo)數(shù)據(jù)庫(kù)不同。")
        系統(tǒng)退出(1)

    # 檢查目標(biāo)數(shù)據(jù)庫(kù),如果不存在則創(chuàng)建
    check_and_create_database(目標(biāo)主機(jī)、目標(biāo)端口、目標(biāo)用戶名、目標(biāo)密碼、目標(biāo)數(shù)據(jù)庫(kù))

    # 檢查目標(biāo)用戶,如果不存在則創(chuàng)建
    check_and_create_user(目標(biāo)主機(jī)、目標(biāo)端口、目標(biāo)用戶名、目標(biāo)密碼、目標(biāo)數(shù)據(jù)庫(kù)、新用戶名、新密碼)

    # 創(chuàng)建MySQL數(shù)據(jù)庫(kù)的備份
    backup_file = backup_mysql_database(源主機(jī)、源端口、源用戶名、源密碼、源數(shù)據(jù)庫(kù)、備份路徑)
    print(f"已創(chuàng)建數(shù)據(jù)庫(kù)備份:{backup_file}")

    # 從備份中恢復(fù)目標(biāo)服務(wù)器上的數(shù)據(jù)庫(kù)
    Restore_mysql_database(目標(biāo)主機(jī)、目標(biāo)端口、目標(biāo)用戶名、目標(biāo)密碼、目標(biāo)數(shù)據(jù)庫(kù)、備份文件)
    print("數(shù)據(jù)庫(kù)備份已在目標(biāo)服務(wù)器上恢復(fù)。")

如果 __name__ == "__main__":
    主要的()

登錄后復(fù)制

檢查并創(chuàng)建_數(shù)據(jù)庫(kù):
此函數(shù)檢查 MySQL 服務(wù)器上是否存在數(shù)據(jù)庫(kù)。如果數(shù)據(jù)庫(kù)不存在,則會(huì)創(chuàng)建它。它需要主機(jī)、端口、用戶名、密碼和數(shù)據(jù)庫(kù)名稱等參數(shù)來(lái)檢查或創(chuàng)建。

檢查并創(chuàng)建_用戶:
與數(shù)據(jù)庫(kù)函數(shù)一樣,該函數(shù)檢查 MySQL 服務(wù)器上是否存在用戶。如果用戶不存在,它將創(chuàng)建用戶并授予特定數(shù)據(jù)庫(kù)的權(quán)限。它還接受主機(jī)、端口、用戶名、密碼、數(shù)據(jù)庫(kù)名稱、新用戶名和新密碼等參數(shù)。

backup_mysql_database:
此函數(shù)使用 mysqldump 執(zhí)行 MySQL 數(shù)據(jù)庫(kù)的備份。它需要主機(jī)、端口、用戶名、密碼、數(shù)據(jù)庫(kù)名稱和保存?zhèn)浞菸募穆窂降葏?shù)。

restore_mysql_database:
此函數(shù)從備份文件恢復(fù) MySQL 數(shù)據(jù)庫(kù)。它接受主機(jī)、端口、用戶名、密碼、數(shù)據(jù)庫(kù)名稱和備份文件路徑等參數(shù)。

主要:
這是該腳本的主要功能。它為源和目標(biāo) MySQL 數(shù)據(jù)庫(kù)設(shè)置參數(shù),包括連接詳細(xì)信息、數(shù)據(jù)庫(kù)名稱和備份路徑。然后,它執(zhí)行檢查以確保源數(shù)據(jù)庫(kù)和目標(biāo)數(shù)據(jù)庫(kù)不同,如果目標(biāo)數(shù)據(jù)庫(kù)和用戶不存在,則創(chuàng)建目標(biāo)數(shù)據(jù)庫(kù)和用戶,創(chuàng)建源數(shù)據(jù)庫(kù)的備份,最后將備份恢復(fù)到目標(biāo)數(shù)據(jù)庫(kù)。

此外,該腳本使用 subprocess 模塊執(zhí)行 MySQL 操作的 shell 命令(mysql、mysqldump),并執(zhí)行錯(cuò)誤處理和輸出重定向(2>/dev/null)以抑制不必要的輸出。

如果您正在使用 MySQL 數(shù)據(jù)庫(kù)并想要?jiǎng)?chuàng)建自動(dòng)化,此代碼將為您提供幫助。

這段代碼是一個(gè)很好的起始模板,用于創(chuàng)建管理 MySQL 數(shù)據(jù)庫(kù)的自動(dòng)化腳本。

dmi@dmi-laptop:~/my_python$ python3 mysql_backup_restore.py 
數(shù)據(jù)庫(kù)“my_database_two”不存在。創(chuàng)造...
用戶“new_username”不存在。創(chuàng)造...
創(chuàng)建數(shù)據(jù)庫(kù)備份:my_dbs_dumps/my_database_2024-05-13_20-05-24.sql
數(shù)據(jù)庫(kù)備份恢復(fù)到目標(biāo)服務(wù)器上。
dmi@dmi-laptop:~/my_python$ 

登錄后復(fù)制

[email protected]

分享到:
標(biāo)簽:MySQL Python 創(chuàng)建 備份 數(shù)據(jù)庫(kù)
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 52010

    網(wǎng)站

  • 12

    小程序

  • 1106242

    文章

  • 784

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定