主頁 > 資料庫 > 資料庫學習之十一:mysql 備份恢復

資料庫學習之十一:mysql 備份恢復

2020-09-15 08:05:45 資料庫

十一、mysql 備份恢復

課程大綱

1、備份的原因

2、備份的方式

3、備份的工具

4、mysqldump備份工具的詳解

5、mysqldump+mysqlbinlog實作增量備份

6、企業級備份策略及恢復案例

7、xtrabackup備份恢復實戰

運維作業的核心簡單概括就兩件事:

第一個是保護公司的資料,

第二個是讓網站能7*24小時提供服務(用戶體驗),

1、備份的型別

冷備份:關閉資料、停止業務

溫備份:枷鎖備份

熱備份:在線備份,不會影響業務,

2、備份方式

邏輯備份:

基于sql陳述句的備份:

①mysqldump--》建庫,建表,資料插入

②基于二進制日志:資料庫的所有變化類的操作,

③基于復制的備份:將二進制日志實時傳遞到另一臺機器并且恢復,

物理備份:

①xtrabackup 進行物理備份

②拷貝資料檔案(冷備)

3、備份工具:

①mysqldump

mysql原生自帶很好用的邏輯備份工具

②mysqlbinlog(根據始末position位置進行截取備份)

實作binlog備份的原生態命令

③xtrabackup

percona公司開發的性能很高的物理備份工具

mysqldump備份工具優缺點:

優點:邏輯備份工具,都是sql陳述句,都是文本格式,便于查看和編輯,便于壓縮,

缺點:備份較慢,效率低,

mysqldump引數介紹:

-u -p -S -h -P

-A, 全庫備份

例子:

[root@centos6-kvm3 ~]# mysqldump -uroot -poldboy123 -A >/backup/mysqlfull.sql

單庫備份:

-B,增加建庫(create)及’use庫‘的陳述句,在將來恢復時,不需要手工建庫和use庫,

-B 選項還可以實作,同時備份多個庫,備份到同一個檔案中,(空格隔開)

[root@centos6-kvm3 ~]# mysqldump -uroot -poldboy123 -B lufei >/backup/mysqllufei.sql

[root@centos6-kvm3 ~]# mysqldump -uroot -poldboy123 lufei >/backup/mysqllufei1.sql

不加-B,恢復時候需要先創建庫,use庫下再進行恢復,

不加-B ,去備份他庫下的一個單表的意思,

生成環境下,也要加的額外引數:

-R:備份存盤程序和函式資料,

--triggers :備份觸發器資料,

-F,--flush-logs :重繪binlog日志,為了方便將來二進制日志截取時的起點,

mysqldump -uroot -poldboy -A -F >/backup/mysqlfull.sql

--master-data=https://www.cnblogs.com/cuiyongchao007/p/{1|2} :告訴你備份時刻的binlog位置,一般我們選擇2,以注釋的方式記錄二進制日志的位置,

mysql> show master status;

鎖表:適合所有引擎(myisam,innodb)

-x,--lock-all-tables

-l,--lock-tables

--single-transaction 對innodb引擎進行熱備

[root@centos6-kvm3 ~]# mysqldump -uroot -poldboy123 -A --master-data=https://www.cnblogs.com/cuiyongchao007/p/2 --single-transaction >/backup/mysqlfull.sql

通過快照的方式實作熱備,

壓縮備份:

[root@centos6-kvm3 ~]# mysqldump -uroot -poldboy123 -A -R --triggers --master-data=https://www.cnblogs.com/cuiyongchao007/p/2 --single-transaction | gzip >/backup/mysqlfull_$(date +%F).sql

4、mysqldump+binlog企業恢復實戰

使用source 命令進行恢復
set sql_log_bin=0;(臨時關閉二進制日志,防止恢復操作記錄到二進制日志中)
source /opt/xxx.sql;
企業實體:
背景環境:
正在運行的網站系統,mysql資料庫,資料量25G,日業務增量10-15M,
備份方式:
每天23:00點,計劃任務呼叫mysqldump執行全備腳本,
故障時間點:
上午10點,誤洗掉了一個表,
如何恢復?
思路:
①斷開業務,防止對資料庫二次傷害,掛出維護頁面,
②搭建備用庫,恢復全備,
③截取昨天晚上23:00之后到上午10點誤洗掉操作之前的二進制日志,
④恢復到備用庫,驗證資料可用性和完整性,
⑤兩種恢復前端應用,
	5.1備用庫匯出誤洗掉的表,匯入到生產庫,開啟業務,
	5.2直接將應用切割刀備用庫,替代生產庫,開啟業務,
模擬故障并恢復:
1、原始資料:
mysql> create database oldboy;
mysql> use oldboy
mysql> create table t1 (id int,name varchar(20));
mysql> insert into t1 values (1,'zhang3');
mysql> insert into t1 values (2,'li4');
mysql> insert into t1 values (3,'wang5');
mysql> commit;
2、模擬前一天晚上23:00全備
mysqldump  -A  -R --triggers --master-data=https://www.cnblogs.com/cuiyongchao007/p/2 --single-transaction |gzip >/backup/all_$(date +%F).sql.gz

