MySQL的備份與恢復詳解

MySQL數據備份

在mySQL里面,有邏輯備份和物理備份。邏輯備份最大優點是對于各種存儲引擎,都可以使用同樣的方法來備份。而物理備份則不同,不同的存儲引擎有著不同的備份方法。

邏輯備份與恢復

備份

在MySQL中邏輯備份是使用mysqldump將數據庫中的數據備份為一個文本文件,備份的文件可以被查看和編輯。按照備份范圍,可以將備份分為以下三種備份。

  • 備份指定的一個數據庫或者該數據庫中的某些表
    mysqldump [options] 數據庫名 [表名] > data.sql

  • 備份指定的多個數據庫
    mysqldump ?[options] –database > data.sql 數據庫1名 數據庫2名 數據庫3名…

  • 備份所有的數據庫
    mysqldump [options] –all-database > data.sql
    解析:[options] 備份時候,需要的權限信息等。mysqldump的選項很多,具體可以通過mysqldump –help來查看。 為了保證數據備份一致性,MySQL存儲引擎在北方時候,需要加上-l 參數,表示將所有表加上讀鎖,在備份期間,所有的表將只能讀,而不能寫。但是對于InnoDB引擎來說,可以采用–single-transaction。data.sql備份的數據文件
    參數:
    l:代表給所有表加鎖
    f:代表生成一個新的日子文件

實例將xxpt數據庫中所有表備份到dequan.sql表中。命令如下:
mysqldump -uroot -p xxpt >dequan.sql
MySQL的備份與恢復詳解
因為上面我沒有指定備份路徑,默認情況下,會備份到當前路徑,所以備份到D:wampbinmysqlmysql5.6.17bin路徑下了。

恢復

完全恢復

mysqldump的恢復也很簡單,將備份作為輸入執行即可。結果如下:
mysql -uroot -p dbname

不完全恢復

不完全恢復包含基于時間點的恢復和基于位置的恢復。時間點與位置是相對應二進制日志(binlog日志)里面的時間點和位置。
MySQL的備份與恢復詳解

基于時間點

將設下午4:00到下午5:00之前的數據室錯誤的,恢復時候,需要跳過。首先我們來看一下binlog日志。如下午4點多更新數據是錯誤的,恢復時候需要跳過,下午5點多刪除數據是正確的,需要保留。
MySQL的備份與恢復詳解
1.通過mysql -uroot -p dbname

基于位置的恢復

使用位置恢復時候,我們需要先查看binlog日志文件,確定位置編號,然后使用如下命令進行恢復:
mysqlbinlog D:wampbinmysqlmysql5.6.17datamybinlog.000012 –stop-position=716406|mysql -uroot -p
恢復5點之后的操作
D:wampbinmysqlmysql5.6.17datamybinlog.000012 –start-position=723613|mysql -uroot -p
MySQL的備份與恢復詳解

物理備份與恢復

物理備份分為冷備份和熱備份。和邏輯備份相比,它的最大優點是備份和恢復的速度快。因為物理備份的原理都是基于文件的cp。

冷備份與恢復

冷備份其實就是將停掉數據庫服務,復制數據文件的方法。這種方法對MyISAM和InnoDB都適合。
恢復:首先停掉Mysql服務,在操作系統級別恢復MySQL的數據文件,然后重啟Mysql服務,使用Mysqlbinlog工具恢復備份以來的所有binlog。

熱備份

在mysql中不同存儲引擎的熱備份時不相同的。

MyISAM存儲引擎

MyISAM存儲引擎備份原理就是將要備份的表加讀鎖,然后在cp數據文件到備份目錄。常用方法

  • 方法一:使用mysqlhotcop
    mysqlhotcop db_name [目錄]

  • 方法二:手工鎖表copy
    首先給數據庫中所有表加讀鎖,然后cp數據。
    鎖定所有表flush tables with read lock;
    MySQL的備份與恢復詳解

InnoDB存儲引擎

正在學習中···

表的導入與導出

導出

  • 使用SELECT …INTO OUTFILE …+[options]命令實現
    關于options參數如下
    MySQL的備份與恢復詳解
    默認路徑為該數據對應的路徑下:
    MySQL的備份與恢復詳解
    MySQL的備份與恢復詳解

  • 使用mysqldump
    mysqldump -u username -T targetDir dbname tableName[options]
    比如:
    mysqldump -uroot -p -T ?D:/wamp/bin/mysql/mysql5.6.17/ ?xxpt t1 ?
    生成了兩個文件,如下圖:
    MySQL的備份與恢復詳解
    t1.txt中保存中數據信息,t1.sql文件內容如下

--?MySQL?dump?10.13??Distrib?5.6.17,?for?Win32?(x86)  ----?Host:?localhost????Database:?xxpt  --?------------------------------------------------------  --?Server?version???5.6.17-log  /*!40101?SET?@OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT?*/;  /*!40101?SET?@OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS?*/;  /*!40101?SET?@OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION?*/;  /*!40101?SET?NAMES?utf8?*/;/*!40103?SET?@OLD_TIME_ZONE=@@TIME_ZONE?*/;  /*!40103?SET?TIME_ZONE='+00:00'?*/;/*!40101?SET?@OLD_SQL_MODE=@@SQL_MODE,?SQL_MODE=''?*/;  /*!40111?SET?@OLD_SQL_NOTES=@@SQL_NOTES,?SQL_NOTES=0?*/;  ----?Table?structure?for?table?`t1`--DROP?TABLE?IF?EXISTS?`t1`;  /*!40101?SET?@saved_cs_client?????=?@@character_set_client?*/;  /*!40101?SET?character_set_client?=?utf8?*/;  CREATE?TABLE?`t1`?(??`id1`?int(11)?NOT?NULL?DEFAULT?'0',??  `id2`?int(3)?unsigned?zerofill?NOT?NULL?DEFAULT?'000')?ENGINE=InnoDB?DEFAULT?CHARSET=utf8;  /*!40101?SET?character_set_client?=?@saved_cs_client?*/;  /*!40103?SET?TIME_ZONE=@OLD_TIME_ZONE?*/;  /*!40101?SET?SQL_MODE=@OLD_SQL_MODE?*/;  /*!40101?SET?CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT?*/;  /*!40101?SET?CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS?*/;  /*!40101?SET?COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION?*/;  /*!40111?SET?SQL_NOTES=@OLD_SQL_NOTES?*/;  --?Dump?completed?on?2016-04-18?19:30:51

導入

方法一:
load data infile
eg:
load data infile ‘D:/wamp/bin/mysql/mysql5.6.17/t1.txt’ into table t1;
MySQL的備份與恢復詳解

方法二:使用mysqlinport

?以上就是MySQL的備份與恢復詳解的內容,更多相關內容請關注PHP中文網(www.php.cn)!

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享