国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

mysql 面試(七) 整理之mysql 備份和恢復

2019-11-08 20:58:39
字體:
來源:轉載
供稿:網友

7.1備份計劃,MySQLdump以及xtranbackup的實現原理

(1)備份計劃

(2)備份恢復時間

(3)備份恢復失敗如何處理

原理:

mysqldump

mysqldump屬于邏輯備份。加入--single-transaction選項可以進行一致性備份。后臺進程會先設置session的事務隔離級別為RR(SET SESSIONTRANSACTION ISOLATION LEVEL REPEATABLE READ),之后顯式開啟一個事務(STARTTRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */),這樣就保證了該事務里讀到的數據都是事務事務時候的快照。之后再把表的數據讀取出來。如果加上--master-data=1的話,在剛開始的時候還會加一個數據庫的讀鎖(FLUSH TABLES WITH READ LOCK),等開啟事務后,再記錄下數據庫此時binlog的位置(show masterstatus),馬上解鎖,再讀取表的數據。等所有的數據都已經導完,就可以結束事務。

Xtrabackup:

xtrabackup屬于物理備份,直接拷貝表空間文件,同時不斷掃描產生的redo日志并保存下來。最后完成innodb的備份后,會做一個flush engine logs的操作(老版本在有bug,在5.6上不做此操作會丟數據),確保所有的redo log都已經落盤(涉及到事務的兩階段提交概念,因為xtrabackup并不拷貝binlog,所以必須保證所有的redo log都落盤,否則可能會丟最后一組提交事務的數據)。這個時間點就是innodb完成備份的時間點,數據文件雖然不是一致性的,但是有這段時間的redo就可以讓數據文件達到一致性(恢復的時候做的事情)。然后還需要flush tables with read lock,把myisam等其他引擎的表給備份出來,備份完后解鎖。這樣就做到了完美的熱備。

備份計劃:

視庫的大小來定,一般來說100G內的庫,可以考慮使用mysqldump來做,因為mysqldump更加輕巧靈活,備份時間選在業務低峰期,可以每天進行都進行全量備份(mysqldump備份出來的文件比較小,壓縮之后更小)。

100G以上的庫,可以考慮用xtranbackup來做,備份速度明顯要比mysqldump要快。一般是選擇一周一個全備,其余每天進行增量備份,備份時間為業務低峰期。

備份恢復時間:

物理備份恢復快,邏輯備份恢復慢

備份恢復失敗如何處理:

首先在恢復之前就應該做足準備工作,避免恢復的時候出錯。比如說備份之后的有效性檢查、權限檢查、空間檢查等。如果萬一報錯,再根據報錯的提示來進行相應的調整。

7.1           mysqldump中備份出來的sql,如果我想sql文件中,一行只有一個insert .... value()的話,怎么辦?如果備份需要帶上master的復制點信息怎么辦?

1).--skip-extended-insert

2).--master-date=1

 

7.3    xtrabackup是如何做到帶上master的復制點的信息的?

因為xtrabackup是多線程,一個線程不停地在拷貝新產生的redo文件,另外的線程去備份數據庫,當所有表空間備份完成的時候,它會執行flushtable with read lock操作鎖住所有表,然后執行showmaster status; 接著執行flushengine logs; 最后解鎖表。執行showmaster status; 時就能獲取到mster的復制點信息,執行flush engine logs 強制把redo文件刷新到磁盤。

 

7.4 MySQL數據庫備份方式有那幾種(只討論InnoDB存儲引擎),至少寫四種。

1、關服務,直接拷貝ibd、frm、redolog、my.cnf

2、select ... into outfile;對應load data infile 恢復

   fileds terminated by 'x';每個列的分隔符。默認'/t'

   optionally encolsed by 'x';字符串的包含符。默認''

   escaped by 'x':轉義符,默認為'//'

   starting by 'x';每行的開始符。默認''

   terminated by 'x':每行結束符。默認'/n'

 

3、mysqldump:對應mysql恢復

  single-transaction:備份開始先執行start transaction

     但不能有DDL操作,否則無法保證一致性讀

  master-data:如果沒有指定single-transaction,則用lock-all-tables

      1:顯示masterstatus,并且changemaster

      2:只顯示change,但不執行

 

mysqlimport:與load data infile類似,但支持導入多個表,表之間并發導入

 

4、二進制日志binlog備份

    通過mysqlbinlog命令從binlog提取sql

 

5、xtrabackup

    先記錄當前redo位置

    然后拷貝共享表空間和獨立表空間數據

    最后根據redo日志和開始位置,重做redo

 

7.5     如何從mysqldump產生的全庫備份中只恢復某一個庫、某一張表?

從全庫中抽取一個庫內容:--one-database簡寫成 –o 

mysql -uroot-PRoot databasename --one-database <dump.sql

從全庫中抽取一個表的內容:grep'INSERT INTO `tablename`' dump.sql


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 济阳县| 广东省| 汝城县| 石家庄市| 拉萨市| 宁安市| 万全县| 桃江县| 金门县| 柯坪县| 广水市| 徐闻县| 肃宁县| 宁都县| 武宣县| 西昌市| 隆子县| 锦屏县| 息烽县| 蓬安县| 遵义县| 伊宁市| 弋阳县| 平陆县| 阜阳市| 赫章县| 桓仁| 太湖县| 珠海市| 醴陵市| 特克斯县| 平遥县| 平阳县| 漳平市| 南宁市| 综艺| 桂平市| 环江| 亳州市| 三原县| 含山县|