天天看點

雲計算面試題——mysql/存儲引擎/備份

1.MyISAM和InnoDB的主要差別:

1、MyISAM是非事務安全型的,而InnoDB是事務安全型的。

2、MyISAM鎖的粒度是表級,而InnoDB支援行級鎖定。

3、MyISAM支援全文類型索引,而InnoDB不支援全文索引。

4、MyISAM不支援foreign (外鍵),而InnoDB支援外鍵

4、MyISAM相對簡單,是以在效率上要優于InnoDB

5、MyISAM表是儲存成檔案的形式,在跨平台的資料轉移中使用MyISAM存儲會省去不少的麻煩。

6、InnoDB表比MyISAM表更安全,可以在保證資料不會丢失的情況下,切換非事務表到事務表(alter

table tablename type=innodb)。

注:使用MySAM引擎的時候是表級鎖,更新表内的一行的時候整個表都會鎖上,這個時候其他人就隻能

看,不能修改,并且他正在更新的資料是看不到的,因為正在更新的資料是在記憶體中,還沒有完全的寫到

硬碟中,我們把這樣的資料稱之為dirty髒資料,改一行鎖整張表,争用會大,而innodb改一行鎖一行,争

用會比較小,但是對于效率來說myisam更高一些,因為鎖了整張表,整張表都是我在用,吞吐量能大一

些,這個吞吐量是在機關時間内完成的工作。也就是說如果想要改10行,對于myisam來說鎖一下就可以

了,但是對于innodb來說要鎖10下

2.xtrabackup的工作原理:(支援備份innodb和xtradb)

在 InnoDB内部會維護一個redo日志檔案,又稱之為事務日志檔案,即ib_logfile0和ib_logfile1。事務

日志會存儲每一個InnoDB表資料記錄的修改。當InnoDB啟動時,InnoDB會檢查資料檔案和事務日志,并

執行兩個步驟:它将已經送出的事務日志應用(前滾)到資料檔案中存儲下來,并将修改過但沒有送出的數

據進行復原操作(即撤銷掉,不進行任何操作)。

自己了解:

比如在14:00開始備份,預計是5秒,但是在備份過程一直有新資料寫入,新資料有commit的,有未被送出的,那麼xtabackup就會先将前面5秒的做完全備份後,再将後面新資料中送出的再做增量備份,未送出的不做備份。它的一個事務日志是重複寫入的,而且是環形寫入,每一次寫入一圈後就會重新開始,覆寫原有的,但備份速度比較快,是以一般不存在,資料未備份而被覆寫的情況

3.Xtrabackup的優缺點:

優點:

1、備份的速度快且可靠[因為是實體備份]

2、支援增量備份,更為靈活

3、備份過程中不會打斷正在執行的事務

4、能夠基于壓縮等功能節約磁盤空間和流量

5、自動實作備份檢驗

6、還原速度快

缺點:

1、隻能對innodb表做增量備份,myisam表增量備份時隻能用做全備

2、innobackupex備份Myisam表之前要對全庫加鎖,不能進行寫操作,若備份是在從庫上進行會直接影響

到主從同步,造成延遲。但對innodb表不會阻塞讀寫

4.主從複制的基本過程:

1)、Mysql Slave端的IO程序連接配接上Master,向Master請求指定日志檔案的指定位置(或者從最開始的日

志)之後的日志内容;

2)、Master接收到來自Slave的IO程序的請求後,負責複制的IO程序根據Slave的請求資訊,讀取相應日志

内容,傳回給Slave 的IO程序。并将本次請求讀取的bin-log檔案名及位置一起傳回給Slave端。

3)、Slave的IO程序接收到資訊後,将接收到的日志内容依次添加到Slave端的relay-log檔案的最末端,并将

讀取到的Master端的 bin-log的檔案名和位置記錄到master-info檔案中,以便在下一次讀取的時候能夠清楚

的告訴Master“我需要從某個bin-log的哪個位置開始往後的日志内容,請發給我”;

4)、Slave的Sql程序檢測到relay-log中新增加了内容後,會馬上解析relay-log的内容成為在Master端真實執

行時候的那些可執行的内容,并在自身執行。

IO程序:負責下載下傳日志,中繼日志

SQL程序:SQL負責将中繼日志應用到資料庫中,完成AB複制資料同步

自己的了解:

首先主伺服器開啟二進制日志,配置檔案中的log_bin,主伺服器将資料更改寫入二進制日志中,從伺服器通過I/O程序請求通路二進制日志,從伺服器将主伺服器的二進制日志複制到自己的中繼日志中,通過sql程序讀中繼日志并将日志重放到自己的資料庫中。

繼續閱讀