【发布时间】:2021-12-28 09:56:24
【问题描述】:
所以我编写了一个运行“mysqldump”的python脚本来生成一个转储,然后将其存储为备份。在本地,该脚本可以顺利运行,但最终目标是能够将其作为 Runbook 添加到 Azure 自动化帐户,因此它每天运行一次。
目前的问题是 Azure 环境没有 MySQL 模块,因为 MySQL 不是 Windows 产品,所以我无法运行任何 MySQL 命令(我收到错误 '#The system cannot find the specified file'),包括 'mysqldump' .我尝试过使用不同的 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()
【问题讨论】:
标签: python mysql azure powershell azure-devops