MySQL備份和還原
備份:副本
Raid1,Raid10:保證硬件損壞而不會(huì)業(yè)務(wù)中止
備份類型:
熱備份:讀、寫不受影響
溫備份:僅可以執(zhí)行讀操作
冷備份:離線備份,讀、寫操作均中止
物理備份:復(fù)制數(shù)據(jù)文件
邏輯備份:將數(shù)據(jù)導(dǎo)出至文本文件中
完全備份:備份全部數(shù)據(jù)
增量備份:僅備份上次完全備份或增量備份以后變化的數(shù)據(jù)
差異備份:僅備份上次完全備份以來(lái)變化的數(shù)據(jù)
在線:物理完全備份
備份:數(shù)據(jù)、配置文件、日志、事務(wù)日志
MyISAM:溫備份
InnoDB:xtrabackup,mysaldump
物理備份:速度快
邏輯備份:速度慢、丟失浮點(diǎn)精度,方便使用文本處理工具直接對(duì)其處理,可移植能力強(qiáng)
備份策略:完全+增量;完全+差異
每周完全+每日增量
完全備份:mysqldump
增量備份:備份二進(jìn)制日志文件(flush logs)
MySQL備份工具:
mysqldump:邏輯備份工具、MyISAM(溫)、InnoDB(熱備份)
mysqlhotcopy:物理備份工具、溫備份
文件系統(tǒng)工具:
cp:冷備份
lv:邏輯卷的快照功能,幾乎熱備
mysql>flush tables;
mysql>lock tables
創(chuàng)建快照:釋放鎖,而后復(fù)制數(shù)據(jù)
第三組工具:
ibbackup:商業(yè)工具
xtrabackup:開(kāi)源工具
mysqldump :邏輯備份
備份單個(gè)數(shù)據(jù)庫(kù),或庫(kù)中特定表
mysqldump DB_NAME [tb1] [tb2]
--master-data={0|1|2}
0:不記錄二進(jìn)制日志文件及路徑位置
1:以CHNAGE MASTER TO的方式記錄位置,可用于恢復(fù)后直接啟動(dòng)從服務(wù)器
2:以CHANGE MASTER TO的方式記錄位置,但默認(rèn)為被注釋
--lock-all-tables :鎖定所有表
--flush-logs:執(zhí)行日志flush
--single-transaction啟動(dòng)熱備(指定的數(shù)據(jù)庫(kù)中的表類型為InnoDB)
--all-databases:備份所有庫(kù)
--databases DB_NAME,DB_NAME2,...:備份指定庫(kù)
--events :備份事件
--routines:備份存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)
--triggers:備份觸發(fā)器
mysqldump(完全備份)+二進(jìn)制日志文件
完全+增量
mysqldump --master-data=2 --lock-all-tables --flush-logs --databases DB_NAME >/mysqlback/db_nam-date
備份
select * into outfile '/path/to/somefile.txt' from tb_name [where clause];
還原
load data infile '/path/to/somefile.txt' into table tb_name;
使用lvm快照進(jìn)行數(shù)據(jù)庫(kù)備份
前提:
1、數(shù)據(jù)文件要在邏輯卷上
2、此邏輯卷所在卷組必須有足夠空間使用快照卷
3、數(shù)據(jù)文件和事務(wù)日志要在同一個(gè)邏輯卷上
步驟:
1、打開(kāi)會(huì)話,施加讀鎖,鎖定所有表;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> FLUSH LOGS;
2、通過(guò)另一個(gè)終端,保存二進(jìn)制日志文件及相關(guān)位置信息;
# mysql -uroot -p -e 'SHOW MASTER STATUS\G' > /path/to/master.info
3、創(chuàng)建快照卷
# lvcreate -L # -s -p r -n LV_NAME /path/to/source_lv
4、釋放鎖
mysql> UNLOCK TABLES;
5、掛載快照卷,備份
mount
cp
6、刪除快照卷;
7、增量備份二進(jìn)制日志;
二進(jìn)制日志相關(guān)的幾個(gè)選項(xiàng):
innodb_support_xa={TRUE|FLASE}
存儲(chǔ)引擎事務(wù)在存儲(chǔ)引擎內(nèi)部被賦予了ACID屬性,分布式(XA)事務(wù)是一種高層次的事務(wù),它利用“準(zhǔn)備”然后“提交”(prepare-then-commit)兩段式的方式將ACID屬性擴(kuò)展到存儲(chǔ)引擎外部,甚至是數(shù)據(jù)庫(kù)外部。然而,“準(zhǔn)備”階段會(huì)導(dǎo)致額外的磁盤刷寫操作。XA需要事務(wù)協(xié)調(diào)員,它會(huì)通知所有的參與者準(zhǔn)備提交事務(wù)(階段1)。當(dāng)協(xié)調(diào)員從所有參與者那里收到“就緒”信息時(shí),它會(huì)指示所有參與者進(jìn)行真正的“提交”操作。
此變量正是用于定義InnoDB是否支持兩段式提交的分布式事務(wù),默認(rèn)為啟用。事實(shí)上,所有啟用了二進(jìn)制日志的并支持多個(gè)線程同時(shí)向二進(jìn)制日志寫入數(shù)據(jù)的MySQL服務(wù)器都需要啟用分布式事務(wù),否則,多個(gè)線程對(duì)二進(jìn)制日志的寫入操作可能會(huì)以與原始次序不同的方式完成,這將會(huì)在基于二進(jìn)制日志的恢復(fù)操作中或者是從服務(wù)器上創(chuàng)建出不同原始數(shù)據(jù)的結(jié)果。因此,除了僅有一個(gè)線程可以改變數(shù)據(jù)以外的其它應(yīng)用場(chǎng)景都不應(yīng)該禁用此功能。而在僅有一個(gè)線程可以修改數(shù)據(jù)的應(yīng)用中,禁用此功能是安全的并可以提升InnoDB表的性能。作用范圍為全局和會(huì)話級(jí)別,可用于選項(xiàng)文件,屬動(dòng)態(tài)變量。
sync_binlog = 1