在 Azure Runbook 上运行“mysqldump”
Posted
技术标签:
【中文标题】在 Azure Runbook 上运行“mysqldump”【英文标题】:Running 'mysqldump' on an Azure Runbook 【发布时间】: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"-pos.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()
【问题讨论】:
【参考方案1】:是的,您是正确的,您尝试执行的数据操作是无法使用 mysql 进行的,因为它不是第一方 MS 产品。但是您使用 Azure SQL 执行相同的操作。
目前,我认为解决您面临的自动化问题的唯一选择是使用SimplySQL module 获取连接和查询数据库的运行手册。连接属性非常简单,允许连接到多种数据库类型,包括 MySQL。您可以使用以下命令安装并获取 SimplySQL 的快速统计信息。
Install-Module -Name SimplySql -RequiredVersion 1.6.2
Get-Module SimplySQL
之后,您可以使用 Invoke-SqlQuery 将 MySQL 查询传递给您使用 Open-MySQLConnection cmdlet 打开的连接。
请注意,要在本地本地服务器或虚拟机中备份现有 MySQL 数据库,您可以考虑dump and restore using mysqldump cmd tool。
但除此之外,我想不出任何方法来达到这个结果。作为一种解决方法,您可以使用 SQL Server 和 PowerShell Runbook 来实现您想要执行的备份操作。为此,请查看此Azure Automation: Export Azure SQL Database to Blob Storage in a BACPAC file 文档以获取更多信息。
【讨论】:
以上是关于在 Azure Runbook 上运行“mysqldump”的主要内容,如果未能解决你的问题,请参考以下文章
我是否必须在powershell Runbook(azure)中导入模块?
Azure Runbook 错误,AzureRmStorageAccountKey 无法索引到空数组
如何使用 PowerShell Runbook 在 azure blob 存储上创建文本文件?