MySQL學習(十四) 備份和還原

備份

1.邏輯備份方法

使用MYSQLDUMP命令備份

MYSQLDUMP是MYSQL提供的一個非常有用的數據庫備份工具。mysqldump命令執行時將數據庫備份成一個文本文件,

該文件中實際上包含了多個CREATE 和INSERT語句,使用這些語句可以重新創建表和插入數據

MYSQLDUMP的語法和選項


mysqldump -u user -p pwd -h host dbname[tbname,[tbname...]]>filename.sql

user表示用戶名稱;

host表示登錄用戶的主機名稱;

pwd爲登錄密碼;

dbname爲需要備份的數據庫名稱;

tbname爲dbname數據庫中需要備份的數據表,可以指定多個需要備份的表;

右箭頭“>”告訴mysqldump將備份數據庫表定義和數據寫入備份文件;

filename爲備份文件的名稱


如果要使用mysqldump備份多個數據庫,需要使用--databases參數。

使用--databases參數之後,必須指定至少一個數據庫的名稱,多個數據庫名稱之間用空格隔開

使用mysqldump備份school庫和test庫

 備份文件裏的內容,基本上跟第一個例子一樣,但是指明瞭裏面的內容那一部分屬於test庫,哪一部分屬於school庫

使用--all-databases不需要指定數據庫名稱

執行完畢之後會產生all_2014-7-10.sql的備份文件,裏面會包含了所有數據庫的備份信息



2.物理備份方法

1、直接複製整個數據庫目錄

因爲MYSQL表保存爲文件方式,所以可以直接複製MYSQL數據庫的存儲目錄以及文件進行備份。

MYSQL的數據庫目錄位置不一定相同,在Windows平臺下,MYSQL5.6存放數據庫的目錄通常默認爲

C:\Documents and Settings\All User\Application Data\MySQL\MYSQL Server 5.6\data

或者其他用戶自定義的目錄;

在Linux平臺下,數據庫目錄位置通常爲/var/lib/mysql/,不同Linux版本下目錄會有不同

 

這是一種簡單、快速、有效的備份方式。要想保持備份一致,備份前需要對相關表執行LOCK TABLES操作,然後對錶執行

FLUSH TABLES。這樣當複製數據庫目錄中的文件時,允許其他客戶繼續查詢表。需要FLUSH TABLES語句來確保開始

備份前將所有激活的索引頁寫入磁盤。

當然,也可以停止MYSQL服務再進行備份操作

 

這種方法雖然簡單,但並不是最好的方法。因爲這種方法對INNODB存儲引擎的表不適用。使用這種方法備份的數據最好還原

到相同版本的服務器中,不同的版本可能不兼容。

 

注意:在mysql版本中,第一個數字表示主版本號,主版本號相同的MYSQL數據庫文件格式相同


還原

物理備份方法

1、直接複製整個數據庫目錄

因爲MYSQL表保存爲文件方式,所以可以直接複製MYSQL數據庫的存儲目錄以及文件進行備份。

MYSQL的數據庫目錄位置不一定相同,在Windows平臺下,MYSQL5.6存放數據庫的目錄通常默認爲

C:\Documents and Settings\All User\Application Data\MySQL\MYSQL Server 5.6\data

或者其他用戶自定義的目錄;

在Linux平臺下,數據庫目錄位置通常爲/var/lib/mysql/,不同Linux版本下目錄會有不同

 

這是一種簡單、快速、有效的備份方式。要想保持備份一致,備份前需要對相關表執行LOCK TABLES操作,然後對錶執行

FLUSH TABLES。這樣當複製數據庫目錄中的文件時,允許其他客戶繼續查詢表。需要FLUSH TABLES語句來確保開始

備份前將所有激活的索引頁寫入磁盤。

當然,也可以停止MYSQL服務再進行備份操作

 

這種方法雖然簡單,但並不是最好的方法。因爲這種方法對INNODB存儲引擎的表不適用。使用這種方法備份的數據最好還原

到相同版本的服務器中,不同的版本可能不兼容。

 

注意:在mysql版本中,第一個數字表示主版本號,主版本號相同的MYSQL數據庫文件格式相同

還原


邏輯還原

1、使用mysql命令進行還原

對於已經備份的包含CREATE、INSERT語句的文本文件,可以使用myslq命令導入數據庫中

 

備份的sql文件中包含CREATE、INSERT語句(有時也會有DROP語句)。mysql命令可以直接執行文件中的這些語句

其語法如下:

mysql -u user -p [dbname]<filename.sql

user是執行backup.sql中語句的用戶名;-p表示輸入用戶密碼;dbname是數據庫名

如果filename.sql文件爲mysqldump工具創建的包含創建數據庫語句的文件,執行的時候不需要指定數據庫名

用mysql命令將school_2014-7-10.sql文件中的備份導入到數據庫中

mysql -u root -h 127.0.0.1 -p school<c:\school_2014-7-10.sql

執行語句之前我們必須建好school數據庫,如果不存在恢復過程將會出錯。

可以看到表數據都已經導入到數據庫了

 

如果已經登錄mysql,那麼可以使用source命令導入備份文件

使用source命令導入備份文件school_2014-7-10.sql

執行source命令前必須使用use 語句選擇好數據庫,不然會出現ERROR 1046(3D000):NO DATABASE SELECTED 的錯誤

還有一點要注意的是只能在cmd界面下執行,不能在mysql工具裏面執行source命令,否則會報錯

因爲cmd是直接調用mysql.exe來執行命令的

而這些mysql 編輯工具只是利用mysql connector連接mysql,來管理mysql並不是直接調用mysql.exe,所以執行source會報錯


物理還原

2、直接複製到數據庫目錄

如果數據庫通過複製數據庫文件備份,可以直接複製備份文件到MYSQL數據目錄下實現還原。通過這種方式還原時,

必須保證備份數據的數據庫和待還原的數據庫服務器的主版本號相同。

而且這種方式只對MYISAM引擎有效,對於innodb引擎的表不可用

 

執行還原以前關閉mysql服務,將備份的文件或目錄覆蓋mysql的data目錄,啓動mysql服務。

對於Linux操作系統來說,複製完文件需要將文件的用戶和組更改爲mysql運行的用戶和組,通常用戶是mysql,組也是mysql


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章