3、模擬白天(23:00-10:00)業務對資料的修改
mysql> insert into t1 values (4,'zhang33');
mysql> insert into t1 values (5,'li44');
mysql> insert into t1 values (6,'wang54');
mysql> commit;
4、模擬故障
drop table t1;
5、恢復
(1)準備全備,并獲取到備份檔案中的binlog的截取起點
gunzip all_2018-04-04.sql.gz
	-- CHANGE MASTER TO MASTER_LOG_FILE='my-bin.000004', MASTER_LOG_POS=731;
(2)截取二進制日志
mysqlbinlog --start-position=731  --stop-position=1126 /data/binlog/my-bin.000004 >/backup/binlog.sql
-----
 show binlog events in 'my-bin.000004';  ----》drop之前的position為1126 
-----
(3)恢復全備+binlog
set sql_log_Bin=0;
source /backup/all_2018-04-04.sql;
source /backup/binlog.sql

5、xtrabackup 介紹

Xtrabackup物理備份工具
percona公司的備份工具,性能比較高,物理備份工具,
特點:
物理備份工具,在同級資料量基礎上,都要比邏輯備份性能要好的多,
特別是在資料量比較大的時候,體現的更加明顯,
備份方式:
	1、拷貝資料檔案
	2、拷貝資料頁
備份原理(innodb):
	1、對于innodb表,可以實作熱備
		(1)在資料還有修改操作的時刻,直接將資料檔案中的資料頁備份
		此時,備份走的資料對于當前mysql來講是不一致,
		(2) 將備份程序中的redo和undo一并備走,
		(3)為了恢復的時候,只要保證備份出來的資料頁LSN能和redo LSN匹配,
			將來恢復的就是一致的資料,redo應用和undo的應用,
	2、對與myisam表,實作自動鎖表拷貝檔案,

Xtrabackup軟體安裝:

1、安裝
wget -O /etc/yum.repos.d/epel.repo  http://mirrors.aliyun.com/repo/epel-6.repo
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm
yum -y install percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm

2、全備備份并恢復
mkdir /server/backup  -p

--user=
--password=
--socket=
--no-timestamp 

全備例子:
innobackupex     /server/backup/

innobackupex     --no-timestamp  /server/backup/full

全備恢復例子:

1、恢復資料前的準備(合并xtabackup_log_file和備份的物理檔案)
innobackupex --apply-log --use-memory=32M /server/backup/full/

2、模擬故障
停庫:
pkill mysqld
破壞資料:
cd /application/mysql/data
\rm -rf *

3、恢復
cp -a /server/backup/full/*  /application/mysql/data

或者

innobackupex --copy-back  /server/backup/full/   

注意:恢復時,要確認資料路徑是空的,并且資料庫是停掉的

chown -R mysql.mysql /application/mysql/data

啟動:
/etc/init.d/mysqld start

mysql -e "select * from oldboy.t1"

6、xtrabackup 實作增量備份及故障恢復

xtrabackup 實作增量備份及故障恢復

周日全備,周一到周六做增量

1、周日全備:
mkdir /backup/full
innobackupex --user=root --password=123 --no-timestamp /backup/full/
2、模擬資料變化(周一資料變化)
, 
,
,
3、第一增量(周一晚上增量):
innobackupex --user=root --password=123 --incremental --no-timestamp --incremental-basedir=/backup/full/ /backup/inc1
4、模擬資料變化(周二資料變化)
,
,
,
5、第二次增量(周二晚上增量):
innobackupex --user=root --password=123 --incremental --no-timestamp --incremental-basedir=/backup/inc1 /backup/inc2
6、模擬資料損壞

n多的操作,,,,,
周三上午10:00時刻,洗掉t1表


7、恢復資料:
innobackupex --apply-log  --redo-only /backup/full
innobackupex --apply-log  --redo-only --incremental-dir=/backup/inc1 /backup/full
innobackupex --apply-log  --incremental-dir=/backup/inc2 /backup/full
innobackupex --apply-log  /backup/full

7、xtrabackup生產恢復案例:

背景:
1、xtrabackup備份策略每周日,full全備
2、xtrabackup周一到周六,inc1-inic6
3、總資料量200G
4、周三上午10點誤洗掉表t1,資料量1G左右
5、周二晚上inc2備份完成之后到周三上午10點又做了很多操作

如何將資料庫恢復到t1表誤洗掉之前狀態?

思路:
	1、停業務,掛維護頁
	2、找備用庫
	3、合并full+inc1+inc2
	4、截取周二晚上inc2備份后到周三上午10點,t1表洗掉之前的binlog日志
	5、將合并后的full+截取的binlog恢復到備用庫
	( 根據備份日志最后的position,再根據show binlog events in 'my-bin.000004';獲取最后的position)
	6、驗證資料可用性和完整性
	7、使用備用庫替代生產庫使用或者將t1表匯出并匯入回生產庫
	8、業務恢復

-----------------
-----------------
思考:以上恢復策略是否可以優化?
為了恢復1G表,需要將整個全備恢復,有必要嗎?有什么好的解決辦法?
單獨恢復一個表:

drop table t1;
create table t1 (id int,name varchar(20));
alter table t1 discard tablespace;

cd /application/mysql/data/oldboy
cp /backup/full/oldboy/t1.ibd  ./

chown  -R mysql.mysql *
alter table t1 import tablespace;

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/44462.html

標籤:MySQL

上一篇:資料庫學習之十:mysql日志管理

下一篇:第五天MYSQL

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more