mysql備份:一,Xtrabackup

資料來自于馬哥?



注明:此工具不能備份出sql語句。另外只能適用innodb存儲引擎。


一、安裝

1、簡介


Xtrabackup是由percona提供的mysql數據庫備份工具,據官方介紹,這也是世界上惟一一款開源的能夠對innodb和xtradb數據庫進行熱備的工具。特點:
(1)備份過程快速、可靠;
(2)備份過程不會打斷正在執行的事務;
(3)能夠基于壓縮等功能節約磁盤空間和流量;
(4)自動實現備份檢驗;
(5)還原速度快;


2、安裝


其最新版的軟件可從?http://www.percona.com/software/percona-xtrabackup/?獲得。本文基于RHEL5.8的系統,因此,直接下載相應版本的rpm包安裝即可,這里不再演示其過程。


二、備份的實現


1、完全備份


# innobackupex --user=DBUSER --password=DBUSERPASS??/path/to/BACKUP-DIR/


如果要使用一個最小權限的用戶進行備份,則可基于如下命令創建此類用戶:
mysql> CREATE USER ’bkpuser’@’localhost’ IDENTIFIED BY ’s3cret’;
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM ’bkpuser’;
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ’bkpuser’@’localhost’;
mysql> FLUSH PRIVILEGES;


使用innobakupex備份時,其會調用xtrabackup備份所有的InnoDB表,復制所有關于表結構定義的相關文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相關文件,同時還會備份觸發器和數據庫配置信息相關的文件。這些文件會被保存至一個以時間命令的目錄中。


在備份的同時,innobackupex還會在備份目錄中創建如下文件:
(1)xtrabackup_checkpoints —— 備份類型(如完全或增量)、備份狀態(如是否已經為prepared狀態)和LSN(日志序列號)范圍信息;


每個InnoDB頁(通常為16k大小)都會包含一個日志序列號,即LSN。LSN是整個數據庫系統的系統版本號,每個頁面相關的LSN能夠表明此頁面最近是如何發生改變的。


(2)xtrabackup_binlog_info —— mysql服務器當前正在使用的二進制日志文件及至備份這一刻為止二進制日志事件的位置。


(3)xtrabackup_binlog_pos_innodb —— 二進制日志文件及用于InnoDB或XtraDB表的二進制日志文件的當前position。


(4)xtrabackup_binary —— 備份中用到的xtrabackup的可執行文件;


(5)backup-my.cnf —— 備份命令用到的配置選項信息;


在使用innobackupex進行備份時,還可以使用--no-timestamp選項來阻止命令自動創建一個以時間命名的目錄;如此一來,innobackupex命令將會創建一個BACKUP-DIR目錄來存儲備份數據。


2、準備(prepare)一個完全備份


一般情況下,在備份完成后,數據尚且不能用于恢復操作,因為備份的數據中可能會包含尚未提交的事務或已經提交但尚未同步至數據文件中的事務。因此,此時數據文件仍處理不一致狀態。“準備”的主要作用正是通過回滾未提交的事務及同步已經提交的事務至數據文件也使得數據文件處于一致性狀態。


innobakupex命令的--apply-log選項可用于實現上述功能。如下面的命令:


# innobackupex --apply-log??/path/to/BACKUP-DIR
如果執行正確,其最后輸出的幾行信息通常如下:
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
120407??9:01:36??InnoDB: Starting shutdown...
120407??9:01:40??InnoDB: Shutdown completed; log sequence number 92036620
120407 09:01:40??innobackupex: completed OK!


在實現“準備”的過程中,innobackupex通常還可以使用--use-memory選項來指定其可以使用的內存的大小,默認通常為100M。如果有足夠的內存可用,可以多劃分一些內存給prepare的過程,以提高其完成速度。




3、從一個完全備份中恢復數據


innobackupex命令的--copy-back選項用于執行恢復操作,其通過復制所有數據相關的文件至mysql服務器DATADIR目錄中來執行恢復過程。innobackupex通過backup-my.cnf來獲取DATADIR目錄的相關信息。


# innobackupex --copy-back??/path/to/BACKUP-DIR
如果執行正確,其輸出信息的最后幾行通常如下:
innobackupex: Starting to copy InnoDB log files
innobackupex: in '/backup/2012-04-07_08-17-03'
innobackupex: back to original InnoDB log directory '/mydata/data'
innobackupex: Finished copying back files.


120407 09:36:10??innobackupex: completed OK!


請確保如上信息的最行一行出現“innobackupex: completed OK!”。


當數據恢復至DATADIR目錄以后,還需要確保所有數據文件的屬主和屬組均為正確的用戶,如mysql,否則,在啟動mysqld之前還需要事先修改數據文件的屬主和屬組。如:


