在单机模式下,MySQL可以使用mysqldump.exe来实现备份,那么在Windows群集环境下,仅有运行MySQL的节点的MySQL服务是运行状态,其他节点都没有运行,这种情况下要如何实现定时备份呢?
本地环境用于存放MySQL文件的是超融合虚拟ISCSI磁盘,具有二副本机制,基本可靠。我们可以使用PowerShell脚本来实现备份且无需关注MySQL角色运行的节点。
# 检查 MySQL 服务是否在本节点运行
$service = Get-Service MySQL
if ($service.Status -eq "Running") {
# 如果 MySQL 服务在本节点运行,则执行备份任务
$databases = & "F:\Program Files\MySQL\MySQL Server 8.1\bin\mysql.exe" -u root -p<MySQL密码> -N -B -e "SHOW DATABASES;"
#获取MySQL服务器上的所有数据库,不用再一个个添加
foreach ($database in $databases) {
if ($database -ne "information_schema" -and $database -ne "performance_schema" -and $database -ne "sys") {
# 每天备份的文件保存在当前日期文件夹下
$date = (Get-Date).ToString('yyyy-MM-dd')
$backupPath = "F:\ProgramData\Backups\$date"
if (!(Test-Path $backupPath)) {
New-Item -ItemType Directory -Force -Path $backupPath
}
& "F:\Program Files\MySQL\MySQL Server 8.1\bin\mysqldump.exe" -u root -p<MySQL密码> --databases $database > "$backupPath\backup-$database-$date.sql"
}
}
# 删除之前7天备份的命令
$oldBackupPath = "F:\ProgramData\Backups\$((Get-Date).AddDays(-7).ToString('yyyy-MM-dd'))"
if (Test-Path $oldBackupPath) {
Remove-Item $oldBackupPath -Recurse
}
}
将以上内容保存为ps1文件,在任务计划程序中进行添加,需要注意的是启动程序为PowerShell.exe,参数为-File "ps1脚本路径"
,如下图:
需要注意的是,我使用了CSV(群集共享卷)来共享一些常用的脚本,文章内的脚本也同样如此,如果你没有使用CSV则需要注意每台节点相应文件的路径是否正确。
运行效果如下:
评论前必须登录!
注册