Welcome!
欢迎光临!

Windows故障转移群集下实现MySQL备份

在单机模式下,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则需要注意每台节点相应文件的路径是否正确。

运行效果如下:

赞(0)
未经允许不得转载:fuRyZ's Blog » Windows故障转移群集下实现MySQL备份

评论 抢沙发

评论前必须登录!

 

登录

找回密码

注册