MySQL入門--備份與恢復(三)

1.1. 物理備份方法

1.1.1. InnoDB 物理冷備份

備份過程:

a) 在複製操作期間停止服務器。

b) 驗證服務器是否正常關閉,沒有出錯。

c) 生成每個組件的副本:

— 每個 InnoDB 表一個 .frm 文件

— 表空間文件:系統表空間、基於每個表的表空間

— InnoDB 日誌文件

— my.cnf 文件

d) 重新啓動服務器。

進行完整 InnoDB 備份(所有 InnoDB 表的備份)的物理備份操作基於生成 InnoDB 用於管理表空間的所有文件的完整副本。所有數據庫中的所有 InnoDB 表必須一起備份,因爲 InnoDB 會在系統表空間中集中維護某些信息。

要使用物理備份恢復 InnoDB 表,請停止服務器,替換其副本在備份過程中生成的所有組件,然後重新啓動服務器。

注:必須將表空間文件作爲一個組進行復制。也就是說,需要替換服務器上的所有現存的表空間文件。不能使用物理備份將一個表空間添加到另一個表空間。

1.1.2. MyISAM 和 ARCHIVE 物理備份

備份過程:

a) 在服務器運行期間,鎖定要複製的表:

mysql> USE mysql

mysql> FLUSH TABLES users WITH READ LOCK;

要生成 MyISAM 或 ARCHIVE 表,需複製 MySQL 用於代表該表的文件。對於 MyISAM ,這些文件是 .frm 、 .MYD 和 .MYI 文件。對於 ARCHIVE 表,這些文件是 .frm 和 .ARZ 文件。在此複製操作過程中,其他程序(包括服務器)不能使用該表。爲了避免服務器交互問題,要在複製操作過程中停止服務器。

注:鎖定表而不關閉服務器的做法在 Linux 系統上有效。在 Windows 上,文件鎖定行爲會導致可能無法複製被服務器鎖定的表的表文件。在這種情況下,需要停止服務器後再複製表文件。

b) 執行文件系統複製。

c) 啓動新的二進制日誌文件: FLUSH LOGS;

要啓動新的二進制日誌文件,可使用 FLUSH LOGS (在 UNLOCK TABLES 之前)。或者, SHOW MASTER STATUS 返回當前二進制日誌文件的名稱和位置。新二進制日誌文件包含在備份之後更改了數據的所有語句(以及所有後續的二進制日誌文件)。

d) 在文件系統複製後解除鎖定: UNLOCK TABLES;

要從物理備份中恢復 MyISAM 或 ARCHIVE 表,應停止服務器,將備份表文件複製到相應的數據庫目錄中,然後重新啓動服務器。

1.1.3. 使用 LVM 快照備份

在以下情況下,使用 LVM 快照執行物理備份:

l 主機支持 LVM ;例如, Linux 支持 LVM2 ;

l 包含 MySQL 數據目錄的文件系統在邏輯捲上;

備份過程:

a) 生成包含 MySQL 數據目錄的邏輯卷的快照。在備份非 InnoDB 表時,使用 FLUSH TABLES WITH READ LOCK 。

b) 從快照執行物理備份。

c) 刪除快照。

在支持 LVM 的系統(如 Linux )上,可以創建要包含 MySQL 數據目錄的邏輯卷。可以創建該卷的快照,該快照的行爲就像是邏輯卷的即時副本。 LVM 使用稱爲“寫入時複製” (copy-on-write) 的機制創建最初不含數據的快照。在從新創建的快照讀取文件時, LVM 會從原始卷讀取這些文件。當原始捲髮生變化時, LVM 會在原始捲上的數據發生變化之前,立即將其複製到快照,因此,在生成快照以來發生變化的任何數據都以其原始形式存儲在快照中。這樣做的結果是,當從快照讀取文件時,將獲得在創建快照時存在的數據版本。因爲快照幾乎是即時的,因此可以假定在生成快照過程中底層數據沒有發生任何變化。這使得快照對於在不關閉服務器的情況下備份 InnoDB 數據庫非常有用。要創建快照,可使用以下語法:

