Mysql備份工具mysqldump和mysqlhotcopy


(1).Mysql備份類型

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

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

  Cold backup(冷備):也叫離線備份。指在數據庫停止的情況下備份。

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

2)按照備份后的文件內容分為

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

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

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(解鎖表)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM