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
因為上面我沒有指定備份路徑,默認情況下,會備份到當前路徑,所以備份到D:wampbinmysqlmysql5.6.17bin路徑下了。
恢復
完全恢復
mysqldump的恢復也很簡單,將備份作為輸入執行即可。結果如下:
mysql -uroot -p dbname
不完全恢復
不完全恢復包含基于時間點的恢復和基于位置的恢復。時間點與位置是相對應二進制日志(binlog日志)里面的時間點和位置。
基于時間點
將設下午4:00到下午5:00之前的數據室錯誤的,恢復時候,需要跳過。首先我們來看一下binlog日志。如下午4點多更新數據是錯誤的,恢復時候需要跳過,下午5點多刪除數據是正確的,需要保留。
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
物理備份與恢復
物理備份分為冷備份和熱備份。和邏輯備份相比,它的最大優點是備份和恢復的速度快。因為物理備份的原理都是基于文件的cp。
冷備份與恢復
冷備份其實就是將停掉數據庫服務,復制數據文件的方法。這種方法對MyISAM和InnoDB都適合。
恢復:首先停掉Mysql服務,在操作系統級別恢復MySQL的數據文件,然后重啟Mysql服務,使用Mysqlbinlog工具恢復備份以來的所有binlog。
熱備份
在mysql中不同存儲引擎的熱備份時不相同的。
MyISAM存儲引擎
MyISAM存儲引擎備份原理就是將要備份的表加讀鎖,然后在cp數據文件到備份目錄。常用方法
-
方法一:使用mysqlhotcop
mysqlhotcop db_name [目錄] -
方法二:手工鎖表copy
首先給數據庫中所有表加讀鎖,然后cp數據。
鎖定所有表flush tables with read lock;
InnoDB存儲引擎
正在學習中···
表的導入與導出
導出
-
使用SELECT …INTO OUTFILE …+[options]命令實現
關于options參數如下
默認路徑為該數據對應的路徑下: -
使用mysqldump
mysqldump -u username -T targetDir dbname tableName[options]
比如:
mysqldump -uroot -p -T ?D:/wamp/bin/mysql/mysql5.6.17/ ?xxpt t1 ?
生成了兩個文件,如下圖:
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;
方法二:使用mysqlinport
?以上就是MySQL的備份與恢復詳解的內容,更多相關內容請關注PHP中文網(www.php.cn)!