2016-03-28 144 views
5

我試圖從從服務器或MySQL實例爲MySQL數據庫設置每日備份。我的數據庫是InnoDb和MyISAM表的混合體。我在另一臺機器上安裝了AutoMySQLBackup。我正嘗試在AutoMySQLBackup的幫助下從該計算機進行完整備份和每日增量備份MySQL數據庫。使用從備份到遠程機器的AutoMySQLBackup的MySQL備份

+0

和做什麼你想幹什麼? –

+2

這只是爲了您的信息,沒有增量備份myisam ...所以任何工具將採取innodb表增量備份,但隨時myisam表的完整備份.....所以,如果你有任何myisam大表,那麼它可能會有問題。 –

+2

你到目前爲止嘗試過什麼?你在哪個環節遇到麻煩?有什麼特別的錯誤? –

回答

-1

Mysql的完整備份: -

https://dev.mysql.com/doc/mysql-enterprise-backup/3.12/en/mysqlbackup.full.html

在命令行或配置選項文件?

爲了清楚起見,本手冊中的示例經常會顯示與mysqlbackup命令一起使用的一些 命令行選項。對於 的便利性和一致性,可以將大多數備份作業的 保留爲 的那些選項保存到您提供給mysqlbackup的 MySQL配置文件的部分。 mysqlbackup 也會從[mysqld]部分獲取選項,如果它們是 。將選項放入配置文件中可以簡化對您的備份管理:例如,將端口 信息放入配置文件中,每次數據庫實例切換到另一個端口時,都可以避免編輯 您的備份腳本。有關使用配置文件的詳細信息,請參見第14章,配置文件和參數。

單目錄或時間戳子目錄中的輸出?

爲方便起見,--with-timestamp選項會在備份目錄下創建唯一命名的 子目錄,以保存每個 備份作業的輸出。加時間戳的子目錄使得更容易建立保留期,從而可以輕鬆刪除和歸檔已經超過特定年齡的備份數據。

如果確實使用單個備份目錄(即,如果省略了帶有時間戳選項的 ),請爲每個備份作業指定一個新的唯一目錄名稱,或者指定--force選項以覆蓋 現有的備份文件。

對於增量備份使用了--incremental-base選項 指定包含以前的備份目錄,以使 目錄名預測的,你可能更願意不使用 --with時間戳選項並使用備份腳本生成一系列目錄名稱。

始終完全備份或完全備份加增量備份?

如果您的InnoDB數據量很小,或者您的數據庫太忙 在備份之間很大比例的數據更改,您可能希望 每次都運行完整備份。但是,通常可以通過定期完整備份,然後在它們之間運行多個 增量備份來節省時間和存儲空間,如第4.3.2節「製作差異備份或增量備份」中所述。

使用壓縮還是不壓縮?

創建壓縮備份可爲您節省大量存儲空間,並顯着減少I/O使用量。並且隨着LZ4壓縮 方法(從版本3.10開始引入),處理 壓縮的開銷非常低。如果數據庫備份從活動數據庫文件所在的速度更快的磁盤系統移動到可能速度較慢的存儲器,則通常會顯着降低總體備份時間,這種情況下數據庫備份將移動到 。它可能會導致恢復時間減少,如 。一般來說,我們建議大多數用戶使用LZ4壓縮而不壓縮 ,因爲基於LZ4的備份通常在更短的時間內完成,時間爲 。但是,在您的 環境中測試MySQL Enterprise Backup以確定最有效的方法。

增量備份功能主要用於InnoDB表或非InnoDB表,它們是隻讀的或很少更新的。對於非InnoDB文件,如果自上次備份以來該文件發生更改,則整個文件將包含在增量備份中。

無法使用--compress選項執行增量備份。

增量備份檢測InnoDB數據文件中頁面級別的變化,與表格行相反;備份每個已更改的頁面。因此,節省的空間和時間與改變的InnoDB行或列的百分比並不完全成正比。

當InnoDB表被刪除並且您執行後續的增量備份時,應用程序日誌步驟將從完整備份目錄中刪除相應的.ibd文件。由於備份程序無法對非InnoDB文件的用途有同樣的見解,因此在完整備份和後續增量備份之間刪除非InnoDB文件時,應用程序日誌步驟不會將該文件從完整的備份目錄。因此,恢復備份可能會導致刪除的文件重新出現。

創建增量備份只用重做日誌

