溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

使用Powershell實(shí)現(xiàn)數(shù)據(jù)庫自動化運(yùn)維

發(fā)布時(shí)間:2020-06-21 13:53:15 來源:網(wǎng)絡(luò) 閱讀:16505 作者:UltraSQL 欄目:數(shù)據(jù)庫

使用Powershell實(shí)現(xiàn)數(shù)據(jù)庫自動化運(yùn)維


目前市場上針對SQLServer的圖書,好的原創(chuàng)圖書屈指可數(shù),翻譯的圖書較多,但只限于專門針對SQL Server數(shù)據(jù)庫本身的開發(fā)、管理和商業(yè)智能。


而針對PowerShell的圖書,可以說大多為MSDN里的學(xué)習(xí)筆記,主要針對Windows操作系統(tǒng)的管理。

微軟在大的布局和技術(shù)動向來看,力推云平臺。而平臺化的基礎(chǔ)是自動化、高可用。那么細(xì)化到最基礎(chǔ)的技術(shù)著眼點(diǎn),微軟正在大力開發(fā)其所有服務(wù)器端產(chǎn)品對 PowerShell的支持。針對SQL Server來說,運(yùn)用好PowerShell這項(xiàng)技能來將管理任務(wù)自動化,才能實(shí)現(xiàn)進(jìn)一步的平臺化,它是云平臺的基石。


國外大力推廣的DEVOPS、開發(fā)型運(yùn)維,不僅僅讓數(shù)據(jù)庫管理員或系統(tǒng)管理員局限于手工來操作繁雜的日常工作,這樣風(fēng)險(xiǎn)極大。學(xué)習(xí)PowerShell來提升腳本開發(fā)能力,讓日常工作化繁為簡,是大勢所趨。


我翻譯了一本微軟MVP的《PowerShell V3 -- SQL Server 2012數(shù)據(jù)庫自動化運(yùn)維權(quán)威指南》,這本書涉及的知識點(diǎn)非常全面、實(shí)用性很強(qiáng)。對SQL Server DBA來說,是提高數(shù)據(jù)庫管理技能的利器。


下面我通過兩個(gè)實(shí)例來講解下,使用PowerShell如何實(shí)現(xiàn)對SQL Server和MongoDB的自動化運(yùn)維的。


一、 恢復(fù)SQL Server數(shù)據(jù)庫到一個(gè)時(shí)間點(diǎn)


在本方案中,我們將使用不同備份文件恢復(fù)到一個(gè)時(shí)間點(diǎn)。


準(zhǔn)備


在本方案中,我們將使用AdventureWorks2008R2數(shù)據(jù)庫。你也可以選擇你的開發(fā)環(huán)境中的你更喜歡的數(shù)據(jù)庫。


AdventureWorks2008R2數(shù)據(jù)庫有一個(gè)包含一個(gè)單獨(dú)數(shù)據(jù)庫文件的文件組。我們將使用來自以下三種不同的備份類型的三個(gè)不同備份文件,來基于時(shí)間點(diǎn)恢復(fù)數(shù)據(jù)庫到另一個(gè)SQL Server實(shí)例:

  • 完整備份

  • 差異備份

  • 事務(wù)日志備份


我們可以使用PowerShell,像在之前的方案描述的,在AdventureWorks2008R2數(shù)據(jù)庫上創(chuàng)建這三種類型的備份。如果你對T-SQL相當(dāng)熟悉,你也可以使用T-SQL備份命令。


為了幫助我們驗(yàn)證是否基于時(shí)間點(diǎn)的恢復(fù)的結(jié)果是我們期待的,在做任何類型的備份之前,創(chuàng)建一個(gè)時(shí)間戳標(biāo)識的表。相應(yīng)的,創(chuàng)建一個(gè)表,并在備份前插入一個(gè)時(shí)間戳標(biāo)識的記錄到表中。


將這些備份放在C:\Backup\目錄。

使用Powershell實(shí)現(xiàn)數(shù)據(jù)庫自動化運(yùn)維


你可以使用下面的腳本來創(chuàng)建你的文件,6464 - Ch06 - 10 - Restore a database to a point in time - Prep.ps1,它包含在本書的可下載文件中。當(dāng)腳本執(zhí)行完整后,你應(yīng)該在AdventureWorks2008R2數(shù)據(jù)庫中有時(shí)間戳標(biāo)識的Student表,以一分鐘的間隔創(chuàng)建,類似于下面的截屏:

(譯者注:可以從https://www.packtpub.com/books/content/support/10233下載該書代碼。)


使用Powershell實(shí)現(xiàn)數(shù)據(jù)庫自動化運(yùn)維


對于我們的方案,我們將恢復(fù)AdventureWorks2008R2數(shù)據(jù)庫到另一個(gè)實(shí)例,KERRIGAN\SQL01,到2015-07-27 02:51:59。意味著,在基于時(shí)間點(diǎn)的恢復(fù)完成后,我們將只有四個(gè)時(shí)間戳標(biāo)識的Student表在KERRIGAN\SQL01在恢復(fù)的數(shù)據(jù)庫上:

  • StudentFull_201507270247

  • StudentDiff_201507270249

  • StudentTxn_201507270250

  • StudentTxn_201507270251


如何做…


為了使用完整、差異和一些事務(wù)日志文件恢復(fù)到一個(gè)時(shí)間點(diǎn),遵循如下步驟:

1. 通過“Start | Accessories | Windows PowerShell | Windows PowerShell ISE”打開PowerShell控制臺。


2. 導(dǎo)入SQLPS模塊:  

#import SQL Server module    
Import-Module SQLPS -DisableNameChecking


3. 添加如下腳本并運(yùn)行:  

$instanceName = "KERRIGAN\SQL01"    
$server = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server -ArgumentList $instanceName    
#backupfilefolder    
$backupfilefolder = "C:\Backup\"    
#look for the last full backupfile    
#you can be more specific and specify filename    
$fullBackupFile =     
Get-ChildItem $backupfilefolder -Filter "*Full*" |    
Sort -Property LastWriteTime -Descending |    
Select -Last 1    
#read the filelist info within the backup file    
#so that we know which other files we need to restore    
$smoRestore = New-Object Microsoft.SqlServer.Management.Smo.Restore    
$smoRestore.Devices.AddDevice($fullBackupFile.FullName, [Microsoft.SqlServer.Management.Smo.DeviceType]::File)    
$filelist = $smoRestore.ReadFileList($server)    
#read headers of the full backup file,     
#because we are restoring to a default instance, we will    
#need to specify we want to move the files    
#to the default data directory of our KERRIGAN\SQL01 instance    
$relocateFileList = @()    
$relocatePath = "C:\Program Files\Microsoft SQL Server\MSSQL11.SQL01\MSSQL\DATA"    
#we are putting this in an array in case we have     
#multiple data and logfiles associated with the database    
foreach($file in $fileList)    
{    
#restore to different instance    
#replace default directory path for both     
$relocateFile = Join-Path $relocatePath (Split-Path $file.PhysicalName -Leaf)    
$relocateFileList += New-Object Microsoft.SqlServer.Management.Smo.RelocateFile($file.LogicalName, $relocateFile)    
}    
#let's timestamp our restored databasename    
#this is strictly for testing our recipe    
$timestamp = Get-Date -Format yyyyMMddHHmmss    
$restoredDBName = "AWRestored_$($timestamp)"    
#====================================================    
#restore the full backup to the new instance name    
#====================================================    
#note we have a NoRecovery option, because we have    
#additional files to restore    
Restore-SqlDatabase `    
-ReplaceDatabase `    
-ServerInstance $instanceName `    
-Database $restoredDBName `    
-BackupFile $fullBackupFile.FullName `    
-RelocateFile $relocateFileList `    
-NoRecovery    
#====================================================    
#restore last differential    
#note the database is still in Restoring State    
#====================================================    
#using PowerShell V2 Where syntax    
$diffBackupFile =     
Get-ChildItem $backupfilefolder -Filter "*Diff*" |    
Where {$_.LastWriteTime -ge $fullBackupFile.LastWriteTime} |    
Sort -Property LastWriteTime -Descending |    
Select -Last 1    
Restore-SqlDatabase `    
-ReplaceDatabase `    
-ServerInstance $instanceName `    
-Database $restoreddbname `    
-BackupFile $diffBackupFile.FullName `    
-NoRecovery    
#====================================================    
#restore all transaction log backups from last    
#differential up to 2015-07-27 02:51:59    
#====================================================    
#identify the last txn log backup file we need to restore    
#we need this so we can specify point in time    
$lastTxnFileName = "AdventureWorks2008R2_Txn_201507270251"    
$lastTxnBackupFile =     
Get-ChildItem $backupfilefolder -Filter "*$lastTxnFileName*"    
#restore all transaction log backups after the     
#last differential, except the last transaction    
#backup that requires the point-in-time restore    
foreach ($txnBackup in Get-ChildItem $backupfilefolder -Filter     
"*Txn*" |     
Where {$_.LastWriteTime -ge $diffBackupFile.LastWriteTime -and     
$_.LastWriteTime -lt $lastTxnBackupFile.LastWriteTime} |    
Sort -Property LastWriteTime)    
{    
Restore-SqlDatabase `    
-ReplaceDatabase `    
-ServerInstance $instanceName `    
-Database $restoreddbname `    
-BackupFile $txnBackup.FullName `    
-NoRecovery     
}     
#restore last txn backup file to point in time    
#restore only up to 2015-07-27 02:51:59    
#this time we are going to restore using with recovery    
Restore-SqlDatabase `    
-ReplaceDatabase `    
-ServerInstance $instanceName `    
-Database $restoreddbname `    
-BackupFile $lastTxnBackupFile.FullName `    
-ToPointInTime "2015-07-27 02:51:59"


如何實(shí)現(xiàn)…


在本方案中,我們使用Restore-SqlDatabase cmdlet,與Backup-SqlDatabase相對的cmdlet在SQL Server 2012中被介紹。


讓我們從高層概覽下如何實(shí)施時(shí)間點(diǎn)恢復(fù),然后我們可以細(xì)化,并解釋包含在本方案中的片段:

1. 收集你的備份文件。

  • 識別包含你想恢復(fù)的時(shí)間點(diǎn)的最后事務(wù)日志備份文件。


2. 恢復(fù)最后的好的完整備份使用NORECOVERY。


3. 恢復(fù)最后的在完整備份后的差異備份使用NORECOVERY。


4. 恢復(fù)在差異備份后的事務(wù)日志備份:

  • 使用NORECOVERY恢復(fù),直到包含你想恢復(fù)的時(shí)間點(diǎn)的日志文件備份。你需要恢復(fù)最后的日志文件備份到一個(gè)時(shí)間點(diǎn),也就是說,你需要指定需要恢復(fù)的時(shí)間。最后,使用WITH RECOVERY恢復(fù)數(shù)據(jù)庫,使得數(shù)據(jù)庫可訪問并以備使用。

  • 或者,你可以使用NORECOVERY恢復(fù)所有的事務(wù)日志備份文件,在包含你想恢復(fù)到的時(shí)間點(diǎn)的日志備份前。接下來,使用WITH RECOVERY恢復(fù)最后的日志備份到一個(gè)時(shí)間點(diǎn),那就是說,你需要指定恢復(fù)到何時(shí)。


步驟1 – 收集你的備份文件


你需要收集你的備份文件。它們不必位于相同的目錄或驅(qū)動設(shè)備,但這樣理想些,這樣可以簡化你的恢復(fù)腳本,你將有一個(gè)統(tǒng)一的目錄或驅(qū)動設(shè)備去參照。你也需要這些文件的讀許可權(quán)限。


在我們的方案,我們簡化了這個(gè)步驟。我們收集了完整,差異和事務(wù)日志備份文件,存儲它們到C:\Backup\目錄,易于訪問。如果你的備份文件位于不同的位置,你只需要適當(dāng)?shù)恼{(diào)整你腳本的參照目錄。


一旦有了這些備份文件,假設(shè)你遵循著文件命名規(guī)范,你可以過濾你目錄中的所有完整備份。在我們的示例中,我們使用命名規(guī)范databasename_type_timestamp.bak。對于這個(gè)方案,我們通過在文件名中指定關(guān)鍵字或匹配模式來抽取完整備份文件。我們使用Get-ChildItem過濾最新的完整備份文件:

#look for the last full backupfile
#you can be more specific and specify filename
$fullBackupFile =
Get-ChildItem $backupfilefolder -Filter "*Full*" |
Sort -Property LastWriteTime -Descending |
Select -Last 1


一旦你有了完整備份的句柄,你可以讀取存儲在備份文件中的文件列表。你可以使用SMO Restore對象的ReadFileList方法。讀取文件列表可以幫助你通過抽取你需要恢復(fù)的數(shù)據(jù)和日志文件的文件名來實(shí)現(xiàn)自動化。

#read the filelist info within the backup file
#so that we know which other files we need to restore
$smoRestore = New-Object Microsoft.SqlServer.Management.Smo.Restore
$smoRestore.Devices.AddDevice($fullBackupFile.FullName, [Microsoft.
SqlServer.Management.Smo.DeviceType]::File)
$filelist = $smoRestore.ReadFileList($server)


當(dāng)讀取文件列表時(shí),你可以抽取的一個(gè)屬性是存儲的文件的類型:

使用Powershell實(shí)現(xiàn)數(shù)據(jù)庫自動化運(yùn)維


不同的類型為:

  • L代表日志文件

  • D代表數(shù)據(jù)文件

  • F代表全文目錄


步驟2 – 使用NORECOVERY恢復(fù)最后的好的完整備份


在恢復(fù)操作的第一步是恢復(fù)最后的已知好的完整備份。這提供了你一個(gè)基線,基于此你可以恢復(fù)額外的文件。NORECOVERY選項(xiàng)非常重要,它保持(或不回滾)未提交的事務(wù),并允許額外的文件被恢復(fù)。我們將會使用NORECOVERY選項(xiàng)在我們真?zhèn)€恢復(fù)過程中。


因?yàn)橥暾麄浞菘偸堑谝粋€(gè)需要恢復(fù)的文件,所有的準(zhǔn)備工作需要就緒,此時(shí)移動文件也開始。


對于我們的方案,我們想去恢復(fù)數(shù)據(jù)庫,從源默認(rèn)實(shí)例KERRIGAN到另一個(gè)實(shí)例KERRIGAN\SQL01。因此,我們需要移動我們的文件,從存儲我們備份文件的路徑,到我們想去使用的新路徑。在這個(gè)例子中,我們只想從默認(rèn)實(shí)例的默認(rèn)數(shù)據(jù)目錄,移動到命名實(shí)例KERRIGAN\SQL01的數(shù)據(jù)目錄。我們從文件列表的原始數(shù)據(jù)和日志文件獲取完整的路徑,使用我們想去恢復(fù)到的新位置來替代完整路徑。在下面片段中的高亮代碼顯示了如何修改位置:

$relocateFileList = @()

$relocatePath = "C:\Program Files\Microsoft SQL Server\MSSQL11.SQL01\

MSSQL\DATA"

#we are putting this in an array in case we have

#multiple data and logfiles associated with the database

foreach($file in $fileList)

{

#restore to different instance

#replace default directory path for both

$relocateFile = Join-Path $relocatePath (Split-Path $file.

PhysicalName -Leaf)

$relocateFileList += New-Object Microsoft.SqlServer.Management.

Smo.RelocateFile($file.LogicalName, $relocateFile)

}


注意,我們的數(shù)組包含了Microsoft.SqlServer.Management.Smo.RelocateFile對象,將包含我們數(shù)據(jù)庫文件的邏輯和(重定位的)物理文件名。

$relocateFileList += New-Object Microsoft.SqlServer.Management.Smo.
RelocateFile($file.LogicalName, $relocateFile)


為了恢復(fù)我們的數(shù)據(jù)庫,我們只使用Backup-SqlDatabase cmdlet。這里有一對很重要的選項(xiàng),像RelocateFile和NoRecovery。

#restore the full backup to the new instance name
#note we have a NoRecovery option, because we have
#additional files to restore
Restore-SqlDatabase `
-ReplaceDatabase `
-ServerInstance $instanceName `
-Database $restoredDBName `
-BackupFile $fullBackupFile.FullName `
-RelocateFile $relocateFileList `
-NoRecovery


步驟3 – 在完整備份恢復(fù)完后,使用NORECOVERY恢復(fù)最后的好的差異備份

一旦完整備份恢復(fù),你可以添加最后的好的差異備份跟隨著完整備份。他并不是一個(gè)集成的過程,因?yàn)樵谶@點(diǎn)上我們已經(jīng)恢復(fù)了基礎(chǔ)數(shù)據(jù)庫并重定位了我們的文件。我們需要使用NORECOVERY恢復(fù)差異備份,阻止未提交的事務(wù)被回滾:

#using PowerShell V2 Where syntax

$diffBackupFile =

Get-ChildItem $backupfilefolder -Filter "*Diff*" |

Where {$_.LastWriteTime -ge $fullBackupFile.LastWriteTime} |

Sort -Property LastWriteTime -Descending |

Select -Last 1

Restore-SqlDatabase `