# chown -R??mysql:mysql??/mydata/data/




三、使用innobackupex進行增量備份


每個InnoDB的頁面都會包含一個LSN信息,每當相關的數據發生改變,相關的頁面的LSN就會自動增長。這正是InnoDB表可以進行增量備份的基礎,即innobackupex通過備份上次完全備份之后發生改變的頁面來實現。


要實現第一次增量備份,可以使用下面的命令進行:


# innobackupex --incremental /backup --incremental-basedir=BASEDIR


其中,BASEDIR指的是完全備份所在的目錄,此命令執行結束后,innobackupex命令會在/backup目錄中創建一個新的以時間命名的目錄以存放所有的增量備份數據。另外,在執行過增量備份之后再一次進行增量備份時,其--incremental-basedir應該指向上一次的增量備份所在的目錄。


需要注意的是,增量備份僅能應用于InnoDB或XtraDB表,對于MyISAM表而言,執行增量備份時其實進行的是完全備份。


“準備”(prepare)增量備份與整理完全備份有著一些不同,尤其要注意的是:
(1)需要在每個備份(包括完全和各個增量備份)上,將已經提交的事務進行“重放”。“重放”之后,所有的備份數據將合并到完全備份上。
(2)基于所有的備份將未提交的事務進行“回滾”。


于是,操作就變成了:
# innobackupex --apply-log --redo-only BASE-DIR


接著執行:
# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1


而后是第二個增量:
# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2


其中BASE-DIR指的是完全備份所在的目錄,而INCREMENTAL-DIR-1指的是第一次增量備份的目錄,INCREMENTAL-DIR-2指的是第二次增量備份的目錄,其它依次類推,即如果有多次增量備份,每一次都要執行如上操作;


四、Xtrabackup的“流”及“備份壓縮”功能


Xtrabackup對備份的數據文件支持“流”功能,即可以將備份的數據通過STDOUT傳輸給tar程序進行歸檔,而不是默認的直接保存至某備份目錄中。要使用此功能,僅需要使用--stream選項即可。如:


# innobackupex --stream=tar??/backup | gzip > /backup/`date +%F_%H-%M-%S`.tar.gz


甚至也可以使用類似如下命令將數據備份至其它服務器:
# innobackupex --stream=tar??/backup | ssh?? "cat -??> /backups/`date +%F_%H-%M-%S`.tar"?


此外,在執行本地備份時,還可以使用--parallel選項對多個文件進行并行復制。此選項用于指定在復制時啟動的線程數目。當然,在實際進行備份時要利用此功能的便利性,也需要啟用innodb_file_per_table選項或共享的表空間通過innodb_data_file_path選項存儲在多個ibdata文件中。對某一數據庫的多個文件的復制無法利用到此功能。其簡單使用方法如下:
# innobackupex --parallel??/path/to/backup


同時,innobackupex備份的數據文件也可以存儲至遠程主機,這可以使用--remote-host選項來實現:
# innobackupex --remote-host=root@ww?agedu.com /path/IN/REMOTE/HOST/to/backup






五、導入或導出單張表


默認情況下,InnoDB表不能通過直接復制表文件的方式在mysql服務器之間進行移植,即便使用了innodb_file_per_table選項。而使用Xtrabackup工具可以實現此種功能,不過,此時需要“導出”表的mysql服務器啟用了innodb_file_per_table選項(嚴格來說,是要“導出”的表在其創建之前,mysql服務器就啟用了innodb_file_per_table選項),并且“導入”表的服務器同時啟用了innodb_file_per_table和innodb_expand_import選項。


(1)“導出”表
導出表是在備份的prepare階段進行的,因此,一旦完全備份完成,就可以在preparef過程中通過--export選項將某表導出了:
# innobackupex --apply-log --export /path/to/backup


此命令會為每個innodb表的表空間創建一個以.exp結尾的文件,這些以.exp結尾的文件則可以用于導入至其它服務器。


(2)“導入”表
要在mysql服務器上導入來自于其它服務器的某innodb表,需要先在當前服務器上創建一個跟原表表結構一致的表,而后才能實現將表導入:
mysql> CREATE TABLE mytable (...)??ENGINE=InnoDB;


然后將此表的表空間刪除:
mysql> ALTER TABLE mydatabase.mytable??DISCARD TABLESPACE;


接下來,將來自于“導出”表的服務器的mytable表的mytable.ibd和mytable.exp文件復制到當前服務器的數據目錄,然后使用如下命令將其“導入”:
mysql> ALTER TABLE mydatabase.mytable??IMPORT TABLESPACE;




六、使用Xtrabackup對數據庫進行部分備份