lvcreate -s -n <snapshot-name> -L <size> <original-volume>

選項 -s 指示 lvcreate 創建快照,其他選項指定新快照的名稱和大小以及原始卷的位置。

例如,假定有一個卷組 VG_MYSQL 和一個邏輯卷 lv_datadir :

lvcreate -s -n lv_datadirbackup -L 2G /dev/VG_MYSQL/lv_datadir

前一條語句創建快照 lv_datadirbackup ,其保留大小爲 2 GB 。如果只是短時間需要該快照,則保留大小可以比原始卷的大小少很多,因爲快照的存儲僅包含在原始卷中發生更改的數據塊。例如,如果要使用快照執行備份,則保留大小僅存儲在執行備份以及刪除快照的時間內所做的更改。

可以像掛載標準卷一樣掛載快照。掛載了快照後,就像處理其他任何物理備份一樣,從該卷執行物理備份(例如,通過使用 tar 或 cp )。從快照備份時,數據庫在備份過程中不能有更改。您肯定會獲得與備份時一樣的一致數據文件版本,無需停止服務器。隨着時間的推移,快照的空間要求通常會增長到原始卷的大小。此外,對原始捲上數據塊的每項初始數據更改將導致兩次向卷組寫入數據:請求的更改和對快照的寫入時複製。這可能會影響快照保留期間的性能。由於以上原因,應在執行了備份之後儘快刪除快照。要刪除由前一條語句創建的快照,可使用以下語句:

lvremove VG_MYSQL/lv_datadirbackup

1.1.4. 物理備份的可移植性

l 可在 MySQL 服務器之間複製二進制數據庫。當將一臺計算機上生成的二進制備份拿到具有不同體系結構的另一臺計算機上時,二進制可移植性會很有用。例如,使用二進制備份是將數據庫在 MySQL 服務器之間複製數據庫的一種方法。

l InnoDB 數據庫的所有表空間和日誌文件都可直接複製。源系統與目標系統上的數據庫目錄名稱必須相同。對於 InnoDB ,利用二進制可移植性可在不同計算機上的不同 MySQL 服務器之間直接複製表空間,其他 MySQL 服務器可以訪問該表空間。

l MyISAM 、 ARCHIVE ,單個表的所有文件都可直接複製。對於 MyISAM 和 ARCHIVE ,二進制可移植性意味着可在不同計算機上的 MySQL 服務器之間直接複製 MyISAM 或 ARCHIVE 表的文件,其他 MySQL 服務器可以訪問該表。

l Windows 兼容性,在 Windows 系統上, MySQL 服務器在內部存儲小寫的數據庫和表名稱。對於區分大小寫的文件系統,可使用選項文件語句:

lower_case_table_names=1

1.2. 備份日誌和狀態文件

Ø 二進制日誌文件存儲備份完成後所做的更新;

Ø 服務器使用的選項文件( my.cnf 和 my.ini 文件)包含在系統崩潰後必須恢復的配置信息。

Ø 複製文件:複製 slave 創建一個包含連接到 master 所需信息的 master.info 文件,以及一個指示當前的中繼日誌處理進度的 relay-log.info 文件。

Ø 複製 slave 數據文件:複製 slave 創建用於處理 LOAD DATA INFILE 語句的數據文件。這些文件位於 slave_load_tmpdir 系統變量指定的目錄中,在服務器啓動時使用 --slave-load-tmpdir 選項可設置該變量。如果不設置 slave_load_tmpdir ,則應用 tmpdir 系統變量的值。要保護複製 slave 數據,需要備份以 SQL_LOAD- 開頭的文件。

Ø MySQL 二進制文件和庫

Ø 策略:

— 靜態文件:使用常規系統工具在服務器運行的情況下備份

