MySQL备份和恢复数据表的方法(1)
生活随笔
收集整理的這篇文章主要介紹了
MySQL备份和恢复数据表的方法(1)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
備份是最簡單的保護數據的方法,本節將介紹多種備份方法。為了得到一個一致的備份,在相關的表上做一個LOCK TABLES,你只需一個讀鎖定,當你在數據庫目錄中做文件的一個拷貝時,這允許其他線程繼續查詢該表;當你恢復數據時,需要一個寫鎖定,以避免沖突。 AD: 備份是最簡單的保護數據的方法,本節將介紹多種備份方法。為了得到一個一致的備份,在相關的表上做一個LOCK TABLES,你只需一個讀鎖定,當你在數據庫目錄中做文件的一個拷貝時,這允許其他線程繼續查詢該表;當你恢復數據時,需要一個寫鎖定,以避免沖突。 使用SQL語句備份和恢復 你可以使用SELECT INTO OUTFILE語句備份數據,并用LOAD DATA INFILE語句恢復數據。這種方法只能導出數據的內容,不包括表的結構,如果表的結構文件損壞,你必須要先恢復原來的表的結構。 語法: SELECT * INTO {OUTFILE | DUMPFILE} 'file_name' FROM tbl_name
LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE]
INTO TABLE tbl_name SELECT ... INTO OUTFILE 'file_name'格式的SELECT語句將選擇的行寫入一個文件。文件在服務器主機上被創建,并且不能是已經存在的(不管別的,這可阻止數據庫表和 文件例如“/etc/passwd”被破壞)。SELECT ... INTO OUTFILE是LOAD DATA INFILE逆操作。 LOAD DATA INFILE語句從一個文本文件中以很高的速度讀入一個表中。如果指定LOCAL關鍵詞,從客戶主機讀文件。如果LOCAL沒指定,文件必須位于服務器上。(LOCAL在MySQL3.22.6或以后版本中可用。) 為了安全原因,當讀取位于服務器上的文本文件時,文件必須處于數據庫目錄或可被所有人讀取。另外,為了對服務器上文件使用LOAD DATA INFILE,在服務器主機上你必須有file的權限。使用這種SELECT INTO OUTFILE語句,在服務器主機上你必須有FILE權限。 為了避免重復記錄,在表中你需要一個PRIMARY KEY或UNIQUE索引。當在唯一索引值上一個新記錄與一個老記錄重復時,REPLACE關鍵詞使得老記錄用一個新記錄替代。如果你指定IGNORE, 跳過有唯一索引的現有行的重復行的輸入。如果你不指定任何一個選項,當找到重復索引值時,出現一個錯誤,并且文本文件的余下部分被忽略時。 如果你指定關鍵詞LOW_PRIORITY,LOAD DATA語句的執行被推遲到沒有其他客戶讀取表后。 使用LOCAL將比讓服務器直接存取文件慢些,因為文件的內容必須從客戶主機傳送到服務器主機。在另一方面,你不需要file權限裝載本地文件。如 果你使用LOCAL關鍵詞從一個本地文件裝載數據,服務器沒有辦法在操作的當中停止文件的傳輸,因此缺省的行為好像IGNORE被指定一樣。 當在服務器主機上尋找文件時,服務器使用下列規則: ◆如果給出一個絕對路徑名,服務器使用該路徑名。?
◆如果給出一個有一個或多個前置部件的相對路徑名,服務器相對服務器的數據目錄搜索文件。?
◆如果給出一個沒有前置部件的一個文件名,服務器在當前數據庫的數據庫目錄尋找文件。 假定表tbl_name具有一個PRIMARY KEY或UNIQUE索引,備份一個數據表的過程如下: 1、鎖定數據表,避免在備份過程中,表被更新 mysql>LOCK TABLES READ tbl_name; 2、導出數據 mysql>SELECT * INTO OUTFILE ‘tbl_name.bak’ FROM tbl_name; 3、解鎖表 mysql>UNLOCK TABLES; 相應的恢復備份的數據的過程如下: 1、為表增加一個寫鎖定: mysql>LOCK TABLES tbl_name WRITE; 2、恢復數據 mysql>LOAD DATA INFILE ‘tbl_name.bak’
??->REPLACE INTO TABLE tbl_name; 如果,你指定一個LOW_PRIORITY關鍵字,就不必如上要對表鎖定,因為數據的導入將被推遲到沒有客戶讀表為止: mysql>LOAD DATA? LOW_PRIORITY? INFILE ‘tbl_name’?
??->REPLACE INTO TABLE tbl_name; 3、解鎖表
http://www.51cto.com/art/200811/98519.htm
本文轉自yunlielai51CTO博客,原文鏈接:http://blog.51cto.com/4925054/1105759,如需轉載請自行聯系原作者
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE]
INTO TABLE tbl_name SELECT ... INTO OUTFILE 'file_name'格式的SELECT語句將選擇的行寫入一個文件。文件在服務器主機上被創建,并且不能是已經存在的(不管別的,這可阻止數據庫表和 文件例如“/etc/passwd”被破壞)。SELECT ... INTO OUTFILE是LOAD DATA INFILE逆操作。 LOAD DATA INFILE語句從一個文本文件中以很高的速度讀入一個表中。如果指定LOCAL關鍵詞,從客戶主機讀文件。如果LOCAL沒指定,文件必須位于服務器上。(LOCAL在MySQL3.22.6或以后版本中可用。) 為了安全原因,當讀取位于服務器上的文本文件時,文件必須處于數據庫目錄或可被所有人讀取。另外,為了對服務器上文件使用LOAD DATA INFILE,在服務器主機上你必須有file的權限。使用這種SELECT INTO OUTFILE語句,在服務器主機上你必須有FILE權限。 為了避免重復記錄,在表中你需要一個PRIMARY KEY或UNIQUE索引。當在唯一索引值上一個新記錄與一個老記錄重復時,REPLACE關鍵詞使得老記錄用一個新記錄替代。如果你指定IGNORE, 跳過有唯一索引的現有行的重復行的輸入。如果你不指定任何一個選項,當找到重復索引值時,出現一個錯誤,并且文本文件的余下部分被忽略時。 如果你指定關鍵詞LOW_PRIORITY,LOAD DATA語句的執行被推遲到沒有其他客戶讀取表后。 使用LOCAL將比讓服務器直接存取文件慢些,因為文件的內容必須從客戶主機傳送到服務器主機。在另一方面,你不需要file權限裝載本地文件。如 果你使用LOCAL關鍵詞從一個本地文件裝載數據,服務器沒有辦法在操作的當中停止文件的傳輸,因此缺省的行為好像IGNORE被指定一樣。 當在服務器主機上尋找文件時,服務器使用下列規則: ◆如果給出一個絕對路徑名,服務器使用該路徑名。?
◆如果給出一個有一個或多個前置部件的相對路徑名,服務器相對服務器的數據目錄搜索文件。?
◆如果給出一個沒有前置部件的一個文件名,服務器在當前數據庫的數據庫目錄尋找文件。 假定表tbl_name具有一個PRIMARY KEY或UNIQUE索引,備份一個數據表的過程如下: 1、鎖定數據表,避免在備份過程中,表被更新 mysql>LOCK TABLES READ tbl_name; 2、導出數據 mysql>SELECT * INTO OUTFILE ‘tbl_name.bak’ FROM tbl_name; 3、解鎖表 mysql>UNLOCK TABLES; 相應的恢復備份的數據的過程如下: 1、為表增加一個寫鎖定: mysql>LOCK TABLES tbl_name WRITE; 2、恢復數據 mysql>LOAD DATA INFILE ‘tbl_name.bak’
??->REPLACE INTO TABLE tbl_name; 如果,你指定一個LOW_PRIORITY關鍵字,就不必如上要對表鎖定,因為數據的導入將被推遲到沒有客戶讀表為止: mysql>LOAD DATA? LOW_PRIORITY? INFILE ‘tbl_name’?
??->REPLACE INTO TABLE tbl_name; 3、解鎖表
http://www.51cto.com/art/200811/98519.htm
本文轉自yunlielai51CTO博客,原文鏈接:http://blog.51cto.com/4925054/1105759,如需轉載請自行聯系原作者
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的MySQL备份和恢复数据表的方法(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用Format创建格式化对象举例
- 下一篇: [unity3d]导出安卓版设置