MySQL數(shù)據(jù)備份、還原、數(shù)據(jù)庫遷移以及表的導(dǎo)出和導(dǎo)入
前言
為了保證數(shù)據(jù)的安全,需要定期對數(shù)據(jù)進行備份。備份的方式有很多種,效果也不一樣。如果數(shù)據(jù)庫中的數(shù)據(jù)出現(xiàn)了錯誤,就需要使用備份好的數(shù)據(jù)進行數(shù)據(jù)還原。這樣可以將損失降至最低。而且,可能還會涉及到數(shù)據(jù)庫之間的數(shù)據(jù)導(dǎo)入與導(dǎo)出。
一、數(shù)據(jù)備份
備份數(shù)據(jù)是數(shù)據(jù)庫管理中最常用的操作。為了保證數(shù)據(jù)庫中數(shù)據(jù)的去安全,數(shù)據(jù)庫管理員需要定期的進行數(shù)據(jù)庫備份。一旦數(shù)據(jù)庫遭到破壞,即通過備份的文件來還原數(shù)據(jù)庫。因此,數(shù)據(jù)備份是很重要的工作。
1、使用mysqldump命令備份
mysqldump命令可以將數(shù)據(jù)庫中的數(shù)據(jù)備份成一個文本文件。表的結(jié)構(gòu)和表中的數(shù)據(jù)將存儲在生成的文本文件中。
mysqldump命令的工作原理很簡單。它先查出需要備份的表的結(jié)構(gòu),再在文本文件中生成一個create語句。然后,將表中的所有記錄轉(zhuǎn)換成一條insert語句。這些create語句和insert語句都是還原時使用的。還原數(shù)據(jù)時就可以使用其中的create語句來創(chuàng)建表。使用其中的insert語句來還原數(shù)據(jù)。
1、備份一個數(shù)據(jù)庫
使用mysqldump命令備份一個數(shù)據(jù)庫的基本語法如下:
mysqldump -u username -p dbname table1 table2 ... > backupname.sql
其中,dbname參數(shù)表示數(shù)據(jù)庫的名稱;table1和table2參數(shù)表示表的名稱,沒有該參數(shù)時將備份整個數(shù)據(jù);backupname.sql參數(shù)表示備份文件的名稱,文件名前面可以加上一個絕對路徑。通常將數(shù)據(jù)庫備份成一個后綴名為sql的文件。
2、備份多個數(shù)據(jù)庫
mysqldump命令備份多個數(shù)據(jù)庫的語法如下:
mysqldump -u username -p --databases dbname1 dbname2 ... > backupname.sql
這里要加上“–databases”這個選項,然后后面跟多個數(shù)據(jù)庫的名稱。
3、備份所有數(shù)據(jù)庫
mysqldump命令備份所有數(shù)據(jù)庫的語法如下:
mysqldump -u username -p --all-databases > backupname.sql
使用“–all-databases”選項就可以備份所有的數(shù)據(jù)庫了。
2、直接復(fù)制整個數(shù)據(jù)庫目錄
MySQL有一種最簡單的備份辦法,就是將MySQL中的數(shù)據(jù)庫文件直接復(fù)制出來。這種方法最簡單,速度也最快。使用這種方法時,最好將服務(wù)器先停止。這樣,可以保證在復(fù)制期間數(shù)據(jù)庫中的數(shù)據(jù)不會發(fā)生變化。如果在復(fù)制數(shù)據(jù)庫的過程中還有數(shù)據(jù)寫入,就會造成數(shù)據(jù)不一致。
這種方法雖然簡單快速,但不是最好的備份方法。因為,實際情況可能不允許停止MySQL服務(wù)器。而且,這種方法對InnoDB存儲引擎的表不適用。對于MyISAM存儲引擎的表,這樣備份和還原很方便。但是還原時最好是相同版本的MySQL數(shù)據(jù)庫,否則可能會存在文件類型不同的情況。
3、使用mysqlhotcopy工具快速備份
如果備份時不能停止MySQL服務(wù)器,可以采用mysqlhotcopy工具。mysqlhotcopy工具的備份方式比mysqldump命令快。
mysqlhotcopy工具是一個Perl腳本,主要在Linux操作系統(tǒng)下使用。mysqlhotcopy工具使用lock tables、flush tables和cp來進行快速備份。其工作原理是,先將需要備份的數(shù)據(jù)庫加上一個讀操作鎖,然后,用flush tables將內(nèi)存中的數(shù)據(jù)寫回到硬盤上的數(shù)據(jù)庫中,最后,把需要備份的數(shù)據(jù)庫文件復(fù)制到目標目錄。使用mysqlhotcopy的命令如下:
mysqlhotcopy [option] dbname1 dbname2 ... backupDir/
其中,dbname1等表示需要備份的數(shù)據(jù)庫的名稱;backupDir參數(shù)指出備份到哪個文件夾下。這個命令的含義就是將dbname1、dbname2等數(shù)據(jù)庫備份到backDir目錄下。
二、數(shù)據(jù)還原
管理員的非法操作和計算機的故障都會破壞數(shù)據(jù)庫文件。當數(shù)據(jù)庫遭到這些意外時,可以通過備份文件將數(shù)據(jù)庫還原到備份的狀態(tài)。這樣可以將損失降低到最小。
1、使用mysql命令還原
管理員通常使用mysqldump命令將數(shù)據(jù)庫中的數(shù)據(jù)備份成一個文本文件。通常這個文件的后綴名是.sql。需要還原時,可以使用mysql命令來還原備份的數(shù)據(jù)。
備份文件中通常包含create語句和insert語句。mysql命令可以執(zhí)行備份文件中的create語句和insert語句。通過create語句來創(chuàng)建數(shù)據(jù)庫和表。通過insert語句來插入備份的數(shù)據(jù)。mysql命令的基本語法如下:
mysql -u root -p [dbname] < backup.sql
其中,dbname參數(shù)表示數(shù)據(jù)庫名稱。該參數(shù)是可選參數(shù),可以指定數(shù)據(jù)庫名,也可以不指定。指定數(shù)據(jù)庫名時,表示還原該數(shù)據(jù)庫下的表。不指定數(shù)據(jù)庫名時,表示還原特定的一個數(shù)據(jù)庫。而備份文件中創(chuàng)建數(shù)據(jù)庫的語句。
下面使用root用戶備份所有的數(shù)據(jù)庫。命令如下:
mysql -u root -p [dbname] < backup.sql
2、直接復(fù)制到數(shù)據(jù)庫目錄
之前介紹過一種直接復(fù)制數(shù)據(jù)的備份方法。通過這種方式備份的數(shù)據(jù),可以直接復(fù)制到MySQL的數(shù)據(jù)庫目錄下。通過這種方式還原時,必須保證兩個MySQL數(shù)據(jù)庫的主版本號是相同的。因為只有MySQL數(shù)據(jù)庫主版本號相同時,才能保證這兩個MySQL數(shù)據(jù)庫的文件類型是相同的。而且,這種方式對MyISAM類型的表比較有效。對于InnoDB類型的表則不可用。因為InnoDB表的表空間不能直接復(fù)制。
三、數(shù)據(jù)庫遷移
數(shù)據(jù)庫遷移就是指將數(shù)據(jù)庫從一個系統(tǒng)移動到另一個系統(tǒng)上。數(shù)據(jù)庫遷移的原因是多種多樣的??赡苁且驗樯壛擞嬎銠C,或者是部署開發(fā)的管理系統(tǒng),或者升級了MySQL數(shù)據(jù)庫。甚至是換用其他的數(shù)據(jù)庫。根據(jù)上述情況,可以將數(shù)據(jù)庫遷移大致分為3類。這3類分別是在相同版本的MySQL數(shù)據(jù)庫之間遷移、遷移到其他版本的MySQL數(shù)據(jù)庫中和遷移到其他類型的數(shù)據(jù)庫中。
1、相同版本的MySQL數(shù)據(jù)庫之間的遷移
只有數(shù)據(jù)庫表都是MyISAM類型的才能使用這種方式。
最常用和最安全的方式是使用mysqldump命令來備份數(shù)據(jù)庫。然后使用mysql命令將備份文件還原到新的MySQL數(shù)據(jù)庫中。這里可以將備份和遷移同時進行。假設(shè)從一個名為host1的機器中備份出所有的數(shù)據(jù)庫,然后,將這些數(shù)據(jù)庫遷移到名為host2的機器上。命令如下:
mysqldump -h name1 -u root --password1 --all-databases | mysql -h host2 -u root --password=password2
其中,“|”符號表示管道,其作用是將mysqldump備份的文件送給mysql命令;“–password=password1”是name1主機上root用戶的密碼。同理,password2是name2主機上的root用戶的密碼。通過這種方式可以直接實現(xiàn)遷移。
2、不同版本的MySQL數(shù)據(jù)庫之間的遷移
高版本的MySQL數(shù)據(jù)庫通常都會兼容低版本,因此可以從低版本的MySQL數(shù)據(jù)庫遷移到高版本的MySQL數(shù)據(jù)庫。對于MySIAM類型的表可以直接復(fù)制,也可以使用mysqlhotcopy工具。但是InnoDB類型的表不可以使用這兩種方法。最常用的辦法是使用mysqldump命令來進行備份,然后,通過mysql命令將備份文件還原到目標MySQL數(shù)據(jù)庫中。但是,高版本的MySQL數(shù)據(jù)庫很難遷移到低版本的MySQL數(shù)據(jù)庫。因為高版本的MySQL數(shù)據(jù)庫可能有一些新的特性,這些特性是低版本MySQL數(shù)據(jù)庫所不具有的。數(shù)據(jù)庫遷移時要特別小心,最好使用mysqldump命令來進行備份,避免遷移時造成數(shù)據(jù)丟失。
四、表的導(dǎo)出和導(dǎo)入
MySQL數(shù)據(jù)庫中的表可以導(dǎo)出成文本文件、XML文件或者HTML文件。相應(yīng)的文本文件也可以導(dǎo)入MySQL數(shù)據(jù)庫中。在數(shù)據(jù)庫的日常維護中,經(jīng)常需要進行表的導(dǎo)出和導(dǎo)入的操作。
1、用select…into outfile導(dǎo)出文本文件
MySQL中,可以使用select…into outfile語句將表的內(nèi)容導(dǎo)出成一個文本文件。其基本語法形式如下:
select [列名] from table [where 語句] into outfile '目標文件'[option];
該語句分為兩個部分。前半部分是一個普遍的select語句,通過這個select語句來查詢所需要的數(shù)據(jù);后半部分是導(dǎo)出數(shù)據(jù)的。其中,“目標文件”參數(shù)指出將查詢的記錄導(dǎo)出到哪個文件;“OPTION”參數(shù)是可以有常用的5個選項。
2、用mysqldump命令導(dǎo)出文本文件
mysqldump命令可以備份數(shù)據(jù)庫中的數(shù)據(jù)。但是,備份時是在備份文件中保存了create語句和insert語句。不僅如此,mysqldump命令還可以導(dǎo)出文本文件。其基本的語法形式如下:
mysqldump -u root -pPassword -T 目標目錄 dbname table [option];
其中,Password參數(shù)表示root用戶的密碼,密碼緊挨著-p選項;目標目錄參數(shù)是指導(dǎo)出的文本文件的路徑;dbname參數(shù)表示數(shù)據(jù)庫的名稱;table參數(shù)表示表的名稱;
3、用mysql命令導(dǎo)出文本文件
mysql命令可以用來登錄MySQL服務(wù)器,也可以用來還原備份文件。同時,mysql命令也可以導(dǎo)出文本文件。其基本語法形式如下:
mysql -u root -pPassword -e "select 語句" dbname > C:/name.txt;
其中,Password表示root用戶的密碼;使用-e選項就可以執(zhí)行SQL語句;“selec語句”用來查詢記錄。C:/name.txt表示導(dǎo)出文件的路徑。
4、用load data infile方式導(dǎo)入文本文件
MySQL中,可以使用load data infile命令將文本文件導(dǎo)入到MySQL數(shù)據(jù)庫中。其基本語法形式如下:
load data [local] infile file into table table [option];
其中,“local”是在本地計算機中查找文本文件時使用的;“file”參數(shù)指定了文本文件的路徑和名稱;“table”參數(shù)指標的名稱;
5、用mysqlimport命令導(dǎo)入文本文件
MySQL中,可以使用mysqlimport命令將文本文件導(dǎo)入到MySQL數(shù)據(jù)庫中。其基本語法形式如下:
mysqlimport -u root -pPassword [--LOCAL] dbname file [option]
其中,“Password”參數(shù)是root用戶的密碼,必須與-p選項緊挨著;“local”是在本地計算機中查找文本文件時使用的;“dbname”參數(shù)表示數(shù)據(jù)庫的名稱;“file”參數(shù)指定了文本文件的路徑和名稱;
五、總結(jié)
這里的相關(guān)內(nèi)容還沒有整理完畢,文章后面持續(xù)更新,建議收藏。
到此這篇關(guān)于MySQL數(shù)據(jù)備份、還原、數(shù)據(jù)庫遷移以及表的導(dǎo)出和導(dǎo)入的文章就介紹到這了,更多相關(guān)MySQL數(shù)據(jù)備份還原內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- mysql數(shù)據(jù)庫如何導(dǎo)入導(dǎo)出sql文件
- Mysql數(shù)據(jù)庫的導(dǎo)入導(dǎo)出方式(各種情況)
- MySQL 億級數(shù)據(jù)導(dǎo)入導(dǎo)出及遷移筆記
- MySQL 表數(shù)據(jù)的導(dǎo)入導(dǎo)出操作示例
- HeidiSQL工具導(dǎo)出導(dǎo)入MySQL數(shù)據(jù)
- 淺析MySQL數(shù)據(jù)的導(dǎo)出與導(dǎo)入知識點
- Python之csv文件從MySQL數(shù)據(jù)庫導(dǎo)入導(dǎo)出的方法
- MySQL命令行導(dǎo)出導(dǎo)入數(shù)據(jù)庫實例詳解
- MySQL 導(dǎo)出和導(dǎo)入數(shù)據(jù)的幾種實現(xiàn)方式
相關(guān)文章
MySQL的Data_ADD函數(shù)與日期格式化函數(shù)說明
今天看到了MySQL的日期函數(shù),里面很多有用的,這里只把兩個參數(shù)不太好記的粘下來了。2010-06-06導(dǎo)致sql執(zhí)行速度慢的幾種情況盤點(生產(chǎn)環(huán)境踩過的坑)
盤點分析MySQL執(zhí)行速度慢可以幫助我們進行優(yōu)化MySQL數(shù)據(jù)庫的效率,這篇文章主要給大家盤點介紹了關(guān)于導(dǎo)致sql執(zhí)行速度慢的幾種情況,文中介紹的這些主要是生產(chǎn)環(huán)境踩過的坑,需要的朋友可以參考下2023-03-03