mysql批量备份数据库语句_sql语句大全之批量备份数据库脚本(PowerShell版)

开始

昨天备份一个数据库拿来测试,发现备份后的文件非常大。后来去检查下使用的备份脚本,原来之前的备份脚本没有压缩功能。

现把之前的备份脚本修改下,支持压缩备份,和支持仅复制备份(CopyOnly).

备份数据库(完整备份)脚本

(注:开初编写这脚本的目的是能批量备份数据库,提高工作效率,后面提到的还原数据库脚本也是如此。)

复制代码

##备份数据库(完整备份)V2.0 Andy 2017-4-13 增加了设置压缩备份,和是否使用复制备份功能

##备份数据库(完整备份)V1.0 Andy

##

##

[string]$serverInstance="IP\InstanceName"

[string]$userName="Login"

[string]$password="Password"

[string]$Path="\\xxx.xxx.xxx.xxx\xxxBackup"

[string]$DBList="dbname" #(选填)数据库列表,数据库之间使用','隔开,留空表示所有数据库

[bool]$CopyOnly=$true; #为 True,仅复制备份;否则不是仅复制备份,而是平常备份序列的一部分

[int32]$CompressionOption=1 #1 启动压缩  ,2 禁用压缩

[bool]$AddBackupTime= 1 #(选填) 备份文件名是否加备份时间,格式为:_yyyyMMddHHmmss

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | Out-Null

[System.Reflection.Assembly]::LoadWithPartialName("System.Data") | Out-Null

[string]$DBName=""

[datetime]$StartTime=Get-Date

$Path=$Path+$(If($($Path.Split("\"))[-1] -eq "" ){""} Else {"\"})

$ServerConnection =new-object "Microsoft.SqlServer.Management.Common.ServerConnection" $serverInstance,$userName, $password

Clear-Host #清除控制台的内容

#--------------------------------------

#检查备份数据库清单

#--------------------------------------

Function CheckDB

{

Param([String]$DBvar)

Begin

{

[Boolean]$CheckResult=$false

}

Process

{

If($DBList -eq "")

{

$CheckResult=$true

}

Else

{

Foreach($x In $DBList.Split(","))

{

If($x -eq $DBvar)

{

$CheckResult=$true

Break

}

}

}

}

End

{

Return $CheckResult

}

}

#1. 连接实例

Try

{

$ServerConnection.Connect()

}

Catch

{

Write-Host "无法连接到数据库实例:$serverInstance"   -ForegroundColor Red

}

#2. 判断备份路径是否正确

[bool]$PathExists=Test-Path $Path

if ($PathExists -eq $false)

{

Write-Host "无效的路径:$Path"   -ForegroundColor Red

}

#3. 备份数据库

if ($ServerConnection.IsOpen -and $PathExists -eq $true)

{

Try

{

$Server=new-object "Microsoft.SqlServer.Management.Smo.Server" $ServerConnection

$Backup=new-object "Microsoft.SqlServer.Management.Smo.Backup"

[string]$strDate =if($AddBackupTime -eq $true){Get-Date -Format "_yyyyMMddHHmmss"}else{""}

$Backup.Action=[Microsoft.SqlServer.Management.SMO.BackupActionType]::Database

$Backup.Incremental =$false

$Backup.CompressionOption=$CompressionOption;

$Backup.CopyOnly=$CopyOnly;

foreach ($DB in $Server.Databases | Select-Object -Property Name,IsSystemObject | Where-Object -FilterScript {$_.IsSystemObject -eq $false})

{

$DBName=$DB.Name

if (CheckDB($DBName) -eq $true ) #判断$DBName是否在备份数据库列表中

{

$Backup.Database =$DBName

$Backup.Devices.Clear()

$Backup.Devices.AddDevice($Path+$DBName+$strDate+".bak",[Microsoft.SqlServer.Management.Smo.DeviceType]::File)

$Backup.SqlBackupAsync($Server) #异步处理备份

Write-Host "正在备份 $DBName ... ..." -BackgroundColor Blue -ForegroundColor White

$Backup.Wait() #等待备份完成才继续

Write-Host "完成备份 $DBName .      " -BackgroundColor Green

}

}

[TimeSpan]$Times = (Get-Date) - $StartTime

[String]$Str=if($Times.Hours -eq 0){""}else{$Times.Hours.ToString()+ " 小时 "}

$Str+=if($Times.Minutes -eq 0){""}else{$Times.Minutes.ToString()+" 分钟 "}

$Str+=if($Times.Seconds -eq 0){""}else{$Times.Seconds.ToString()+" 秒 "}

Write-Host "备份总耗时: $Str"

}

Catch

{

Write-Error $_

Write-Host "在备份 $DB 过程中发生错误."   -ForegroundColor Red

}

}

复制代码

调用例子

压缩后备份文件只有1G多。

还原数据库可以参考《PowerShell应用之-批量还原数据库(支持完整,差异,事务日志)》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值