Mysql備份工具mysqldump和mysqlhotcopy

(1).Mysql備份類型mysql

1)按照備份時對數據庫的影響分爲sql

  Hot backup(熱備):也叫在線備份。指在數據庫運行中直接備份,對正在運行的數據庫沒有任何影響。數據庫

  Cold backup(冷備):也叫離線備份。指在數據庫中止的狀況下備份。緩存

  Warm backup(溫備):在數據庫運行時備份,會加一個全局鎖以保證數據的一致性,會對當前數據庫的操做有影響。工具

2)按照備份後的文件內容分爲spa

  邏輯備份:指備份後的文件內容是可讀的,一般爲文本文件,內容通常是SQL語句或表內的實際數據(mysqldump和select * into outfile),通常適用於數據庫的升級和遷移,還原時間較長。日誌

  裸文件備份:也叫物理備份。拷貝數據庫的物理文件,數據庫既能夠處於運行狀態(mysqlhotcopy、ibbackup、xtrabackup一類工具),也能夠處於中止狀態,還原時間較短。blog

3)按照備份數據庫的內容分爲資源

  徹底備份:對數據庫進行完整的備份。同步

  增量備份:在上一次完整備份的基礎上,對更新的數據進行備份(xtrabackup)

  日誌備份:二進制日誌備份,主從同步。

(2).mysqldump

  mysqldump是邏輯備份工具,支持MyISAM和InnoDB引擎。數據庫運行時,MyISAM引擎只支持溫備,InnoDB支持熱備和溫備。

1)導出數據

  導出全部數據庫

[root@youxi1 ~]# mysqldump -uroot -p123456 -A > all.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@youxi1 ~]# mysqldump -uroot -p123456 --all-databases > all2.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@youxi1 ~]# ll all.sql all2.sql 
-rw-r--r-- 1 root root 773437 6月  14 13:52 all2.sql
-rw-r--r-- 1 root root 773437 6月  14 13:51 all.sql

  導出指定數據庫裏的全部數據表

[root@youxi1 ~]# mysqldump -uroot -p123456 mysql > mysql.sql              
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@youxi1 ~]# ll mysql.sql 
-rw-r--r-- 1 root root 1089455 6月  14 13:53 mysql.sql

  導出指定數據庫裏的指定數據表

[root@youxi1 ~]# mysqldump -uroot -p123456 test_db user_tb > user.sql      
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@youxi1 ~]# ll user.sql
-rw-r--r-- 1 root root 1883 6月  14 13:54 user.sql

  只導出指定數據庫裏的全部數據表的表結構

[root@youxi1 ~]# mysqldump -uroot -p123456 -d test_db > test_db_table.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@youxi1 ~]# ll test_db_table.sql 
-rw-r--r-- 1 root root 1618 6月  14 13:56 test_db_table.sql

  只導出數據庫裏的全部數據表的全部數據

[root@youxi1 ~]# mysqldump -uroot -p123456 -t test_db > test_db_data.sql  
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@youxi1 ~]# ll test_db_data.sql 
-rw-r--r-- 1 root root 1513 6月  14 13:57 test_db_data.sql

  導出指定數據庫的全部內容

[root@youxi1 ~]# mysqldump -uroot -p123456 -B test_db > test_db.sql      
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@youxi1 ~]# ll test_db.sql 
-rw-r--r-- 1 root root 2029 6月  14 14:02 test_db.sql

  注意:以上幾個實例,只有-A、--all-databases和-B選項有建立數據庫,並使用數據庫的語句。這和後面的導入數據息息相關。

2)導入數據

  若是使用-A、--all-databases和-B選項導出的數據庫可使用mysql直接導入

mysql -uroot -p123456 < all.sql

  若是不是則須要進入到mysql內部,選擇數據庫才能導入數據;或者使用mysql時指定數據庫

>use mysql
>source mysql.sql

mysql -uroot -p123456 mysql < mysql.sql

(3).mysqlhotcopy

  mysql5.7已經沒有這個命令了,多用於mysql5.5以前。mysqlhotcopy使用lock tables、flush tables和cp或scp來快速備份數據庫或單個表,屬於裸文件備份(物理備份),只能用於MyISAM引擎的數據庫。本質是使用鎖表語句,而後cp或scp。

  可使用yum命令安裝

yum -y install perl-DBD*;

1)備份

  備份一個數據庫到目標目錄

mysqlhotcopy -u [用戶名] -p [密碼] [數據庫名] [目標目錄]

  備份多個數據庫到目標目錄

mysqlhotcopy -u [用戶名] -p [密碼] [數據庫名1 數據庫名2...] [目標目錄]

  備份數據庫中的某個表到指定目錄

mysqlhotcopy -u [用戶名] -p [密碼] [數據庫名]./[表名]/ [目標目錄]

2)還原

  在Linux中Mysql數據庫都是以物理文件存在的,數據庫對應的是目錄。若是想要還原只要將原來的文件拷貝回原目錄便可。

  單個數據庫備份還原方式:若是文件全部這和所屬組不是mysql,請使用chown修改。

cp -ra [目標目錄] /var/lib/mysql/[數據庫名]/

(4).mysqldump和mysqlhotcopy比較

  1.mysqldump 是採用SQL級別的備份機制,它將數據表導成 SQL 腳本文件數據庫大時,佔用系統資源較多,支持經常使用的MyISAM,innodb引擎mysqlhotcopy只是簡單的緩存寫入和文件複製的過程,佔用資源和備份速度比mysqldump快不少不少,特別適合大的數據庫,但須要注意的是:mysqlhotcopy只支持MyISAM 引擎。

  2.mysqlhotcopy只能運行在數據庫目錄所在的機器上,mysqldump能夠用在遠程客戶端。

  3.mysqlhotcopy恢復只須要拷貝備份文件到源目錄覆蓋便可,mysqldump須要導入SQL文件到原來庫中。

  4.二者都在線執行lock tables(鎖表)以及unlock tables(解鎖表)。

相關文章
相關標籤/搜索