的--incremental與 - 重做日誌只可能提供了一些 利益--incremental選項用於創建增量備份:

對InnoDB表的更改根據InnoDB重做日誌的內容 確定。由於重做日誌文件的大小固定爲 ,您事先知道該值,因此可能需要較少的I/O來從 中讀取這些更改,而不是掃描InnoDB表空間文件以查找已更改的 頁,具體取決於您的大小數據庫,DML活動的數量, 和重做日誌文件的大小。

由於重做日誌文件作爲循環緩衝器,具有 較早的更改記錄被改寫爲新的DML操作發生,你 必須在一個可預測的時間表新的增量備份的日誌文件的大小決定 併爲您的工作量生成的重做數據量爲 。否則,重做日誌可能無法達到足夠的效果 以記錄自上次增量備份以來的所有更改,在 這種情況下,mysqlbackup將快速確定它不能繼續執行 並將返回錯誤。你的備份腳本應該能夠捕獲到 這個錯誤,然後用 - 增量選項來執行增量備份。

例如:

爲了計算重做日誌的大小,發出命令SHOW VARIABLES LIKE「innodb_log_file%」,並基於該輸出,通過 innodb_log_files_in_group的值乘以 的innodb_log_file_size設置。要計算 物理層的重做日誌大小,請查看MySQL實例 的datadir目錄,並總結與模式ib_logfile *匹配的文件的大小。

InnoDB LSN值對應於寫入 重做日誌的字節數。要在某個時間點檢查LSN,請發出命令 SHOW ENGINE INNODB STATUS並查看LOG標題下的內容。雖然規劃備份策略的步驟爲 ,但要定期記錄LSN值,並從當前值中減去早期值以計算每小時,每天等等生成的重做數據量。

在MySQL 5.5之前,通常的做法是保持重做日誌 相當小,以避免當MySQL服務器被關閉而不是正常關閉時,啓動時間過長。在MySQL 5.5及更高版本中,崩潰恢復的性能顯着提高,如在優化InnoDB配置變量中描述的 ,這樣您可以使 的重做日誌文件變大,如果這有助於您的備份策略和數據庫工作負載。

這種類型的增量備份不太適合太低 --start-lsn值作爲標準增量選項。例如,您無法進行完整備份,然後使用相同的--start-lsn值進行一系列僅使用重做日誌備份的備份。確保將前一次備份的精確結束LSN指定爲下一次增量備份的開始LSN;做 不使用任意值。

注意要確保LSN值完全匹配,這連續 增量備份之間,建議當您使用--incremental與 - 重做日誌,唯一的選擇,你總是使用 --incremental-base選項。

判斷這類型的增量備份的是實用和高效 爲特定的MySQL實例:

測量的是InnoDB內的數據變化有多快重做日誌文件。 定期檢查LSN,以確定在幾小時或幾天的時間內有多少重做數據累積 。

比較重做日誌堆積率與重做日誌文件大小。使用此比率來查看多久進行一次增量備份,以避免備份失敗的可能性,因爲 歷史數據在重做日誌中不可用。例如,如果 每天生成1GB的重做日誌數據,並且重做日誌文件的組合大小 爲7GB,則您會比每週一次更頻繁地計劃增量備份 。您可能會每天或每兩天執行一次增量備份,以避免突發性更新產生更多重做時的潛在問題。同時使用--incremental和

基準增量備份時間 --incremental與 - 重做日誌,唯一的選擇,以確認是否重做日誌備份技術來執行速度更快,具有比傳統 增量備份方法的開銷少。結果可能取決於數據的大小,DML活動的數量以及重做日誌文件的大小。在具有真實數據量和實際工作量的服務器上進行測試。例如,如果您有巨大的重做日誌文件,那麼在增量備份過程中讀取這些日誌文件可能需要 ,只要使用傳統的 遞增技術讀取InnoDB數據文件即可。相反,如果數據量很大,則讀取所有數據文件以查找少量更改的頁面可能比處理小得多的重做日誌文件的效率更低。

增量備份

增量備份功能其他注意事項主要針對InnoDB的 表,或者被非InnoDB表只讀或很少更新。 增量備份檢測InnoDB 數據文件中頁面級別的變化,與表格行相反;每個已更改的頁面都備份爲 。因此,節省的空間和時間並不完全正比於已更改的InnoDB行或列的百分比。