-ReplaceDatabase `

-ServerInstance $instanceName `

-Database $restoreddbname `

-BackupFile $diffBackupFile.FullName `

-NoRecovery


注意,在你的環(huán)境中,你可能有,也可能沒有一個(gè)差異備份文件。如果沒有,不用擔(dān)心,它不會影響到你的可恢復(fù)性,只要所有的事務(wù)日志文件可用于恢復(fù)。


步驟4 – 在恢復(fù)差異備份后恢復(fù)事務(wù)日志


在我們恢復(fù)了差異備份文件,我們開始恢復(fù)我們的事務(wù)日志備份文件。這些事務(wù)日志備份文件應(yīng)該是跟隨著你的差異備份。你可能需要,或不需要跟隨著差異備份的日志文件的完整集合。如果你需要恢復(fù)直到數(shù)據(jù)庫故障點(diǎn),你將需要恢復(fù)所有的事務(wù)日志備份包括尾日志備份。如果不是,你只需要知道你想恢復(fù)的事件點(diǎn)的備份文件。


對于我們的方案,我們識別出我們想去恢復(fù)的最后日志備份文件。這很重要,因?yàn)槲覀冃枰廊绾问褂肞ointInTime參數(shù),當(dāng)我們使用這個(gè)特定的事務(wù)日志備份文件時(shí)。

