Mysql數(shù)據(jù)庫的備份與還原??
備份對于數(shù)據(jù)庫而言是至關(guān)重要的。當(dāng)數(shù)據(jù)文件發(fā)生損壞、MySQL服務(wù)出現(xiàn)錯誤、系統(tǒng)內(nèi)核崩潰、計算機(jī)硬件損壞或者數(shù)據(jù)被誤刪等事件時,使用一種有效的數(shù)據(jù)備份方案,就可以快速解決以上所有的問題。MySQL提供了多種備份方案,包括:邏輯備份、物理備份、全備份以及增量備份,你可以選擇最適合自己使用的方式備份數(shù)據(jù)。
物理備份通過直接復(fù)制包含有數(shù)據(jù)庫內(nèi)容的目錄與文件實現(xiàn),這種備份方式適用于對重要的大規(guī)模數(shù)據(jù)進(jìn)行備份,并且要求實現(xiàn)快速還原的生產(chǎn)環(huán)境。典型的物理備份就是復(fù)制 MySQL數(shù)據(jù)庫的部分或全部目錄,物理備份還可以備份相關(guān)的配置文件。但采用物理備份需要MySQL處于關(guān)閉狀態(tài)或者對數(shù)據(jù)庫進(jìn)行鎖操作,防止在備份的過程中改變發(fā)送數(shù)據(jù)。物理備份可以使用mysqlbackup對InnoDB數(shù)據(jù)進(jìn)行備份,使用mysqlhotcopy對MyISAM數(shù)據(jù)進(jìn)行備份。另外,也可以使用文件系統(tǒng)級別的cp、scp、tar、rsync等命令。
邏輯備份通過保存代表數(shù)據(jù)庫結(jié)構(gòu)及數(shù)據(jù)內(nèi)容的描述信息實現(xiàn),如,保存創(chuàng)建數(shù)據(jù)結(jié)構(gòu)以及添加數(shù)據(jù)內(nèi)容的SQL語句,這種備份方式適用于少量數(shù)據(jù)的備份與還原。邏輯備份需要查詢MySQL服務(wù)器獲得數(shù)據(jù)結(jié)構(gòu)及內(nèi)容信息,因為需要查詢數(shù)據(jù)庫信息并將這些信息轉(zhuǎn)換為邏輯格式,所以相對于物理備份而言比較慢。邏輯備份不會備份日志、配置文件等不屬于數(shù)據(jù)庫內(nèi)容的資料。邏輯備份的優(yōu)勢在于不管是服務(wù)層面、數(shù)據(jù)庫層面還是數(shù)據(jù)表層面的備份都可以實現(xiàn),由于是以邏輯格式存儲的,所以這種備份與系統(tǒng)、硬件無關(guān)。
全備份將備份某一時刻所有的數(shù)據(jù),增量備份僅備份某一段時間內(nèi)發(fā)生過改變的數(shù)據(jù)。通過物理或邏輯備份工具就可以完成完全備份,而增量備份需要開啟MySQL二進(jìn)制日志,通過日志記錄數(shù)據(jù)的改變,從而實現(xiàn)增量差異備份。
mysqldump參數(shù)大全:https://blog.51cto.com/SongR/7092848
percona-xtrabackup官方站點(diǎn):https://www.percona.com/
?
備份??
關(guān)于備份的原因?
防止丟失和誤刪
備份的目標(biāo)?
1.數(shù)據(jù)的一致性
2.服務(wù)的可用性
備份技術(shù)?
物理備份/冷備份
直接復(fù)制數(shù)據(jù)庫文件,適用于大型數(shù)據(jù)庫環(huán)境,不受存儲引擎的限制,但是不能恢復(fù)到不同的MySQL版本。
tar? ? cp? ? ?scp
拷貝數(shù)據(jù)的? ? 優(yōu)點(diǎn)? ? 快??
? ? ? ? ? ? ? ? ? ? ? 缺點(diǎn)? ? 服務(wù)停止 后才可拷貝
邏輯備份/熱備份
備份的是建表,建庫,插入等操作所執(zhí)行SQL語句(DDL? DML DCL), 適用于中小型數(shù)據(jù)庫。
mysqldump? ?mydumper
效率相對比較低
備份種類?
完全備份
土財主專用(金融)
增量備份
?連續(xù)回復(fù)
?
特點(diǎn):
因每次僅備份自上一次備份(注意是上一次,不是第一次)以來有變化的文件,所 以備份體積小,備份速度快,但是恢復(fù)的時候,需要按備份時間順序,逐個備份版本進(jìn)行恢復(fù),恢復(fù)時間長。
差異備份
跳躍恢復(fù)
?
特點(diǎn):
占用空間比增量備份大,比完整備份小,恢復(fù)時僅需要恢復(fù)第一個完整版本和最后 一次的差異版本(包含所有的差異),恢復(fù)速度介于完整備份和增量備份之間。
還原??
?
percona-xtrabackup??
?
Percona XtraBackup是一個開源的MySQL數(shù)據(jù)庫熱備工具,允許你在備份的時候不鎖表。支持備份的存儲引擎有InnoDB, XtraDB, MyISAM ;支持的MySQL版本 5.1 5.5, 5.6 , 5.7;無論是7X24的高負(fù)載數(shù)據(jù)庫環(huán)境,還是低TPS的數(shù)據(jù)庫環(huán)境,Percona XtraBackup都能完成備份而不影響生產(chǎn)環(huán)境
Percona XtraBackup是世界上唯一開源免費(fèi)的MySQL熱備工具,可以對InnoDB 和 XtraDB存儲引擎的表進(jìn)行非堵塞備份。
為mysql做增量備份;在mysql服務(wù)器之間做在線表遷移;使創(chuàng)建replication更加容易;備份mysql而不增加服務(wù)器的負(fù)載。
percona是一家老牌的mysql技術(shù)咨詢公司。它不僅提供mysql的技術(shù)支持、培訓(xùn)、咨詢,還發(fā)布了mysql的分支版本--percona Server。并圍繞percona Server還發(fā)布了一系列的mysql工具。
特點(diǎn)?
1 快速可靠完成備份
2 備份期間不會打斷正在進(jìn)行的事務(wù)
3 由于有壓縮備份選項可以節(jié)省磁盤空間和網(wǎng)絡(luò)帶寬
4 自動的備份校驗
5 更快的恢復(fù)速度,更短的恢復(fù)時間
備份過程?
1.首先拷貝Innodb表的數(shù)據(jù)文件(利用兩個進(jìn)程 一個拷貝文件一個拷貝變化)
2.如果支持 backup lock,利用LOCK TABLE FOR BACKUP拷貝非Innodb表的數(shù)據(jù)文件(percona MySQL 5.6+ 支持oracle的MySQL支持嗎?)
3.使用 LOCK BINLOG FOR ?BACKUP 禁止所有改變Exec_Master_Log_Pos 或 Exec_Gtid_Set的操作。完成redo log的備份和獲取binlog的日志中的坐標(biāo)輸出到備份目錄。然后釋放鎖
?
?實例?
1-1 完全備份流程
#連接數(shù)據(jù)庫,開始備份。
innobackupex --user=root --password='QianFeng@123' /xtrabackup/full
#查看備份目錄。數(shù)據(jù)庫,配置文件,日志文件
ls /xtrabackup/full/
ls /xtrabackup/full/2017-08-01_00-00-02/
#觀看二進(jìn)制日志位置
cat /xtrabackup/full/2017-08-01_00-00-18/xtrabackup_binlog_info?
1-2 完全恢復(fù)流程
#停止數(shù)據(jù)庫
systemctl stop mysqld
#清理環(huán)境(模擬損壞)
rm -rf /var/lib/mysql/*
rm -rf /var/log/mysqld.log?
#生成回滾日志(指定備份點(diǎn))
innobackupex --apply-log /xtrabackup/full/2017-08-01_00-00-18/
#恢復(fù)文件
innobackupex --copy-back /xtrabackup/full/2017-08-01_00-00-18/
#登陸驗證
ls /var/lib/mysql
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld
mysql -uroot -p'QianFeng@123'2-1 增量備份流程
#使用指定數(shù)據(jù)庫
create database testdb;
use testdb;
create table test(id int);
insert into test values (1);
select * from test;?mysql> select * from test; +------+ | id ? | +------+ | ? ?1 | +------+ 1 row in set (0.00 sec)
#完整備份(周一)
rm -rf /xtrabackup/* ; date 09010000 innobackupex --user=root --password='QianFeng@123' /xtrabackup ll /xtrabackup/
#增量備份(周二)
date 09020000 更新時間 mysql -uroot -p'QianFeng@123' -e 'insert into testdb.test values (2)' innobackupex --user=root --password='QianFeng@123' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2017-09-01_00-00-04 basedir基于周一的備份。會生成一個今天的。 ls /xtrabackup/
?2-2 增量恢復(fù)流程
#停止數(shù)據(jù)庫
systemctl stop mysqld
#清理環(huán)境
rm -rf /var/lib/mysql/*
#周一
innobackupex --apply-log --redo-only /xtrabackup/2017-09-01_00-00-04 回滾合并
#周二
innobackupex --apply-log --redo-only /xtrabackup/2017-09-01_00-00-04?
--incremental-dir=/xtrabackup/2017-09-02_00-00-26
#恢復(fù)
innobackupex --copy-back /xtrabackup/2017-09-01_00-00-06 ?
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld
登陸查詢記錄。請思考記錄是第幾天的,想回復(fù)3,怎么辦
?systemctl stop mysqld innobackupex --apply-log --redo-only /xtrabackup/2017-09-01_00-00-04 ? --incremental-dir=/xtrabackup/2017-09-03_00-00-27 # rm -rf /var/lib/mysql/* innobackupex --copy-back /xtrabackup/2017-09-01_00-00-04? chown -R mysql.mysql /var/lib/mysql systemctl start mysqld mysql -uroot -p'QianFeng@123' -e 'select * from testdb.test'
mysqldump + binlog??
?
?文章來源:http://www.zghlxwxcb.cn/news/detail-650688.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-650688.html
到了這里,關(guān)于開源數(shù)據(jù)庫Mysql_DBA運(yùn)維實戰(zhàn) (備份與還原)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!