mysql基礎之數據庫備份和恢復的基礎知識

備份數據的最終目的是爲了在出現一些意外狀況時,可以經過備份將數據還原,因此單單的備份數據每每是沒法知足還原時的需求的,因此在備份數據庫時,除了要備份數據自己,還要備份相關的數據庫環境,如配置文件,定時任務,sudo權限等等相關的信息。mysql

1、爲何要備份?

  一、災難恢復:硬件故障,軟件故障,天然災害,黑客攻擊,誤操做sql

  二、測試數據庫

2、備份要注意的要點

  一、備份須要多少時間(備份過程的時長)
  二、能容忍最多丟失多少數據
  三、恢復數據須要在多場時間內完成(恢復過程的時長)
  四、須要恢復哪些數據
  (1)作還原測試,用於測試備份的可用性
  (2)還原演練服務器

  五、備份負載架構

3、備分內容(備份什麼?)

  一、數據函數

  二、二進制日誌,innodb的事務日誌工具

  三、代碼(存儲過程、存儲函數、觸發器、時間調度器)性能

  四、服務器的配置文件測試

 4、備份相關術語

  一、徹底備份(全量備份)(Full Backup)spa

  對某個時間點的全部數據進行一個徹底的備份,對應時間點的全部數據都被包含在徹底備份中。(備份整個數據集)

  二、部分備份

  只備份數據子集

  三、增量備份

  僅備份最近一次徹底備份或增量備份(若是有增量備份)以來變化的數據

  四、差別備份

  僅備份最近一次徹底備份以來變化的數據;

  五、熱備

  在數據庫正常運行的狀況下進行備份,讀寫操做都可執行(每每依賴於事務日誌)(難度最大)(myisam存儲引擎不支持熱備,Innodb存儲引擎支持熱備)

  六、溫備

  讀操做能夠、寫不行

  七、冷備

  讀寫操做均不能執行(停數據庫後進行文件拷貝便可)

  八、物理備份

  直接備份數據庫所對應的數據文件,與存儲引擎無關(cp),相對於邏輯備份來講,性能更強

  九、邏輯備份

  從數據庫中「導出」數據另存而進行備份

5、設計備份方案

  一、數據集:徹底+增量+二進制日誌|徹底+差別+二進制日誌

  二、備份手段:物理,邏輯(物理備份恢復較快,邏輯備份恢復較慢)

  對於備份較大的數據建議物理備份,對於較小的數據建議用邏輯備份。

6、備份工具的選擇

  一、cp命令或tar命令

  在Linux中直接對數據文件進行備份,這種方式只適用於冷備的方式

  二、經過select語句進行部分備份

  經過select語句將表中的數據導出到指定文件中。

複製代碼
MariaDB [bi]> show variables like '%datadir%';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.00 sec)
--注意:文件必須放在數據庫的工做目錄下
MariaDB [bi]> select * from test into outfile '/var/lib/mysql/test.backup';
Query OK, 6 rows affected (0.00 sec)
--查看原來的數據
MariaDB [bi]> select * from test;
+--------------+------+------+------+
| name         | high | age  | id   |
+--------------+------+------+------+
| 劉亦菲       |  179 | 32   |    3 |
| 劉德華       |  180 | 40   |    5 |
| 畢洪態       |  177 | 26   |    2 |
| 漩渦鳴人     | NULL | NULL | NULL |
| 胡歌         |  178 | 32   |    1 |
| 謝霆鋒       |  182 | 33   |    6 |
+--------------+------+------+------+
6 rows in set (0.00 sec)
--刪除所有數據(或者建立一個和原表結構同樣的新表)
--不能夠恢復部分數據 MariaDB [bi]> delete from test where id in (1,2,3,5,6); MariaDB [bi]> delete from test where id is null;
--使用load data恢復數據 MariaDB [bi]> load data infile "/var/lib/mysql/test.backup" into table test;Query OK, 6 rows affected (0.01 sec) Records: 6 Deleted: 0 Skipped: 0 Warnings: 0 MariaDB [bi]> select * from test; +--------------+------+------+------+ | name | high | age | id | +--------------+------+------+------+ | 劉亦菲 | 179 | 32 | 3 | | 劉德華 | 180 | 40 | 5 | | 畢洪態 | 177 | 26 | 2 | | 漩渦鳴人 | NULL | NULL | NULL | | 胡歌 | 178 | 32 | 1 | | 謝霆鋒 | 182 | 33 | 6 | +--------------+------+------+------+ 6 rows in set (0.00 sec)
複製代碼

在使用select語句備份的同時,最好將表架構也備份一份,由於還原的時候能夠用到。

  三、mysqldump+複製binlog:  

  mysqldump:徹底備份(部分備份)(邏輯備份工具)
  複製binlog中指定時間範圍內的event:增量備份

  mysqldump是mysql自帶的備份工具,它是一種邏輯備份工具,也就是說,它會將數據從數據庫中讀出,轉化爲對應的sql語句。

  mysqldump可以實現徹底備份或部分備份

  使用innodb表類型的表可以使用mysqldump進行熱備

  使用myisam表類型的表只可以使用mysqldump進行溫備

  若是數據量較小,能夠選擇使用mysqldump。

  原理:

  經過協議鏈接到mysql數據庫,將須要備份的數據查詢出來,將查詢出的數據轉換成對應的insert語句,還原這些數據時,只要執行這些insert語句便可將對應的數據還原。

  優勢:

  能夠直接使用文本處理工具處理對應的備份數據,由於備份數據已經被mysqldump轉換成了對應的insert語句,因此,咱們能夠藉助文件系統中的文本處理工具對備份數據進行直接處理。

  缺點:

  當數據爲浮點類型時,會出現精度丟失

  它的備份過程屬於邏輯備份,其備份速度、恢復速度與物理備份工具相比較慢,並且mysqldump備份的過程是串行化的(mydumper可並行備份),不會並行的進行備份;當數據量較大時,其效率較低

  四、lvm2快照+複製binlog:

  lvm2快照:(作快照的時候不能有任何的數據寫入)(幾乎熱備(備份速度快))
  lvm2快照:適用cp或者tar等作物理備份:徹底備份
  複製binlog中指定時間範圍內的event:增量備份

  五、xtrabackup|mariabackup:

  由Percona提供的支持對InnoDB作熱備(物理備份)工具(開源免費的)

  支持徹底備份、差別備份、增量備份、部分備份等功能

相關文章
相關標籤/搜索