#identify the last txn log backup file we need to restore
#we need this so we can specify point in time
$lastTxnFileName = "AdventureWorks2008R2_Txn_201507270252"
$lastTxnBackupFile =
Get-ChildItem $backupfilefolder -Filter "*$lastTxnFileName*"


對于所有其他的事務(wù)日志備份文件,我們遍歷所有的備份目錄,恢復(fù)所有的在最后差異備份后的,在我們想去恢復(fù)的最后事務(wù)日志備份文件之前的所有.txn文件。我們也需要通過WriteTime參數(shù)來排序這些文件,以便于我們依次恢復(fù)它們到數(shù)據(jù)庫。注意,我們需要使用NORECOVERY恢復(fù)所有的這些文件。

foreach ($txnBackup in Get-ChildItem $backupfilefolder -Filter "*Txn*"

|

Where {$_.LastWriteTime -ge $diffBackupFile.LastWriteTime -and

$_.LastWriteTime -lt $lastTxnBackupFile.LastWriteTime} |

Sort -Property LastWriteTime)

{

Restore-SqlDatabase `

-ReplaceDatabase `

-ServerInstance $instanceName `

-Database $restoreddbname `

-BackupFile $txnBackup.FullName `

-NoRecovery

}


一旦所有的這些文件恢復(fù)后,然后我們準(zhǔn)備恢復(fù)最后的事務(wù)日志文件。一旦這個(gè)文件恢復(fù),數(shù)據(jù)庫需要可訪問,所有的未提交事務(wù)需要被回滾。


有兩個(gè)方法去實(shí)現(xiàn)。第一個(gè)方法,我們在這個(gè)方案中使用的,是去使用ToPointInTime參數(shù)恢復(fù)最后的文件,并且不使用NoRecovery參數(shù)。

Restore-SqlDatabase `
-ReplaceDatabase `
-ServerInstance $instanceName `
-Database $restoreddbname `
-BackupFile $lastTxnBackupFile.FullName `
-ToPointInTime "2015-07-27 02:51:59"


另一個(gè)方法是恢復(fù)最后的事務(wù)日志文件,也使用NoRecovery,但是在最后添加另一個(gè)命令,使用WITH RECOVERY恢復(fù)該數(shù)據(jù)庫。實(shí)際上,一直以來使用NORECOVERY恢復(fù)所有需要的事務(wù)日志備份文件更為安全。它更安全,是因?yàn)楫?dāng)我們突然使用WITH RECOVERY恢復(fù)一個(gè)文件,糾正它的唯一方法是重做整個(gè)恢復(fù)過程。這可能對于小型數(shù)據(jù)庫沒多大關(guān)系,但是對于大型數(shù)據(jù)庫可能非常消耗時(shí)間。