Xtrabackup也可以實現部分備份,即只備份某個或某些指定的數據庫或某數據庫中的某個或某些表。但要使用此功能,必須啟用innodb_file_per_table選項,即每張表保存為一個獨立的文件。同時,其也不支持--stream選項,即不支持將數據通過管道傳輸給其它程序進行處理。


此外,還原部分備份跟還原全部數據的備份也有所不同,即你不能通過簡單地將prepared的部分備份使用--copy-back選項直接復制回數據目錄,而是要通過導入表的方向來實現還原。當然,有些情況下,部分備份也可以直接通過--copy-back進行還原,但這種方式還原而來的數據多數會產生數據不一致的問題,因此,無論如何不推薦使用這種方式。


(1)創建部分備份


創建部分備份的方式有三種:正則表達式(--include), 枚舉表文件(--tables-file)和列出要備份的數據庫(--databases)。


(a)使用--include
使用--include時,要求為其指定要備份的表的完整名稱,即形如databasename.tablename,如:
# innobackupex --include='^mageedu[.]tb1'??/path/to/backup


(b)使用--tables-file
此選項的參數需要是一個文件名,此文件中每行包含一個要備份的表的完整名稱;如:
# echo -e 'mageedu.tb1\nmageedu.tb2' > /tmp/tables.txt
# innobackupex --tables-file=/tmp/tables.txt??/path/to/backup


(c)使用--databases
此選項接受的參數為數據名,如果要指定多個數據庫,彼此間需要以空格隔開;同時,在指定某數據庫時,也可以只指定其中的某張表。此外,此選項也可以接受一個文件為參數,文件中每一行為一個要備份的對象。如:
# innobackupex --databases='mageedu.tb1 testdb"??/path/to/backup


(2)整理(preparing)部分備份


prepare部分備份的過程類似于導出表的過程,要使用--export選項進行:
# innobackupex --apply-log --export??/pat/to/partial/backup


此命令執行過程中,innobackupex會調用xtrabackup命令從數據字典中移除缺失的表,因此,會顯示出許多關于“表不存在”類的警告信息。同時,也會顯示出為備份文件中存在的表創建.exp文件的相關信息。


(3)還原部分備份


還原部分備份的過程跟導入表的過程相同。當然,也可以通過直接復制prepared狀態的備份直接至數據目錄中實現還原,不要此時要求數據目錄處于一致狀態。




本文轉自 吃草的青蛙 51CTO博客,原文鏈接:http://blog.51cto.com/tlinux/1747277,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/540002.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540002.shtml
英文地址,請注明出處:http://en.pswp.cn/news/540002.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

51服務的開啟方式

服務開啟方式的知識點見博文:http://blog.csdn.net/zengmingen/article/details/49425161步驟: 1、新建Android項目名“51服務的開啟方式” 2、新建一個類 MyService,繼承 Service 3、在清單文件里配置第二步建的service 4、在Myservice類中覆…

java mysql 存儲圖片_Java存儲圖片到Mysql

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓【1】視圖層action"${ctx}/web/UserInforServlet?methoduserInforServlet" >更換頭像立即提交重置var layer,upload,form;//1-頁面數據加載$(function () {//【1】加載&初始化layui模塊-彈出層與table數據表格la…

JavaWeb應用配置文件安全解決方案

這里主要說說JavaWeb應用的配置文件安全,通常JavaWeb應用多多少少會有一些配置文件,其中數據源的配置則是關系到數據庫的安全,另外還有一些基于文件的權限配置,應用程序的一些系統參數。鑒于這樣的情況,如果配置文件被…

java 免費cms_開源 免費 java CMS

Bug修復:1.菜單管理:刪除操作按鈕后不能直接進行刪除菜單操作。2.刪除單位時操作記錄不顯示單位名稱問題。3.站點管理:改變所屬站點增加改變為一級站點功能,上傳非圖片logo時雖然提示但仍上傳成功問題。4.模板文件管理:點擊查看/下…

Android加載大圖片不OutOfMemoryError

Android加載圖片時,對于分辨率小,配置低的機子,很容易發生OutOfMemoryError。手機的內存比圖片的大很多,怎么會這樣? 在設置Android虛擬機的內存時: RAM:模擬器的內存空間 VM Heap:…

任務計劃、chkconfig工具、systemd管理服務、unit、target

比如備份數據或者重啟服務。 crontab -u、-e、-l、-r(刪除) 格式:分 時 日 月 周 user command 文件/var/spool/cron/username 分范圍0-59,時范圍0-23,日范圍1-31,月范圍1-12,周1-7 可用格式1-5…

vue打卡日歷_Vue日歷

