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