一旦我們確認(rèn)所有需要的文件已經(jīng)被恢復(fù),我們就可以使用WITH RECOVERY來恢復(fù)數(shù)據(jù)庫。在我們的方案中,一個(gè)方法是使用T-SQL語句,并傳遞該語句到Invoke-Sqlcmd:

#get the database out of Restoring state
#make the database accessible
$sql = "RESTORE DATABASE $restoreddbname WITH RECOVERY"
Invoke-Sqlcmd -ServerInstance $instanceName -Query $sql


RESTORE DATABASE命名使得我們的數(shù)據(jù)庫從一個(gè)正在恢復(fù)中的狀態(tài),到可訪問和以備使用狀態(tài)。RESTORE命名回滾了所有未完成的事務(wù),并讓數(shù)據(jù)庫以備使用。


二、 使用PowerShell調(diào)用MTools分析MongoDB性能并發(fā)送郵件


在MongoDB日常運(yùn)維中,經(jīng)常需要查看連接數(shù)的趨勢圖、慢查詢、Overflow語句、連接來源。任何數(shù)據(jù)庫的DBA都應(yīng)該對數(shù)據(jù)庫情況進(jìn)行定期的巡檢,以清楚了解數(shù)據(jù)庫的運(yùn)行情況,健康狀況,隱患等等。MTools工具應(yīng)運(yùn)而生,它帶給DBA極大地幫助。


Mtools簡介


Mtools是由MongoDB Inc 官方工程師所寫,設(shè)計(jì)之初是為了方便自己的工作,但是隨著MongoDB用戶的增加,越來越多的朋友也開始使用Mtools,也越來越感受到Mtools帶來的便捷。


Github地址如下:

Mtools github地址


Mtools主要有以下組件:

  • mlogfilter

  • mloginfo

  • mplotqueries

  • mlogvis

  • mlaunch

  • mgenerate


首先,我們來簡單介紹下 mlogfilter,mloginfo和mplotqueries。


mlogfileter我們可以簡單理解為日志的過濾器,參數(shù)如下:


mlogfilter [-h] [--version] logfile [logfile ...]

[--verbose] [--shorten [LENGTH]]

[--human] [--exclude] [--json]

[--timestamp-format {ctime-pre2.4, ctime, iso8601-utc, iso8601-local}]

[--markers MARKERS [MARKERS ...]] [--timezone N [N ...]]

[--namespace NS] [--operation OP] [--thread THREAD]

[--slow [SLOW]] [--fast [FAST]] [--scan]

[--word WORD [WORD ...]]

[--from FROM [FROM ...]] [--to TO [TO ...]]


示例:

通過mlogfilter查詢?nèi)罩局心硞€(gè)表的slow log(超過100ms的)

mlogfilter --namespace xxx.xx --slow 100 mongod.log-20160611


mloginfo可以過濾總結(jié)出slow query的情況,以及為日志中各類最常常出現(xiàn)情況進(jìn)行統(tǒng)計(jì),參數(shù)如下:


mloginfo [-h] [--version] logfile

[--verbose]

[--queries] [--restarts] [--distinct] [--connections] [--rsstate]


示例:

通過mloginfo統(tǒng)計(jì)日志中connections的來源情況

mloginfo mongod.log-20160611 --connections


mplotqueries相對復(fù)雜一些,功能是可以根據(jù)需求畫圖,以便更直觀的找出問題或者隱患所在,參數(shù)如下:


mplotqueries [-h] [--version] logfile [logfile ...]

[--group GROUP]

[--logscale]

[--type {nscanned/n,rsstate,connchurn,durline,histogram,range,scatter,event} ]

[--overlay [ {add,list,reset} ]]

[additional plot type parameters]


示例:

通過mplotqueries對連接情況進(jìn)行分析,時(shí)間塊單位1800(30min)

mplotqueries mongod.log-20160611 --type connchurn --bucketsize 1800 --output-file 01-9.png


解決方案


筆者將在Windows上安裝MTools工具來分析mongod.log日志,然后通過Powershell發(fā)送郵件。

1. 將Windows備份機(jī)目錄掛載到MongoDB本地目錄下,將LogRotate切換后的最新一個(gè)日志拷貝到備份目錄。

參考博文:《在Linux下掛載Windows系統(tǒng)共享目錄》


2. 在Windows服務(wù)器上安裝Mtools。

參考博文:《在64位Windows Server 2008 R2上安裝mtools》


3. 編寫PowerShell腳本,通過Mtools分析日志文件,并發(fā)送郵件。

Github源碼地址:https://github.com/UltraSQL/MongoDBDailyReport.git


使用方法:

a) 將DBA模塊放到相應(yīng)的Modules\DBA目錄下。

b) 在配置文件中加載模塊:Import-Module DBA -Force。

c) 創(chuàng)建任務(wù)計(jì)劃,定時(shí)執(zhí)行該MTools.ps1腳本。  
使用Powershell實(shí)現(xiàn)數(shù)據(jù)庫自動化運(yùn)維

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI