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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...