對於非InnoDB的文件,整個文件包括在增量 備份,如果自上次備份,這意味着 這個文件改變了與InnoDB表的情況相比較 當備份資源節約不太顯著。

無法使用--compress選項執行增量備份。

當使用--no-locking選項創建基於備份(完整或增量爲 )的增量備份時,請使用 --skip-binlog選項跳過備份二進制日誌,因爲在該 的情況下,二進制日誌信息將不可用於mysqlbackup。增量備份

這個例子的

例子使用mysqlbackup使MySQL服務器的增量備份,包括所有的數據庫和表。我們展示了兩個選擇,一個使用--incremental-base選項,另一個使用--start-lsn選項。

使用--incremental-base選項,您不必跟蹤一個備份與另一個備份之間的LSN值。相反,您可以指定前一個備份的目錄(完整或增量),然後mysqlbackup根據較早的備份的元數據計算此備份的起點。因爲您需要一組已知的目錄名稱,所以您可能希望使用硬編碼名稱或在自己的備份腳本中生成一系列名稱,而不是使用--with-timestamp選項。

$ mysqlbackup --defaults-file=/home/pekka/.my.cnf --incremental \ 
    --incremental-base=dir:/incr-backup/wednesday \ 
    --incremental-backup-dir=/incr-backup/thursday \ 
    backup 

...很多行輸出... mysqlbackup:start_lsn:2654255717 mysqlbackup:incremental_base_lsn:2666733462 mysqlbackup:end_lsn:2666736714z

101208十七點14分58秒mysqlbackup:在目錄'/增量備份/週四 mysqlbackup創建備份mysqlbackup完成OK! 請注意,如果上次備份是單個文件而不是目錄備份,則仍可以通過爲dir指定dir:directory_path來使用--incremental-base:您在--backup-dir選項期間提供的臨時目錄的位置完整的備份。

作爲指定--incremental-base = dir:directory_path的替代方法,可以告訴mysqlbackup使用--incremental-base = history從服務器上的backup_history表中記錄的上一次成功備份中查詢end_lsn值:last_backup(這要求最後一次備份是通過連接到服務器的mysqlbackup進行的)。

您還可以使用--start-lsn選項指定增量備份的開始位置。你必須記錄在備份結束時通過mysqlbackup報道以前備份的LSN:

mysqlbackup:能夠分析日誌高達LSN 2654255716 的數量也被記錄在元/ backup_variables.txt文件在備份期間由--backup-dir指定的文件夾中。然後使用--start-lsn選項將該數字提供給mysqlbackup。增量備份包括在指定的LSN之後發生的所有更改。從那時起,以前備份的位置不是很重要,那麼可以使用--with-timestamp自動創建指定的子目錄。

$ mysqlbackup --defaults-file=/home/pekka/.my.cnf --incremental \ 
    --start-lsn=2654255716 \ 
    --with-timestamp \ 
    --incremental-backup-dir=/incr-backup \ 
    backup 

...輸出的多線... mysqlbackup:start_lsn:在目錄 '/增量備份/ 2010-12-08_17-14-48' mysqlbackup創建備份2654255717 mysqlbackup:incremental_base_lsn :2666733462 mysqlbackup:end_lsn:2666736714

101208 17:14:58 mysqlbackup:mysqlbackup完成OK! 要創建增量備份圖像代替,使用下面的命令,與--incremental備份-DIR指定一個臨時目錄,用於存儲備份的元數據和一些臨時文件:

$ mysqlbackup --defaults-file=/home/pekka/.my.cnf --incremental \ 
    --start-lsn=2654255716 \ 
    --with-timestamp \ 
    --incremental-backup-dir=/incr-tmp \ 
--backup-image=/incr-backup/incremental_image.bi 
    backup-to-image 

在以下示例中,雖然

$ mysqlbackup --defaults-file=/home/pekka/.my.cnf --incremental \ 
    --start-lsn=2654255716 \ 
    --with-timestamp \ 
    --incremental-backup-dir=/incr-images \ 
--backup-image=incremental_image1.bi 
    backup-to-image 

https://dev.mysql.com/doc/mysql-enterprise-backup/3.7/en/mysqlbackup.incremental.html

:因爲要創建--backup圖像不提供完整路徑的圖像文件,由--incremental,備份目錄中指定的文件夾下創建的增量備份映像
+3

我不認爲將整個文檔粘貼到stackoverflow是一個好主意。 – Harry