4種備份恢復(fù)的方式
- mysqldump
- mysqlbackup
- mysqlhotcopy
- xtrabackup/innobackupex
mysqldump
在日常工作中鹿寻,我們會(huì)經(jīng)常使用mysqldump
的命令來創(chuàng)建SQL格式的轉(zhuǎn)儲(chǔ)文件來備份數(shù)據(jù)庫(kù)蚀浆,或者我們把數(shù)據(jù)導(dǎo)出后做數(shù)據(jù)遷移甜攀,主備搭建等操作荠医。mysqldump
是一個(gè)邏輯備份工具暑劝,復(fù)制原始的數(shù)據(jù)庫(kù)對(duì)象定義和表數(shù)據(jù)產(chǎn)生一組可執(zhí)行的SQL語句侣肄。默認(rèn)情況下生成insert語句瑞躺,也能生成其他分隔符的輸出或XML格式的文件蚜印。
使用方法:
shell> mysqldump [arguments] > filename.sql
備份所有的數(shù)據(jù)庫(kù)
shell > mysqldump --all-databases > all_databases.sql
#不包含系統(tǒng)自帶的庫(kù)INFORMATION_SCHEMA,performance_schema,sys
備份指定數(shù)據(jù)庫(kù)
shell > mysqldump --databases db1 db2 db3 > db.sql
# 如果只包含一個(gè)數(shù)據(jù)庫(kù)莺禁,可以省略 --databases 直接使用mysqldump db1 > db1.sql
#區(qū)別:不加 --databases的話,數(shù)據(jù)庫(kù)轉(zhuǎn)儲(chǔ)輸出不包含創(chuàng)建數(shù)據(jù)庫(kù)的語句和use語句窄赋,所以可以直接導(dǎo)入到其他名字的數(shù)據(jù)庫(kù)里哟冬。
備份指定表
mysqldump --user[username] --password=[password] [databases name] [table name] > table_name.sql
幾個(gè)重要的參數(shù)
mysqlbackup
mysqlbackup是Oracle公司提供的針對(duì)企業(yè)的備份軟件,全稱MySQL Enterprise Backup,是一個(gè)收費(fèi)軟件忆绰。
全量備份
mysqlbackup --user=root --password=ucjmh --databases='t1' --encrypt-password=1 --with-timestamp --backup-dir=/u01/backup/ backup
解釋一下參數(shù):
databases 要備份的數(shù)據(jù)庫(kù)
with-timestamp 產(chǎn)生一個(gè)當(dāng)前時(shí)間的備份目錄浩峡。mysqlbackup這個(gè)工具要求一個(gè)空目錄才能做備份。所以這個(gè)會(huì)常用错敢。
backup-dir 備份的目錄 翰灾。
compress:壓縮備份 這個(gè)提供了多種壓縮方法和壓縮級(jí)別。1--9,壓縮比依次遞增稚茅。
backup 是備份的方式纸淮, 一共有如下幾種方式
Backup operations: backup, backup-and-apply-log, backup-to-image
Update operations: apply-log, apply-incremental-backup
Restore operations: copy-back, copy-back-and-apply-log
Validation operation: validate
Single-file backup operations: image-to-backup-dir, backup-dir-to-image, list-image, extract
其實(shí),在大多數(shù)情況下,單個(gè)文件備份,使用backup-to-image命令創(chuàng)建,性能優(yōu)于backup亚享。buckup這個(gè)命令只執(zhí)行一個(gè)完整的備份過程的初始階段咽块。需要通過再次運(yùn)行mysqlbackup運(yùn)用apply-log 命令,使備份一致欺税。
mysqlbackup --user=root --password=ucjmh --databases='t1' --encrypt-password=1 --with-timestamp --backup-dir=/u01/backup/2017-04-28_12-49-35/ apply-log
當(dāng)然你可以直接用backup-and-apply-log 不過這個(gè)時(shí)候的備份將不能用于增量了侈沪。
增量備份
mysqlbackup --user=root --password=ucjmh --databases='t1' --encrypt-password=1 --with-timestamp --backup-dir=/u01/backup/ --incremental --incremental-base=dir:/u01/backup/2017-04-28_12-49-35 --incremental-backup-dir=/u01/backup/incremental backup
這個(gè)是基于上次的備份做的備份,當(dāng)然也可以基于某一個(gè)log position之后做晚凿。
--incremental:代表增量備份亭罪;
--incremental-base:上次全備的目錄;
--incremental-backup-dir:增量備份的保存的目錄
backup-to-image
mysqlbackup --user=root --password=ucjmh --databases='t1' --encrypt-password=1 --with-timestamp --backup-dir=/u01/backup/ --backup-image=all.mbi backup-to-image
備份之后可以很清楚的發(fā)現(xiàn)這個(gè)比backup要節(jié)省很多空間晃虫,把所有的文件都以二進(jìn)制的方式放在了all.mbi這個(gè)文件里皆撩,可以使用list-image來查看具體內(nèi)容扣墩。
mysqlhotcopy
mysqlhotcopy使用lock tables哲银、flush tables和cp或scp來快速備份數(shù)據(jù)庫(kù).它是備份數(shù)據(jù)庫(kù)或單個(gè)表最快的途徑,完全屬于物理備份,但只能用于備份MyISAM存儲(chǔ)引擎和ARCHIVE引擎扛吞,并且是一個(gè)服務(wù)器命令,只能運(yùn)行在數(shù)據(jù)庫(kù)目錄所在的機(jī)器上.與mysqldump備份不同,mysqldump屬于邏輯備份,備份時(shí)是執(zhí)行的sql語句.使用mysqlhotcopy命令前需要要安裝相應(yīng)的軟件依賴包.
備份一個(gè)庫(kù)
mysqlhotcopy db_name [/path/to/new_directory]
備份一張表
mysqlhotcopy db_name./table_name/ /path/to/new_directory
xtrabackup/innobackupex
Percona XtraBackup是一款基于MySQL的熱備份的開源實(shí)用程序荆责,它可以備份5.1到5.7版本上InnoDB,XtraDB,MyISAM存儲(chǔ)引擎的表滥比, Xtrabackup有兩個(gè)主要的工具:xtrabackup、innobackupex 做院。
(1)xtrabackup只能備份InnoDB和XtraDB兩種數(shù)據(jù)表盲泛,而不能備份MyISAM數(shù)據(jù)表
(2)innobackupex則封裝了xtrabackup,是一個(gè)腳本封裝键耕,所以能同時(shí)備份處理innodb和myisam寺滚,但在處理myisam時(shí)需要加一個(gè)讀鎖。
首先我們先來簡(jiǎn)單的了解一下xtrabackup是怎么工作的屈雄。xtrabackup基于innodb的crash-recovery(實(shí)例恢復(fù))功能村视,先copy innodb的物理文件(這個(gè)時(shí)候數(shù)據(jù)的一致性是無法滿足的),然后進(jìn)行基于redo log進(jìn)行恢復(fù)酒奶,達(dá)到數(shù)據(jù)的一致性蚁孔。
全備
xtrabackup --backup --target-dir=/data/backup/base
增量備份
當(dāng)我們做過全量備份以后會(huì)在目錄下產(chǎn)生xtrabackup_checkpoints的文件 這里面記錄了lsn和備份方式,我們可以基于這次的全量做增量的備份惋嚎。
$cat xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 1676085
last_lsn = 1676085
compact = 0
recover_binlog_info = 0
xtrabackup --backup --target-dir=/data/backup/inc1 --incremental-basedir=/data/backup/base
這個(gè)時(shí)候xtrabackup也是去打開了xtrabackup_checkpoints文件進(jìn)行上一次備份的信息查看杠氢。這個(gè)時(shí)候去查看增量備份的xtrabackup_checkpoints也記錄了這些信息。
$cat xtrabackup_checkpoints
backup_type = incremental
from_lsn = 1676085
to_lsn = 1676085
last_lsn = 1676085
compact = 0
recover_binlog_info = 0
這也意味著你可以在增量的備份上繼續(xù)增量的備份另伍。
同樣的鼻百,xtrabackup也支持壓縮(--compress)、加密(--encrypt)摆尝、并行(--parallel)等操作愕宋,但是和mysqlbackup不同的是這個(gè)沒有同時(shí)的備份binlog,而mysqlbackup是備份了binlog的。