mariadb資料庫備份學習筆記

来源:http://www.cnblogs.com/linuxboke/archive/2016/04/27/5440894.html
-Advertisement-
Play Games

備份類型: 完全備份 部分備份:僅備份其中的一張表或多張表 增量備份:僅備份從上次完全備份或增量備份之後變化的數據部分 熱備份:線上備份,讀寫操作不受影響 溫備份:線上備份,讀操作可繼續進行,但寫操作不允許 冷備份:離線備份,資料庫伺服器離線,備份期間不能為業務提供讀寫服務 物理備份:直接複製數據文 ...


備份類型:

  完全備份

  部分備份:僅備份其中的一張表或多張表

  增量備份:僅備份從上次完全備份或增量備份之後變化的數據部分

  熱備份:線上備份,讀寫操作不受影響

  溫備份:線上備份,讀操作可繼續進行,但寫操作不允許

  冷備份:離線備份,資料庫伺服器離線,備份期間不能為業務提供讀寫服務

  物理備份:直接複製數據文件進行的備份

  邏輯備份:從資料庫中“導出”數據另存而進行的備份

MyISAM: 支持溫備,不支持

InnoDB: 既能熱備又能溫備

 

備份什麼:數據、額外的數據(二進位日誌和InnoDB的事務日誌)、代碼(存儲過程和存儲函數、觸發器、事件調度器等),伺服器配置文件

 

備份時需要考慮的因素:

  持鎖的時長

  備份過程時長

  備份負載

  恢復過程時長

備份方案:完全備份+增量備份

備份方案之備份工具的選擇:

  mysqldump:完全備份,通過備份二進位日誌實現增量備份(InnoDB熱備和溫備,MyISAM溫備)註意資料庫大於1GB的話不推薦這種備份,因為還原時間會過長

  xtrabackup:對InnoDB:熱備,支持完全備份和增量備份,對MyISAM:溫備,只支持完全備份

補充:以下操作都在centos6上進行

 

Usage: mysqldump [OPTIONS] database [tables]

    mysqldump -uroot --database hellodb > /tmp/hellodb.sql(單個資料庫文件備份)

 

 

註意這種方式對MyISAM和InnoDB只支持溫備,先要鎖定備份的資料庫,如果不鎖定備份的同時有寫入數據的操作,會導致恢復時數據不一致

 

在實際生產環境中一定要加一個-l參數,表示對單個資料庫進行備份時,鎖定此資料庫的所有表,-x當對所有資料庫備份時鎖定所有資料庫的所有表

 

所以使用方式應該是這樣: mysqldump -uroot -l --database hellodb > /tmp/hellodb.sql

    對InnoDB要支持熱備的話:mysqldump -uroot --single-transaction --database hellodb > /tmp/hellodb.sql(只有

在開始備份那一刻時已經存在的數據會被備份,備份過程中新加入的數據不會被備份,InnoDB內部有每個數據的時間戳,如果時間戳

大於備份開始時的時間,該數據就會被忽略。如果有數據被刪除且被刪除的時間戳大於備份開始時的時間,該數據就會在備份中被還

原。這樣保證了所有數據的可靠性)

 

其他選項:   -E, --events:備份指定庫的事件調度器

        -R, --routines:備份存儲過程和存儲函數

        --triggers:備份觸發器

 

但是這樣備份過後,資料庫進行了讀寫操作,當資料庫奔潰後,只能還原到備份的時間點,後面的對資料庫的操作不能還原,如果在上

面的命令中加入--master-data=2,就可結合二進位日誌還原到奔潰前的時間點了,此參數的作用是會在備份的sql文件中加入一條數據:

MASTER_LOG_FILE備份那一刻二進位文件是哪個,MASTER_LOG_POS備份到了哪個位置

要還原到奔潰前的那一刻:

    (1)mysqlbinlog  --start-position=20434  (備份那刻起的二進位文件) > 某個目錄下的sql文件 

      註意如果二進位日誌產生了滾動,這需要多次使用mysqlbinlog將後面滾動的二進位日誌導入到sql文件中

    (2)還原前面備份的sql文件

    (3)將第(1)步中的sql文件逐個還原,還原命令mysql -u用戶 -p密碼  < sql文件

 

所以在生產環境中真正要使用的備份命令類似:mysqldump -uroot --all-databases --single-transaction --master-data=2 > /tmp/all.sql

補充:mysqldump做的備份,數據還原時也會產生二進位日誌,這些日誌是不需要的,使用mysql> SET SESSION sql_log_bin=0

命令關閉二進位日誌,還原後再開啟二進位日誌

 

接下來說說怎麼使用xtrabackup:www.percona.com上有該軟體的下載(此處我下載的是centos6的rpm包)

yum -y install epel-release (xtrabackup有些依賴的包在epel源中)

yum -y install percona-xtrabackup-2.3.4-1.el6.x86_64.rpm

查看生成了哪些包

 

使用xtrabackup對innodb做熱備,為了使xtrabackup的某些功能能夠實現(即對單張表備份本文不做介紹),得先在mariadb的配置文件中開啟一個參數innodb_file_per_table=ON 在配置文件中定義,這個參數的作用是把innodb的單張表存儲為單個的文件

 

首先對整個資料庫進行全庫備份: innobackupex --user=root --password='' /root/backup/      

