1. 程式人生 > >015—備份、還原和資料遷移

015—備份、還原和資料遷移

備份:

 

按是否備份全部資料可以將備份劃分為: 

 

完全備份

 

增量備份:指的是備份自上一次備份以來(增量或完全)以來變化的資料特點節約空間、還原麻煩。

 

差異備份:指的是備份自上一次完全備份以來變化的資料 特點浪費空間、還原比增量備份簡單。

 

一般情況下,根據備份策略組合使用:完全+增量;完全+差異。


2.png


常用備份工具:

1. mysqldump : 邏輯備份工具

適用於所有的儲存引擎支援溫備、完全備份、部分備份、對於InnoDB儲存引擎支援熱備 

2. cp, tar 等歸檔複製工具物理備份工具適用於所有的儲存引擎冷備、完全備份、部分備份 

3. lvm2 snapshot: 幾乎熱備藉助檔案系統管理工具進行備份 

4. mysqlhotcopy: 名不副實的的一個工具幾乎冷備僅支援MyISAM儲存引擎 

5. xtrabackup: 一款非常強大的

InnoDB/XtraDB熱備工具支援完全備份、增量備份percona提供

 

備份策略:


針對不同的場景下我們應該制定不同的備份策略對資料庫進行備份一般情況下備份策略一般為以下4種:

 

a. 直接cp,tar複製資料庫檔案

 

b. mysqldump+複製BIN LOGS

 

c. lvm2快照+複製BIN LOGS

 

d. xtrabackup

 

以上的幾種解決方案分別針對於不同的場景:

 

Ø 如果資料量較小可以使用第一種方式直接複製資料庫檔案。【如果是將複製的檔案拷貝到新的資料庫時,需要新資料的版本號高於舊資料庫,僅有MYISAM引擎支援,INNODB不支援】

 

Ø 如果資料量還行可以使用第二種方式先使用mysqldump對資料庫進行完全備份然後定期備份BINARY LOG達到增量備份的效果。

 

Ø 如果資料量一般而又不過分影響業務執行可以使用第三種方式使用lvm2的快照對資料檔案進行備份而後定期備份BINARY LOG達到增量備份的效果。

Ø 

Ø 如果資料量很大而又不過分影響業務執行可以使用第四種方式使用xtrabackup進行完全備份後定期使用xtrabackup進行增量備份或差異備份。

 

 

1、Mysqldump實現備份恢復


windows環境下】

1) 備份單個數據庫或單個數據庫中的指定表: 

mysqldump -h主機名  -P埠 -u使用者名稱 -p密碼 –database 資料庫名 表名> 檔名.sql

 

 

2) 備份多個數據庫: 

mysqldump -h主機名  -P埠 -u使用者名稱 -p密碼 –database db1 db2 db3 > 檔名.sql


 

3) 備份所有資料庫: 

mysqldump --all -databases > backupname.sql


 

4) 壓縮備份:

mysqldump -h hostname -u username -p password -database databasename | gzip > backupfile.sql.gz


 

5) 還原MySQL資料庫的命令

 

mysql -hhostname -uusername -ppassword databasename < backupfile.sql


 

6) 還原壓縮的MySQL資料庫

gunzip < backupfile.sql.gz | mysql -u username -p password dbname


 

 

資料遷移:

可以分為:同版本MYSQL遷移;不同版本MYSQL遷移;不同資料庫遷移

 

1、直接遷移(備份還原同時進行)【同版本】

mysqldump -h hostname1-u root -p password=password1 -all-databases 
| 
mysql –h hostname2 -u root -password=password2


 

2、【不同版本】低版本可以向高版本遷移,高版本很難向低版本遷移。

 

3、不同資料庫遷移,可以實現,但比較複雜。

 

 

===========================================提高==============================================================

增量備份


小量的資料庫可以每天進行完整備份,因為這也用不了多少時間,但當資料庫很大時,就不太可能每天進行一次完整備份了,這時候就可以使用增量備份。增量備份的原理就是使用了mysqlbinlog志。

 

1、首先做一次完整備份:

 

mysqldump -h10.6.208.183 -utest2 -p123 -P3310 --single-transaction  --master-data=2  test>test.sql


這時候就會得到一個全備檔案test.sql

 

sql檔案中我們會看到:

-- CHANGE MASTER TO MASTER_LOG_FILE='bin-log.000002', MASTER_LOG_POS=107;是指備份後所有的更改將會儲存到bin-log.000002二進位制檔案中。

2、在test庫的t_student表中增加兩條記錄,然後執行flush logs命令。這時將會產生一個新的二進位制日誌檔案bin-log.000003bin-log.000002則儲存了全備過後的所有更改,既增加記錄的操作也儲存在了bin-log.00002中。

 

3、再在test庫中的a表中增加兩條記錄,然後誤刪除t_student表和a表。a中增加記錄的操作和刪除表at_student的操作都記錄在bin-log.000003中。

 

恢復


1、首先匯入全備資料

 

mysql -h10.6.208.183 -utest2 -p123  -P3310 < test.sql,

也可以直接在mysql命令列下面用source匯入

 

2、恢復bin-log.000002

 

mysqlbinlog bin-log.000002 |mysql -h10.6.208.183 -utest2 -p123  -P3310

 

 

3、恢復部分 bin-log.000003

 

   在general_log中找到誤刪除的時間點,然後更加對應的時間點到bin-log.000003中找到相應的position點,需要恢復到誤刪除的前面一個position點。

 

可以用如下引數來控制binlog的區間

 

--start-position 開始點 --stop-position 結束點

 

--start-date 開始時間  --stop-date  結束時間

 

找到恢復點後,既可以開始恢復。

 

 mysqlbinlog mysql-bin.000003 --stop-position=208 |mysql -h10.6.208.183 -utest2 -p123  -P3310


 

 

 參考:

1學會4MYSQL備份方法                    2、常用MSQL備份還原命令