MYSQL mysqldump備份與恢復

2021-09-24 17:02:40 字數 4010 閱讀 8622

原文mysql備份

冷備份:停止服務進行備份,即停止資料庫的寫入

l mysql的myisam引擎只支援冷備份,innodb支援熱備份,原因:

innodb引擎是事務性儲存引擎,每一條語句都會寫日誌,並且每一條語句在日誌裡面都有時間點,那麼在備份的時候,mysql可以根據這個日誌來進行redo和undo,將備份的時候沒有提交的事務進行回滾,已經提交了的進行重做。但是myisam不行,myisam是沒有日誌的,為了保證一致性,只能停機或者鎖表進行備份。

l innodb不支援直接複製整個資料庫目錄和使用mysqlhotcopy工具進行物理備份:

直接複製整個資料庫目錄

因為mysql表儲存為檔案方式,所以可以直接複製mysql資料庫的儲存目錄以及檔案進行備份。mysql的資料庫目錄位置不一定相同,在windows平台下,mysql5.6存放資料庫的目錄通常預設為~\mysql\mysql server 5.6\data,或其他使用者自定義的目錄。這種方法對innodb儲存引擎的表不適用。使用這種方法備份的資料最好還原到相同版本的伺服器中,不同的版本可能不相容。在恢復的時候,可以直接複製備份檔案到mysql資料目錄下實現還原。通過這種方式還原時,必須保證備份資料的資料庫和待還原的資料庫伺服器的主版本號相同。而且這種方式只對myisam引擎有效,對於innodb引擎的表不可用。執行還原以前關閉mysql服務,將備份的檔案或目錄覆蓋mysql的data目錄,啟動mysql服務。

2.使用mysqlhotcopy工具快速備份

mysqlhotcopy是乙個perl指令碼,最初由tim bunce編寫並提供。他使用lock tables 、flush tables和cp或scp來快速備份資料庫。他是備份資料庫或單個表的最快途徑,但他只能執行在資料庫目錄所在機器上,並且只能備份myisam型別的表。

mysqldump備份簡述

mysqldump可產生兩種型別的輸出檔案,取決於是否選用- -tab=dir_name選項。

l 不使用- -tab=dir_name選項,mysqldump產生的資料檔案是純文字的sql檔案,又create(資料庫、表、儲存路徑等)語句和insert(記錄)語句組成。輸出結果以乙個檔案儲存,可以用mysql命令去恢復備份檔案。

l 使用- -tab=dir_name選項,mysqldump對於每乙個需備份的資料表產生兩個輸出檔案:乙個是帶分隔符的文字檔案,備份的資料表中的每行儲存為文字中的一行,以「表名.txt」儲存;另乙個輸出檔案為資料表的create table語句,以「表名.sql」儲存。

mysqldump語法和選項

【命令】shell> mysqldump -help

【常用的選項】

- -add-drop-table

這個選項將會在每乙個表的前面加上drop table if exists語句,這樣可以保證導回mysql資料庫的時候不會出錯,因為每次導回的時候,都會首先檢查表是否存在,存在就刪除

- -add-locks

這個選項會在insert語句中捆上乙個lock table和unlock table語句。這就防止在這些記錄被再次匯入資料庫時其他使用者對錶進行的操作

- -tab

這個選項將會建立兩個檔案,乙個是帶分隔符的文字檔案,備份的資料表中的每行儲存為文字中的一行,以「表名.txt」儲存;另乙個輸出檔案為資料表的create table語句,以「表名.sql」儲存。

--quick或者—opt

)如果你未使用–quick或者–opt選項,那麼mysqldump將在轉儲結果之前把全部內容載入到記憶體中。這在你轉儲大資料量的資料庫時將會有些問題。該選項預設是開啟的,但可以使用–skip-opt來關閉它。

--skip-comments

使用–skip-comments可以去掉匯出檔案中的注釋語句

–compact

使用–compact選項可以只輸出最重要的語句,而不輸出注釋及刪除表語句等等

以sql格式備份資料

如果備份檔案名.sql沒有指定所放置的路徑,則預設放在~\mysql\mysql server 5.6\bin目錄下。但可以通過以下方式指定其備份檔案的路徑:

