簡體   English   中英

在 Azure Runbook 上運行“mysqldump”

[英]Running 'mysqldump' on an Azure Runbook

所以我寫了一個 python 腳本,它運行“mysqldump”來生成一個轉儲,然后將其存儲為備份。 在本地,該腳本可以順利運行,但最終目標是能夠將其作為 Runbook 添加到 Azure 自動化帳戶,因此它每天運行一次。

The issue currently, is that the Azure environment does not have a MySQL module, as MySQL is not a Windows product, so I cannot run any MySQL commands (I get the error ' #The #The system cannot find the specified file '), including ' mysql轉儲'。 我嘗試過使用不同的 python 連接器,但它們顯然都需要一個 mysql 版本才能訪問。 我也一直在考慮將所有內容重做為 Powershell Runbook,因為似乎有比 python 更多的選項(例如SimplySQL )。 我可以添加 SimplySQL 模塊,並且可以從 Runbook 調用它,這是向前邁出的一步,但據我所知,沒有選項或支持“mysqldump”。 這意味着,我需要以某種方式重新創建“mysqldump”命令,方法是使用支持的簡單查詢重做它的功能。

當然,這不是最佳的,而且很容易出錯,所以如果有人有更好的選擇、有用的提示或工具,那將是一個很大的幫助!


不確定它是否有幫助,但這是我的 python 腳本。

    import logging
    import os
    from azure.storage.blob import BlobServiceClient
    from subprocess import Popen, PIPE, STDOUT
    from datetime import datetime
    from dotenv import load_dotenv
    import importlib.util
    import sys
    
    def generateDump():
    
        load_dotenv()
    
        process, process_output = runMySqlDumpCommand()
    
        if (process.returncode != 0):
            logging.error('ERROR CODE: ' + str(process.returncode))
            return
        else:
            generateAndUploadBlob(process_output)
    
    def runMySqlDumpCommand():
        command_args = [
            "mysqldump",
            "-P",
            f"{os.getenv('PORT')}",
            "-h", 
            f"{os.getenv('HOST')}",
            "-u",
            f"{os.getenv('DUMP_USER')}",
            f"-p{os.getenv('DUMP_PASSWORD')}",
            f"{os.getenv('DATABASE')}"
        ]
    
        #The system cannot find the specified file
        process = Popen(command_args, stdin=PIPE, stdout=PIPE, stderr=STDOUT, universal_newlines=True)
        process_output = process.communicate()[0]
        process.wait()
    
        return process, process_output
    
    def generateAndUploadBlob(process_output):
        timestamp = datetime.now().strftime("%d-%m-%Y_%H:%M:%S")
        filename = os.getenv('DATABASE') + "_" + timestamp + ".sql"
        blob_service_client = BlobServiceClient.from_connection_string(os.getenv('DUMP_STORAGE_CONNECTION'))
        blob_client = blob_service_client.get_blob_client(container=os.getenv('DUMP_CONTAINER_NAME'), blob=filename)
    
        blob_client.upload_blob(process_output)

if __name__== "__main__":
    generateDump()

是的,您是正確的,您嘗試執行的數據操作對於 mysql 是不可能的,因為它不是第一方 MS 產品。 但是您使用 Azure SQL 執行相同的操作。

現在我能想到的解決自動化問題的唯一選擇是使用SimplySQL 模塊來獲取連接和查詢數據庫的運行手冊。 連接屬性非常簡單,允許連接到多種數據庫類型,包括 MySQL。 您可以使用以下命令安裝並獲取 SimplySQL 的快速統計信息。

Install-Module -Name SimplySql -RequiredVersion 1.6.2
Get-Module SimplySQL

之后使用Invoke-SqlQuery ,您可以將 MySQL 查詢傳遞給您使用 Open-MySQLConnection cmdlet 打開的連接。

請注意,要在本地本地服務器或虛擬機中備份現有 MySQL 數據庫,您可以考慮使用 mysqldump cmd 工具進行轉儲和還原

但除此之外,我想不出任何方法來達到這個結果。 作為一種解決方法,您可以使用 SQL 服務器和 PowerShell 運行手冊來實現您要執行的備份操作。 為此,請檢查此Azure 自動化:導出 Azure SQL Database to Blob Storage in BACPAC 文件文檔以獲取更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM