本人新書上市,請多多關照:《SQL Server On Linux運維實戰 2017版從入門到精通》
簡介
備份和還原的重要性這裏就不多說了,但是需要額外提醒一下,備份和還原應該總是“一個”操作,不考慮還原的備份不能認爲是有價值的備份。
本文重點在Linux上的SQL Server備份,關於Windows上的SQL Server備份,網上已經有很多成熟的資料,這裏就不累贅了。
備份的本質就是把數據庫的數據頁/區寫到磁盤上的文件上。這就引出了一個常見的備份失敗——執行備份操作的賬號(通常是SQL 引擎服務賬號)的權限不夠,無法寫入對應的文件中。
所以首先要檢查執行備份操作的賬號是否有對Linux的備份文件目錄有寫入權限。在SQL Server中,在SQL Server裏面的賬號操作,實際上是映射成操作系統的某些賬號如Windows上的Administrator(不建議使用)或者Linux上默認的賬號“mssql”,這些賬號對備份還原操作過程的權限是否足夠是一個首要關注點。
當談及非特權用戶的權限時,我們應該要堅持“具體問題具體分析”的原則。要以文件/文件夾爲基礎條件來談及用戶的權限,脫離了這些談權限是不合理的。
其實Linux上的備份和Windows上的大同小異,重點是瞭解Linux文件系統。
備份演示
SQL On Linux的默認備份目錄在“/var/opt/mssql/data”,那麼現在以之前創建的一個linux用戶“superdbadmin”來查看一下目錄的權限,在CentOS中可以使用:
~$ ll /var/opt/mssql/data
但是在Ubuntu中要使用:
-$ ls -al /var/opt/mssql/data
第一次執行報錯,見下圖,Permission denied!權限不夠,很自然地加上了sudo,現在可以看到了。
那麼爲什麼要加sudo呢?可以再看一下上圖左下角長方形框住的地方。可以看到這些文件夾默認是不允許其他非特權用戶訪問的,因此要加sudo提升權限。
另外可以看看SSMS中的服務器屬性:圖中框住的地方是灰色,即不可改,這是跟Windows平臺其中一個不一樣的地方。在Linux上,通常還是要用mssql-conf命令來做。
不管是哪個平臺,我們在條件允許的前提下都不會把備份文件夾和數據庫文件所在的文件夾放在一起,可以考慮在根目錄下創建比如/Data的目錄專用於存儲備份,也可以簡單地在/var下創建目錄與數據文件分開。由於演示環境的限制,這裏演示在/var下創建名爲sqlbackup的目錄。
爲了達到這個目的,一共分成3步:創建一個新的目錄(含配置權限)、修改默認備份目錄、校驗。
- 創建新的備份目錄
使用下面命令在/var下創建名爲sqlbackup的目錄,如下圖,
~$ sudo mkdir /var/sqlbackup
然後使用~$ ls /var
來檢查是否創建成功,然後再使用~$ ls -al /var命令查看權限:
上圖的權限顯示,新目錄的owner是root,爲了讓SQL Server能使用這個目錄,需要把owner切換成mssql。這裏使用chown命令修改文件、目錄及其鏈接的owner和組。因爲默認情況下,owner是創建者:
~$ sudo chown mssql /var/sqlbackup
此時目錄的Owner已經修改成mssql,但是處於安全考慮,root比較太大了,而且容易誤操作,所以還要修改目錄的組的owner:
~$ sudo chgrp mssql /var/sqlbackup
從下圖可以看出文件夾的組也已經修改成mssql:
創建目錄並配置權限之後,就可以使用mssql-conf工具來修改SQL Server的默認路徑。
- 修改默認路徑
修改路徑通過在Linux上使用mssql-conf工具來實現。該工具默認位於/opt/mssql/bin/下:
~$ sudo /opt/mssql/bin/mssql-conf set filelocation.defaultbackupdir /var/sqlbackup
執行之後,會有一個提示要求重啓SQL Server服務,如下圖:
按照提示重啓服務之後,再次打開SSMS的服務器屬性界面,可以看到已經修改成功,如圖:
到目前爲止,備份的準備工作已經完成,當然我們可以不修改路徑然後直接備份到有權限或者已經授權給mssql的目錄,不過作爲有效的運維手段,並不建議在日常工作中過多地覆蓋默認值。
- 備份數據庫
備份操作與Windows上的SQL Server幾乎沒有差異,可以使用SSMS來實現,也可以在SQLCMD中實現,最大的區別就在於路徑而已。
圖形化操作就略過了,下面在SQLCMD中演示一下,由於前面已經修改了默認路徑,所以這裏不需要額外指定文件的具體路徑,當然如果你覺得無所謂,也可以指定,備份結束後,我們再檢查文件夾的內容及權限,可見下圖所示:
到此爲止,備份操作已經完畢。接下來演示還原操作。
小結
在Linux上備份數據庫,從SQL Server角度看來是一樣的,但是要注意Linux的文件目錄和權限控制。
從最佳實踐來看,不建議放在默認的地方,因爲不管Windows還是Linux,默認路徑都不是非常適合存放用戶的東西。