— 動態文件:使用常規系統工具在服務器停止的情況下備份

1.3. 將複製用作備份的輔助工具

Ø master 可以繼續運行。

如果 MySQL 服務器在複製設置中用作 master ,則可使用 slave 生成備份,而不備份 master 。通過使用 slave 進行備份, master 不會被中斷,備份過程不會對 master 增加處理負荷,也不要求增加硬盤空間或進行額外處理。

Ø 可以停止 slave 以生成備份

關閉 mysqld 進程,或者發出 STOP SLAVE SQL_THREAD 語句以停止服務器處理其從 master 收到的更新。在後一種情況下,必須刷新表以強制掛起對磁盤的更改。

Ø 備份 slave 的數據庫

生成 slave 數據庫的備份。可用的方法取決於服務器處於停止狀態還是仍在運行。例如,如果服務器已停止,則不能使用連接到服務器的 mysqldump 或 mysqlhotcopy 之類的工具。停止的服務器可以使用系統工具; slave 線程停止,但仍在運行的服務器可以使用任何 MySQL 工具。

Ø 啓動服務器:啓動停止的服務器、 START SLAVE SQL_THREAD

重新啓動停止的服務器。如果服務器仍在運行,則可通過發出 START SLAVE SQL_THREAD 語句重新啓動 SQL 線程。

鄭州不孕不育醫院×××:http://wapyyk.39.net/zz3/zonghe/1d427.html

1.4. 備份方法比較

                                          快照 :並非所有引擎都以相同方式處理快照。例如, InnoDB 表不需要 FLUSH TABLES WITH READ LOCK 就能啓動快照,但 MyISAM 表卻需要。

1.5. 備份策略

流程圖表示可用於確定備份策略的決策流程。可能在此流程中提出的問題包括:

n 我們的系統能否承受長時間停機(停機時間)?

n 有多少數據要備份?

n 使用哪些存儲引擎來存儲數據( InnoDB 、 MyISAM 或兩者)?

1.6. mysqlbinlog

a) 確定在備份生成後寫入哪些日誌

在恢復了二進制備份文件或重新裝入了文本備份文件後,通過重新處理在服務器的二進制日誌中記錄的數據更改,完成恢復操作。爲此,必須確定在生成備份後寫入哪些日誌。然後,需要使用 mysqlbinlog 程序將這些二進制日誌的內容轉換成文本 SQL 語句,以便使用 mysql 處理結果語句。

b) 使用 mysqlbinlog 一個命令處理所有 binlog

mysqlbinlog bin.000050 bin.000051 bin.000052 | mysql

c) 恢復部分 Binlog

--start-datetime / --stop-datetime

--start-position / --stop-position

mysqlbinlog --start-position=23456 binlog.000004 | mysql

如果指定的二進制日誌文件在備份過程中正在寫入,則必須從中僅提取在備份後寫入的分,再加上之後寫入的所有日誌文件。此外,如果意外刪除了表或數據庫(或者發生了他數據損壞情況),則可使用二進制日誌中記錄的增量活動恢復備份。爲了避免重複執行問題語句,可以通過獲取到該點之前的二進制日誌文件,運行問題語句之前的所有語句。爲了處理部分文件提取, mysqlbinlog 支持一些允許指定時間的選項,或者允許指定日誌中開始提取日誌內容的位置的選項:

--start-datetime 選項:指定開始提取的日期和時間,其中選項參數採用 DATETIME 格式。但是 --start-datetime 的粒度僅有一秒,因此可能不夠精確,不能指定開始的確切位置。

--start-position 選項:可用於指定在給定的日誌位置開始提取。

另外還有一些對應的 --stop-datetime 和 --stop-position 選項,用於指定停止提取日誌內容的位置。

如果您不確定日誌文件中對應於處理開始點的時間戳或位置,可使用 mysqlbinlog (不帶 mysql )顯示日誌內容進行檢查:

shell> mysqlbinlog file_name | more

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章