在備份的文件中找到xtrabackup_checkpoints這個文件,less xtrabackup_checkpoints

 

backup_type = 說明此次備份是完全備份還是增量備份  full-prepared 表示完全備份

 

看到最後的completed ok就表示備份成功了:


在現在只需根據以前的資料庫創建一個全新的資料庫和一個跟原來資料庫相同的配置文件,並且保證放置數據的目錄為空就可將整個資料庫還原了

還原之前首先得對原來備份的文件進行整理,使用命令:innobackupex --apply-log /root/backup/2016-04-27_05-25-45/,最

後同樣要看到completed ok 才表示整理完畢

還原前要先停掉mariadb,使用還原命令: innobackupex --copy-back /root/backup/2016-04-27_05-25-45/,同樣要看到

completed ok才算還原成功,註意我是使用預設的root用戶還原的,因此數據目錄所屬的用戶組和用戶都是root,使用chown -R

mysql.mysql ./*  將屬組和用戶都改為mysql(不然mariadb會啟動不了)

 

使用xtrabackup做增量備份,同樣跟上面一樣先執行一次完全備份,執行增量備份命令:

innobackupex --incremental /root/backup/ --incremental-basedir=/root/backup/2016-04-27_06-37-51

--incremental 指定增量備份的存儲位置  --incremental-basedir 基於哪個備份文件做增量備份

 

還原的時候,先去整理完全備份innobackupex --apply-log --redo-only /root/backup/2016-04-27_06-37-51/

 

補充:當mariadb使用Innodb存儲引擎時會使用記憶體中的一段空間取名叫做buffer pool,是mariadb用來存儲產生的事務(包含已提

交和未提交的事務),所有事務都會被立即記錄到磁碟中的事務日誌文件中 資料庫奔潰或終止時產生一個結果,提交的事務可能只保存

在內存當中,但沒有同步到磁碟文件中去,當mariadb重啟時會自動將已提交的事務同步到磁碟文件中去,未能正常提交的事務做回滾

 使用inobackupex備份時,innodb的事務(包括已經提交的事務和未提交的事務)也會被記錄下來,當使用xtrabackup還原時

會將已提交的事務同步到磁碟文件中去,未能正常提交的事務做回滾操作,做增量備份時第一次完全備份未提交的事務不應該回滾,因

為到最後增量備份還原時此前未提交的事務可能已經提交了因此上面--redo-only的作用就是只“重放”已經提交的事務,將已提交的事務同步到磁碟文件

 

整理第一次增量備份:innobackupex --apply-log  /root/backup/2016-04-27_06-37-51/ --incremental-dir=/root/backup/2016-04-27_06-42-59/

每次對增量的整理時前面都得先是完全備份的目錄,然後才是增量備份的目錄

我這裡只做了一次增量備份,如果有多次增量備份只有最後一次整理不用--redo-only,也就是最後一次整理把所有未提交的事務都回滾

最後的還原#innobackupex --copy-back /root/backup/2016-04-27_06-37-51/  (最後指定的目錄是完全備份的目錄)

這就是使用xtrabackup對整個資料庫進行備份

補充:如果要還原到某個時間點(比如奔潰前的時間點)還得藉助二進位日誌

 更正:buffer pool 不只緩存事務,還緩存各種數據


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近開發一個項目需要用到Client(Android)透過Socket與Server通訊,網上有看到Apache封裝好的Socket通訊包,初步學習。 內容主要來源於(MINA官方教程(中文版)) 1.網路應用架構: 基於ApacheMINA的網路應用有三個層次,分別是I/O服務、I/O過濾器和I/ ...
  • Super @interface Super : NSObject @end @implementation Super (void)log{ NSLog(@"super"); } @end Child @interface Child : Super @end @implementation Ch ...
  • Service基礎使用(一) 之前的文章一直介紹Activity的使用,很多知識和用法單一的配合Activity使用,這次將總結Android四大組件之二—— . 本文將要介紹以下內容: 1. Service是什麼 2. 兩種Service啟動 3. Service 前臺服務與Notificatio ...
  • 目標效果 因為系統給我們提供的 UICollectionViewFlowLayout 佈局類不能實現瀑布流的效果,如果我們想實現 瀑布流 的效果,需要自定義一個 UICollectionViewLayout 類,實現瀑布流效果。效果如右圖。 依賴工具: 我們需要一個圖片大小和圖片地址的Josn數據, ...
  • 一、什麼是集合視圖 在iOS6.0之後,蘋果推出了一個新的繼承於UIScrollView的一個視圖,UICollectionView,也被稱之為集合視圖。 圖例: 二、創建UICollectionView 1、UICollectionView跟tableView實現的不同:UICollectionV ...
  • Android的SQL資料庫:安卓提供了輕量級的SQLite資料庫引擎,該引擎可在應用程式中實現持續存儲。這些庫不是獨立的應用程式,它們只是提供高級程式調用。 ...
  • 一、UIApplication 1、簡單介紹 (1)UIApplication對象是應用程式的象徵,一個UIApplication對象就代表一個應用程式。 (2)每一個應用都有自己的UIApplication對象,而且是單例的,如果試圖在程式中新建一個UIApplication對象,那麼將報錯提示。 ...
  • ElasticSearch - 嵌套映射和過濾器 Because nested objects are indexed as separate hidden documents, we can’t query them directly. Instead, we have to use the ne ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...