mysqldump –h 主機名 –u 使用者名稱 –p - -all-databases > c:\備份檔案名.sql

l 呼叫mysqldump帶有- -all-databases選項備份所有的資料庫

【命令】mysqldump –h 主機名 –u 使用者名稱 –p - -all-databases > 備份檔案名.sql

【例子】以』test』@』%』使用者為例,檢視其資料庫:

用mysqldump帶有- -all-databases選項備份所有的資料庫(test,test1):

l 呼叫mysqldump帶有- -databases選項備份指定的資料庫

【命令】mysqldump –u 使用者名稱 –p - -databases db1 db2 db3 … > 備份檔案名.sql

【例子】用mysqldump帶有- -databases選項備份指定的資料庫(如test,test1)

l 呼叫mysqldump備份乙個指定的資料庫:

【命令1】mysqldump –u 使用者名稱 –p - -databases db > 備份檔案名.sql

【例子1】用mysqldump帶有- -databases選項備份指定的乙個資料庫(如test)

或【命令2】 mysqldump –u 使用者名稱 –p db > 備份檔案名.sql

【例子2】用mysqldump不帶有- -databases選項備份指定的乙個資料庫(如test)

注意生成的備份檔案中是沒有create database和use語句的:

【注意】當對乙個資料庫進行備份時- -databases允許省略(【命令2】),但是省略後導致的是備份檔案名.sql中沒有create database 和use語句,那麼恢復備份檔案時,必須指定乙個預設的資料庫名,由此伺服器才知道備份檔案恢復到哪個資料庫中;由此可以導致你可以使用乙個和原始資料庫名稱不同的資料庫名。

l 呼叫mysqldump備份某個資料庫中的某幾張表:

【命令】mysqldump –u使用者名稱 –p 資料庫名 表名1 表名2 表名3… > 備份檔案名.sql

【例子】test資料庫中的表:

用mysqldump備份資料庫test中的course表和student表:

scdump.sql檔案中只有create table,insert course,student的資訊。

恢復sql格式的備份檔案

通過mysqldump備份的檔案,如果用了- -all-databases或- -databases選項,則在備份檔案中包含create database和use語句,故並不需要指定乙個資料庫名去恢復備份檔案。

在shell命令下:

shell> mysql –u 使用者名稱 –p < 備份檔案.sql

在mysql命令下,用source命令匯入備份檔案:

mysql> source備份檔案.sql; //已登入mysql,用source命令

如果通過mysqldump備份的是單個資料庫,且沒有使用- -databases選項,則備份檔案中不包含create database和use語句,那麼在恢復的時候必須先建立資料庫。

在shell命令下:

shell>  mysqladmin –u 使用者名稱 –p create 資料庫名     //建立資料庫

shell> mysql –u 使用者名稱 –p資料庫名 < 備份檔案.sql

在mysql命令下:

mysql>  create database if not exist 資料庫名;
mysql> use 資料庫名;

mysql> source備份檔案.sql;

注意:只能在cmd介面下執行source命令,不能在mysql工具裡面執行source命令,會報錯,因為cmd是直接呼叫mysql.exe來執行命令的。

mysql mysqldump備份表指令碼

bin bash 對mysql資料庫進行制定資料庫表備份 1 0 備份,1 表恢復 2 資料庫 3 表名 4 表名 menu func menu func read p 請選擇資料庫 1 2 3 num if num ne1 num ne2 num ne3 then echo e 選擇錯誤,請重新選...

MySQL mysqldump匯入與匯出

最近,遇到乙個場景需要對mysql資料庫進行備份,本文記錄一下。對整個資料庫備份,包括表結構和資料 格式 mysqldump h資料庫ip u使用者名稱 p 資料庫名 d xx.sql 檔案存放路徑 示例 mysqldump h132.72.192.432 uroot p test home cod...

MySQL mysqldump 常見備份引數詳解

a,all databases 匯出所有資料庫資料,包括資料庫和表的建立指令碼 mysqldump uroot pmysql a a 匯出包括建立選項,預設啟用 如建立表時帶有選項 engine default charset 相反 不需要選項則使用 skip create options mysq...