mysql備份策略與常用的備份命令

mysql常用的備份命令

mysqldump備份常用方法:

1.導出一個數據庫
mysqldump -u用戶名 -p密碼 數據庫名 > 導出的文件名
例如
# mysqldump -hhostname -uroot -ppwd dataname >dataname.sql

2.備份服務器上所有數據庫
   例如
# mysqldump --all-databases > allbackupfile.sql

3.備份一個表
  mysqldump -u用戶名 -p密碼 數據庫名 表名> 導出的文件名
例如:
 # mysqldump -hhostname -uroot -ppwd dataname specific_tabname1 specific_tabname2> dataname_specific_tabname.sql

4.導出一個數據庫結構
例如
   # mysqldump -hhostname -uroot -ppwd -–add-drop-table --no-data dataname > dataname_nodata.sql

–no-data:沒有數據
–-add-drop-table 在每個create語句之前增加一個drop table命令

5.直接將MySQL數據庫壓縮備份
例如
  # mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz

6.同時備份多個MySQL數據庫
  例如
mysqldump -hhostname -uusername -ppwd --databases dbname1 dbname2 dbname3 > multibackupfile.sql

7.對於支持事務級的存儲引擎,爲了保證數據一致性可以採用選項“–single-transaction”
例如

#mysqldump -hlocalhost -uroot -p backup --single-transaction > /tmp/backup3.sql

8.導出特定格式的純文本文件(生成兩個.sql和txt兩個文件)
例如:
mysqldump -root -p -T /tmp dbname tablename --fields-enclosed-by=" --fields-terminated-by=,

–fields-enclosed-by:將字段的內容包裝起來的符號
–fields-terminated-by:兩個字段的分隔符

如果一次dump多個表的話,每個表都會有sql和txt兩個文件;這種特定格式比較適合備份

生成特定格式除了mysqldump外,還可以使用如下語句:

select … into outfile from …
例如:
mysql> select * into outfile ‘/tmp/t2.txt1’
-> fields terminated by ‘,’
-> optionally enclosed by ‘"’
-> lines terminated by ‘\n’
-> from t2 limit 10;

optionally enclosed by:可以將字段的內容“包裝”起來的,如果不使用“OPTIONALLY”則包括數字類型的所
有類型數據都會被“包裝”,使用“OPTIONALLY”之後,則數字類型的數據不會被指 定字符“包裝”。
lines terminated by:每條記錄結束的時候需要添加什麼字符

fields terminated by:設定每兩個字段之間的分隔符

mysqldump的邏輯備份恢復方法

1.如果是insert的語句,直接運行該腳本即可
方法一
#mysql -hlocalhost -uroot -p backup < /tmp/t2.sql
當還原表時,一定要指明把表還原到哪個數據庫,這裏是backup庫

方法二
在mysql裏用source運行腳本
mysql> source /tmp/t2.sql

2.如果備份是以特殊分隔符分隔的純數據文本文件
方法一
把/tmp/t2.txt還原到庫backup
#mysqlimport -uroot -p backup --fields-enclosed-by=" --fields-terminated-by=, /tmp/t2.txt

方法二
mysql> load data infile ‘/tmp/t2.txt’ into table t2 fields terminated by ‘"’ enclosed by ‘,’;

mysqlhotcopy的備份方法
mysqlhotcopy 是一個用perl 編寫的使用程序,其主要實現原理實際上就是通過先LOCK
住表,然後執行FLUSH TABLES 動作,該正常關閉的表正常關閉,將該fsync 的數據都fsync,
然後通過執行OS 級別的複製(cp 等)命令,將需要備份的表或者數據庫的所有物理文件都
複製到指定的備份集位置。

mysqlhotcopy db_name[./table_regex/] [new_db_name | directory]

例如:

複製數據庫
mysqlhotcopy backup backup4

備份整庫
mysqlhotcopy backup /tmp/

備份庫的部分表
mysqlhotcopy --allowold backup./t*/ /tmp/

mysqlhotcopy的恢復方法
mysqlhotcopy 備份出來的是整個數據庫目錄,使用時可以直接拷貝到 mysqld 指定的 datadir目錄下即可,
同時要注意權限的問題,(將 db_name 目錄的屬主改成 mysqld 運行用戶)。此命令只能恢復數據庫到最後
一次備份時的狀態。

mysql的不同場景備份策略

備份策略一:

直接拷貝數據庫文件(不推薦),也稱爲冷物理備份,即要停止mysql數據庫,然後copy物理文件,
速度非常快,恢復也非常方便和快捷,直接把備份文件原樣copy回來即可,但沒有應用允許停庫備份的。
這裏不存在數據一致性的問題,庫都停了,當然可以保證一致性了;如果不停庫的話,那就要鎖住所有
的表以保證數據的一致性

FLUSH TABLES WITH READ LOCK;
這個sql是把內存中的數據都刷新到磁盤中,同時鎖定數據表,以保證拷貝過程中不會有新的數據寫入。

恢復:此方案的數據恢復也很簡單,直接拷貝回原來的數據庫目錄下即可

備份策略二:

使用mysqlhotcopy備份數據庫(完全備份,適合小型數據庫備份),這種情況對於數據一致性要求非常嚴的
系統來對,就是一個無效的備份,因爲沒辦法滿足數據的一致完整性約束。它是備份數據庫或單個表的最
快的途徑,但它只能運行在數據庫文件(包括數據表定義文件、數據文件、索引文件)所在的機器上,並
且mysqlhotcopy 只能用於備份 MyISAM表。

恢復:此方案的數據恢復也很簡單,直接拷貝回原來的數據庫目錄下即可

備份策略三:

使用mysqldump備份數據庫(完全+增量備份,適合中型數據庫備份),mysqldump 是採用SQL
級別的備份機制,它將數據表導成 SQL 腳本文件,在不同的 MySQL版本之間升級時相對
比較合適,這也是最常用的備份方法。mysqldump 比直接拷貝要慢些。對數據要求一致性非常嚴的
也很難保證,只能通過增量備份保證(適用任何引擎)

恢復:此方案的恢復分爲兩步:

1.先恢復完全備份文件,使用類似如下命令:
mysql -hlocalhost -uroot -p backup < /tmp/t2.sql
2.恢復增量備份文件,按logbin的時間先後順序執行

 #  ls -tr1 HOSTNAME-bin* | xargs mysqlbinlog | mysql -uUser -pUserPWD

備份策略四:

使用主從複製機制(replication)(實現數據庫實時備份,適合中大型數據庫),爲了不影響線上業務,
實現在線備份,並且能增量備份,最好的辦法就是採用主從複製機制(replication),在 slave 機器
上做備份。

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