一.概述 在作何資料庫里,備份與恢復都是非常重要的。好的備份方法和備份策略將會使得資料庫中的數據更加高效和安全。對於DBA來說,進行備份或恢復操作時要考慮的因素大概有如下: (1) 確定要備份的表的存儲引擎是事務型(innodb)還是非事務型。兩種不同的存儲引擎備份方式在處理數據一致性方面是不太一樣 ...
一.概述
在作何資料庫里,備份與恢復都是非常重要的。好的備份方法和備份策略將會使得資料庫中的數據更加高效和安全。對於DBA來說,進行備份或恢復操作時要考慮的因素大概有如下:
(1) 確定要備份的表的存儲引擎是事務型(innodb)還是非事務型。兩種不同的存儲引擎備份方式在處理數據一致性方面是不太一樣。
(2) 確定使用全備份還是增量備份。增量備份是備份每天的增量日誌,恢復時需要全備份加所有增量備份。這裡與sql server的完整備份+日誌備份或差異備份有點類似。
(3) 可以考慮複製方法來做異地備份。但複製不能代替備份,因為有可能發生誤操作。
(4) 要定期備份。
(5) 確保mysql的log -bin開啟,才能實現完整恢復,或基於時間的恢復,或基於位置的恢復。
(6) 經常做備份恢複測試,確保備份是有效的,並且可以恢復的。
(7) mysql與sqlserver在備份上很大區別的概念是mysql可以基於表備份,而sql server基於庫備份。
二. 邏輯備份和恢復
在mysql中,邏輯備份最大的優點是對於各種存儲引擎,都可以用同樣的訪求來備份。而物理備份則不同,不同存儲引擎有著不同的備份方法。 因此對於不同存儲引擎混全的資料庫,用邏輯備份會簡單一些。
2.1 邏輯備份
mysql邏輯備份是將資料庫中的數據備份為一個文本文件。可以被查看和編輯。在mysql中,使用mysqldump工具來完成邏輯備份。在前面章節"mysql 開發進階篇系列 35 工具篇 "中有講到該導出工具的用法。
2.2下麵簡演示一個備份與恢復的例子
-- 查看當前最新日誌編號 SHOW MASTER STATUS
-- 備份test庫,庫中testbackup表有6條數據 SELECT * FROM testbackup
-- 將test庫備份為test.dmp文件 -F備份後生成新日誌 [root@hsr data]# pwd /usr/local/mysql/data [root@hsr data]# mysqldump -uroot -p --single-transaction -F test > test.dmp Enter password:
備份後查看如下圖所示:
備份後查看最新日誌編號(備份成功後生成了新的日誌序號)
-- 誤操作 DELETE FROM testbackup WHERE id=6
-- 查看binlog日誌,裡面有誤操作數據,需要在my.cnf中設置binlog_rows_query_log_events=1 SHOW BINLOG EVENTS IN 'mysql-bin.000038';
-- 還原test.dmp文件 [root@hsr data]# mysql -uroot -p test < test.dmp Enter password:
-- 在查看數據,此時數據已還原。 SELECT * FROM testbackup
總結:在還原數據時有一個問題是,如果線上還原生產資料庫,那自備份以後,用戶操作的數據就會都要丟失。二種方法:(1)是還原一個副本,從副本中獲取誤操作的數據。(2) 線上還原,全備之後到誤操作時刻之間,用戶寫入的數據在binlog中,需要恢復出來。