new Vue({el: ‘#calendar‘,data: {currentDay: 1,currentMonth: 1,currentYear: 1970,currentWeek: 1,days: [],addDay: [],},created: function() {this.initData(null);var $this this;//請求數據$.ajax({url: "這里填接口名稱",type: "POST",data: {…

android Intent機制詳解

原文出處:http://blog.csdn.net/t12x3456/article/details/7688154 什么是Intent Intent是一種運行時綁定(run-time binding)機制,它能在程序運行過程中連接兩個不同的組件。通過Intent,你的程序可以向Android表達某種…

python基本數據類型(四)-集合與運算符-python3筆記

1.集合 2.字典 3.運算符優先級 1.集合 創建:() set() 注意:創建空的集合要用set() 特點:元素唯一,無序 運算: &(交集) |(并集) -(差集&#xff0…

Android的權限

Android有四種權限: 1、Permission 權限 2、Root權限 3、Bootloader的解鎖 4、Radio(基帶)解鎖 ------------------------------------ 1、Permission 我們在開發中經常使用到 Permission 權限,即一系列"Android.Permission.*"對象。…

hive2 java連接_用Java代碼通過JDBC連接Hiveserver2

1.在終端啟動hiveserver2#hiveserver22.使用beeline連接hive另外打開一個終端,輸入如下命令(xavierdb必須是已經存在的數據庫)#beeline -u jdbc:hive2://localhost:10000/xavierdb -n hive -p hive3.添加maven依賴org.apache.hivehive-jdbc1.1.0junitjunit4.9org.ap…

java 向上拋異常_Java 異常的處理方式throws

在昨天的文章《Java 異常的分類與處理》中我們簡單地了解了一下在方法聲明的位置上使用throws關鍵字向上拋出異常,下面深入講解異常的第一種處理方式throws。下面深入講解異常的第一種處理方式throws。看以下例子:import java.io.*;public class Excepti…

Jquery mobile 解決IOS9selectli閃退問題

升級IOS9后&#xff0c;JQuery mobile 出現了個bug問題。<select>&#xff0c;<ul><li></li></ul> 出現閃退。 解決方法&#xff1a; 必須加在 jquery.js 和 jquerymobile.js 中間 <script src"......../...../jquery-2.0.0.min.js&qu…

JAVA通過SSL證書創建MS AD賬戶及設置密碼

近期由于工作需要整理一下自動化的東西&#xff0c;因為公司去年上線了OA&#xff0c;所以公司的入職系統會提交用戶的信息到IT部門&#xff0c;最早的做法是入職到了&#xff0c;IT部門收集用戶信息在AD中創建對應的用戶信息&#xff0c;所以為了提高管理員的工作效率&#xf…

java 實體類規范_實體類的規范

1.Boolean類型1.1.使用Boolean類型,而不是Byte類型1.2.數據庫字段名使用is_開頭1.3.實體類字段名不使用is開頭例子/*** 是否為新消息*/Column(name "is_new_message", nullable false)private Boolean newMessage;2.Enum類型1.使用Convert注解, 并指定coverter類例…

01電話撥號器

實例非常簡單&#xff0c;意在體驗Android的Intent&#xff0c;用戶權限。 Intent 見 http://blog.csdn.net/zengmingen/article/details/49586045 用戶權限 見 http://blog.csdn.net/zengmingen/article/details/49586569 --------------------------------------------------…

微信小程序筆記六模塊化 —— module.exports

微信小程序中所有 js 文件作用域皆為獨立的&#xff0c;每一個 js 文件即為一個模塊。模塊與模塊之間的引用通過 module.exports 或 exports 對外暴露接口。 注意&#xff1a; exports 是 module.exports 的一個引用&#xff0c;因此在模塊里邊隨意更改 exports 的指向會造成未…

java常用的統計_(OJ)Java常用類-統計數字次數

統計數字次數Problem Description命令行輸入一個由數字組成的任意字符串,統計出每個數字出現的次數。Input Description1239586838Output Description0 counts:01 counts:12 counts:13 counts:24 counts:05 counts:16 counts:17 counts:08 counts:39 counts:1解題代碼import ja…

02發送短信

使用SmsManager發送短信java.lang.Object ?android.telephony.SmsManagerManages SMS operations such as sending data, text, and pdu SMS messages. Get this object by calling the static method SmsManager.getDefault().管理短信操作&#xff0c;如發送數據&#xff…

Python運行環境與異常處理

Python的命令格式&#xff1a; python [option] ... [-c cmd | -m mod | file | -] [arg] ... 選項描述-J 啟動將從Python3中刪除或更改某些功能的警告 -B阻止在導入時創建.pyc或.pyo文件-E忽略環境變量-h打印所有可用命令行選項的列表-i在程序執行后進入交互模式-m module以腳…