MySQL數(shù)據(jù)備份、還原、數(shù)據(jù)庫(kù)遷移以及表的導(dǎo)出和導(dǎo)入
前言
為了保證數(shù)據(jù)的安全,需要定期對(duì)數(shù)據(jù)進(jìn)行備份。備份的方式有很多種,效果也不一樣。如果數(shù)據(jù)庫(kù)中的數(shù)據(jù)出現(xiàn)了錯(cuò)誤,就需要使用備份好的數(shù)據(jù)進(jìn)行數(shù)據(jù)還原。這樣可以將損失降至最低。而且,可能還會(huì)涉及到數(shù)據(jù)庫(kù)之間的數(shù)據(jù)導(dǎo)入與導(dǎo)出。
一、數(shù)據(jù)備份
備份數(shù)據(jù)是數(shù)據(jù)庫(kù)管理中最常用的操作。為了保證數(shù)據(jù)庫(kù)中數(shù)據(jù)的去安全,數(shù)據(jù)庫(kù)管理員需要定期的進(jìn)行數(shù)據(jù)庫(kù)備份。一旦數(shù)據(jù)庫(kù)遭到破壞,即通過(guò)備份的文件來(lái)還原數(shù)據(jù)庫(kù)。因此,數(shù)據(jù)備份是很重要的工作。
1、使用mysqldump命令備份
mysqldump命令可以將數(shù)據(jù)庫(kù)中的數(shù)據(jù)備份成一個(gè)文本文件。表的結(jié)構(gòu)和表中的數(shù)據(jù)將存儲(chǔ)在生成的文本文件中。
mysqldump命令的工作原理很簡(jiǎn)單。它先查出需要備份的表的結(jié)構(gòu),再在文本文件中生成一個(gè)create語(yǔ)句。然后,將表中的所有記錄轉(zhuǎn)換成一條insert語(yǔ)句。這些create語(yǔ)句和insert語(yǔ)句都是還原時(shí)使用的。還原數(shù)據(jù)時(shí)就可以使用其中的create語(yǔ)句來(lái)創(chuàng)建表。使用其中的insert語(yǔ)句來(lái)還原數(shù)據(jù)。
1、備份一個(gè)數(shù)據(jù)庫(kù)
使用mysqldump命令備份一個(gè)數(shù)據(jù)庫(kù)的基本語(yǔ)法如下:
mysqldump -u username -p dbname table1 table2 ... > backupname.sql
其中,dbname參數(shù)表示數(shù)據(jù)庫(kù)的名稱;table1和table2參數(shù)表示表的名稱,沒(méi)有該參數(shù)時(shí)將備份整個(gè)數(shù)據(jù);backupname.sql參數(shù)表示備份文件的名稱,文件名前面可以加上一個(gè)絕對(duì)路徑。通常將數(shù)據(jù)庫(kù)備份成一個(gè)后綴名為sql的文件。
2、備份多個(gè)數(shù)據(jù)庫(kù)
mysqldump命令備份多個(gè)數(shù)據(jù)庫(kù)的語(yǔ)法如下:
mysqldump -u username -p --databases dbname1 dbname2 ... > backupname.sql
這里要加上“–databases”這個(gè)選項(xiàng),然后后面跟多個(gè)數(shù)據(jù)庫(kù)的名稱。
3、備份所有數(shù)據(jù)庫(kù)
mysqldump命令備份所有數(shù)據(jù)庫(kù)的語(yǔ)法如下:
mysqldump -u username -p --all-databases > backupname.sql
使用“–all-databases”選項(xiàng)就可以備份所有的數(shù)據(jù)庫(kù)了。
2、直接復(fù)制整個(gè)數(shù)據(jù)庫(kù)目錄
MySQL有一種最簡(jiǎn)單的備份辦法,就是將MySQL中的數(shù)據(jù)庫(kù)文件直接復(fù)制出來(lái)。這種方法最簡(jiǎn)單,速度也最快。使用這種方法時(shí),最好將服務(wù)器先停止。這樣,可以保證在復(fù)制期間數(shù)據(jù)庫(kù)中的數(shù)據(jù)不會(huì)發(fā)生變化。如果在復(fù)制數(shù)據(jù)庫(kù)的過(guò)程中還有數(shù)據(jù)寫(xiě)入,就會(huì)造成數(shù)據(jù)不一致。
這種方法雖然簡(jiǎn)單快速,但不是最好的備份方法。因?yàn)?,?shí)際情況可能不允許停止MySQL服務(wù)器。而且,這種方法對(duì)InnoDB存儲(chǔ)引擎的表不適用。對(duì)于MyISAM存儲(chǔ)引擎的表,這樣備份和還原很方便。但是還原時(shí)最好是相同版本的MySQL數(shù)據(jù)庫(kù),否則可能會(huì)存在文件類(lèi)型不同的情況。
3、使用mysqlhotcopy工具快速備份
如果備份時(shí)不能停止MySQL服務(wù)器,可以采用mysqlhotcopy工具。mysqlhotcopy工具的備份方式比mysqldump命令快。
mysqlhotcopy工具是一個(gè)Perl腳本,主要在Linux操作系統(tǒng)下使用。mysqlhotcopy工具使用lock tables、flush tables和cp來(lái)進(jìn)行快速備份。其工作原理是,先將需要備份的數(shù)據(jù)庫(kù)加上一個(gè)讀操作鎖,然后,用flush tables將內(nèi)存中的數(shù)據(jù)寫(xiě)回到硬盤(pán)上的數(shù)據(jù)庫(kù)中,最后,把需要備份的數(shù)據(jù)庫(kù)文件復(fù)制到目標(biāo)目錄。使用mysqlhotcopy的命令如下:
mysqlhotcopy [option] dbname1 dbname2 ... backupDir/
其中,dbname1等表示需要備份的數(shù)據(jù)庫(kù)的名稱;backupDir參數(shù)指出備份到哪個(gè)文件夾下。這個(gè)命令的含義就是將dbname1、dbname2等數(shù)據(jù)庫(kù)備份到backDir目錄下。
二、數(shù)據(jù)還原
管理員的非法操作和計(jì)算機(jī)的故障都會(huì)破壞數(shù)據(jù)庫(kù)文件。當(dāng)數(shù)據(jù)庫(kù)遭到這些意外時(shí),可以通過(guò)備份文件將數(shù)據(jù)庫(kù)還原到備份的狀態(tài)。這樣可以將損失降低到最小。
1、使用mysql命令還原
管理員通常使用mysqldump命令將數(shù)據(jù)庫(kù)中的數(shù)據(jù)備份成一個(gè)文本文件。通常這個(gè)文件的后綴名是.sql。需要還原時(shí),可以使用mysql命令來(lái)還原備份的數(shù)據(jù)。
備份文件中通常包含create語(yǔ)句和insert語(yǔ)句。mysql命令可以執(zhí)行備份文件中的create語(yǔ)句和insert語(yǔ)句。通過(guò)create語(yǔ)句來(lái)創(chuàng)建數(shù)據(jù)庫(kù)和表。通過(guò)insert語(yǔ)句來(lái)插入備份的數(shù)據(jù)。mysql命令的基本語(yǔ)法如下:
mysql -u root -p [dbname] < backup.sql
其中,dbname參數(shù)表示數(shù)據(jù)庫(kù)名稱。該參數(shù)是可選參數(shù),可以指定數(shù)據(jù)庫(kù)名,也可以不指定。指定數(shù)據(jù)庫(kù)名時(shí),表示還原該數(shù)據(jù)庫(kù)下的表。不指定數(shù)據(jù)庫(kù)名時(shí),表示還原特定的一個(gè)數(shù)據(jù)庫(kù)。而備份文件中創(chuàng)建數(shù)據(jù)庫(kù)的語(yǔ)句。
下面使用root用戶備份所有的數(shù)據(jù)庫(kù)。命令如下:
mysql -u root -p [dbname] < backup.sql
2、直接復(fù)制到數(shù)據(jù)庫(kù)目錄
之前介紹過(guò)一種直接復(fù)制數(shù)據(jù)的備份方法。通過(guò)這種方式備份的數(shù)據(jù),可以直接復(fù)制到MySQL的數(shù)據(jù)庫(kù)目錄下。通過(guò)這種方式還原時(shí),必須保證兩個(gè)MySQL數(shù)據(jù)庫(kù)的主版本號(hào)是相同的。因?yàn)橹挥蠱ySQL數(shù)據(jù)庫(kù)主版本號(hào)相同時(shí),才能保證這兩個(gè)MySQL數(shù)據(jù)庫(kù)的文件類(lèi)型是相同的。而且,這種方式對(duì)MyISAM類(lèi)型的表比較有效。對(duì)于InnoDB類(lèi)型的表則不可用。因?yàn)镮nnoDB表的表空間不能直接復(fù)制。
三、數(shù)據(jù)庫(kù)遷移
數(shù)據(jù)庫(kù)遷移就是指將數(shù)據(jù)庫(kù)從一個(gè)系統(tǒng)移動(dòng)到另一個(gè)系統(tǒng)上。數(shù)據(jù)庫(kù)遷移的原因是多種多樣的??赡苁且?yàn)樯?jí)了計(jì)算機(jī),或者是部署開(kāi)發(fā)的管理系統(tǒng),或者升級(jí)了MySQL數(shù)據(jù)庫(kù)。甚至是換用其他的數(shù)據(jù)庫(kù)。根據(jù)上述情況,可以將數(shù)據(jù)庫(kù)遷移大致分為3類(lèi)。這3類(lèi)分別是在相同版本的MySQL數(shù)據(jù)庫(kù)之間遷移、遷移到其他版本的MySQL數(shù)據(jù)庫(kù)中和遷移到其他類(lèi)型的數(shù)據(jù)庫(kù)中。
1、相同版本的MySQL數(shù)據(jù)庫(kù)之間的遷移
只有數(shù)據(jù)庫(kù)表都是MyISAM類(lèi)型的才能使用這種方式。
最常用和最安全的方式是使用mysqldump命令來(lái)備份數(shù)據(jù)庫(kù)。然后使用mysql命令將備份文件還原到新的MySQL數(shù)據(jù)庫(kù)中。這里可以將備份和遷移同時(shí)進(jìn)行。假設(shè)從一個(gè)名為host1的機(jī)器中備份出所有的數(shù)據(jù)庫(kù),然后,將這些數(shù)據(jù)庫(kù)遷移到名為host2的機(jī)器上。命令如下:
mysqldump -h name1 -u root --password1 --all-databases | mysql -h host2 -u root --password=password2
其中,“|”符號(hào)表示管道,其作用是將mysqldump備份的文件送給mysql命令;“–password=password1”是name1主機(jī)上root用戶的密碼。同理,password2是name2主機(jī)上的root用戶的密碼。通過(guò)這種方式可以直接實(shí)現(xiàn)遷移。
2、不同版本的MySQL數(shù)據(jù)庫(kù)之間的遷移
高版本的MySQL數(shù)據(jù)庫(kù)通常都會(huì)兼容低版本,因此可以從低版本的MySQL數(shù)據(jù)庫(kù)遷移到高版本的MySQL數(shù)據(jù)庫(kù)。對(duì)于MySIAM類(lèi)型的表可以直接復(fù)制,也可以使用mysqlhotcopy工具。但是InnoDB類(lèi)型的表不可以使用這兩種方法。最常用的辦法是使用mysqldump命令來(lái)進(jìn)行備份,然后,通過(guò)mysql命令將備份文件還原到目標(biāo)MySQL數(shù)據(jù)庫(kù)中。但是,高版本的MySQL數(shù)據(jù)庫(kù)很難遷移到低版本的MySQL數(shù)據(jù)庫(kù)。因?yàn)楦甙姹镜腗ySQL數(shù)據(jù)庫(kù)可能有一些新的特性,這些特性是低版本MySQL數(shù)據(jù)庫(kù)所不具有的。數(shù)據(jù)庫(kù)遷移時(shí)要特別小心,最好使用mysqldump命令來(lái)進(jìn)行備份,避免遷移時(shí)造成數(shù)據(jù)丟失。
四、表的導(dǎo)出和導(dǎo)入
MySQL數(shù)據(jù)庫(kù)中的表可以導(dǎo)出成文本文件、XML文件或者HTML文件。相應(yīng)的文本文件也可以導(dǎo)入MySQL數(shù)據(jù)庫(kù)中。在數(shù)據(jù)庫(kù)的日常維護(hù)中,經(jīng)常需要進(jìn)行表的導(dǎo)出和導(dǎo)入的操作。
1、用select…into outfile導(dǎo)出文本文件
MySQL中,可以使用select…into outfile語(yǔ)句將表的內(nèi)容導(dǎo)出成一個(gè)文本文件。其基本語(yǔ)法形式如下:
select [列名] from table [where 語(yǔ)句] into outfile '目標(biāo)文件'[option];
該語(yǔ)句分為兩個(gè)部分。前半部分是一個(gè)普遍的select語(yǔ)句,通過(guò)這個(gè)select語(yǔ)句來(lái)查詢所需要的數(shù)據(jù);后半部分是導(dǎo)出數(shù)據(jù)的。其中,“目標(biāo)文件”參數(shù)指出將查詢的記錄導(dǎo)出到哪個(gè)文件;“OPTION”參數(shù)是可以有常用的5個(gè)選項(xiàng)。
2、用mysqldump命令導(dǎo)出文本文件
mysqldump命令可以備份數(shù)據(jù)庫(kù)中的數(shù)據(jù)。但是,備份時(shí)是在備份文件中保存了create語(yǔ)句和insert語(yǔ)句。不僅如此,mysqldump命令還可以導(dǎo)出文本文件。其基本的語(yǔ)法形式如下:
mysqldump -u root -pPassword -T 目標(biāo)目錄 dbname table [option];
其中,Password參數(shù)表示root用戶的密碼,密碼緊挨著-p選項(xiàng);目標(biāo)目錄參數(shù)是指導(dǎo)出的文本文件的路徑;dbname參數(shù)表示數(shù)據(jù)庫(kù)的名稱;table參數(shù)表示表的名稱;
3、用mysql命令導(dǎo)出文本文件
mysql命令可以用來(lái)登錄MySQL服務(wù)器,也可以用來(lái)還原備份文件。同時(shí),mysql命令也可以導(dǎo)出文本文件。其基本語(yǔ)法形式如下:
mysql -u root -pPassword -e "select 語(yǔ)句" dbname > C:/name.txt;
其中,Password表示root用戶的密碼;使用-e選項(xiàng)就可以執(zhí)行SQL語(yǔ)句;“selec語(yǔ)句”用來(lái)查詢記錄。C:/name.txt表示導(dǎo)出文件的路徑。
4、用load data infile方式導(dǎo)入文本文件
MySQL中,可以使用load data infile命令將文本文件導(dǎo)入到MySQL數(shù)據(jù)庫(kù)中。其基本語(yǔ)法形式如下:
load data [local] infile file into table table [option];
其中,“local”是在本地計(jì)算機(jī)中查找文本文件時(shí)使用的;“file”參數(shù)指定了文本文件的路徑和名稱;“table”參數(shù)指標(biāo)的名稱;
5、用mysqlimport命令導(dǎo)入文本文件
MySQL中,可以使用mysqlimport命令將文本文件導(dǎo)入到MySQL數(shù)據(jù)庫(kù)中。其基本語(yǔ)法形式如下:
mysqlimport -u root -pPassword [--LOCAL] dbname file [option]
其中,“Password”參數(shù)是root用戶的密碼,必須與-p選項(xiàng)緊挨著;“local”是在本地計(jì)算機(jī)中查找文本文件時(shí)使用的;“dbname”參數(shù)表示數(shù)據(jù)庫(kù)的名稱;“file”參數(shù)指定了文本文件的路徑和名稱;
五、總結(jié)
這里的相關(guān)內(nèi)容還沒(méi)有整理完畢,文章后面持續(xù)更新,建議收藏。
到此這篇關(guān)于MySQL數(shù)據(jù)備份、還原、數(shù)據(jù)庫(kù)遷移以及表的導(dǎo)出和導(dǎo)入的文章就介紹到這了,更多相關(guān)MySQL數(shù)據(jù)備份還原內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL數(shù)據(jù)庫(kù)遷移data文件夾位置詳細(xì)步驟
- Mysql的數(shù)據(jù)庫(kù)遷移到另一個(gè)機(jī)器上的方法詳解
- mysql數(shù)據(jù)庫(kù)遷移至Oracle數(shù)據(jù)庫(kù)
- MySQL數(shù)據(jù)庫(kù)遷移快速導(dǎo)出導(dǎo)入大量數(shù)據(jù)
- mysql數(shù)據(jù)庫(kù)遷移數(shù)據(jù)目錄至另一臺(tái)服務(wù)器詳細(xì)步驟
- MySQL數(shù)據(jù)庫(kù)遷移全過(guò)程
- MySQL數(shù)據(jù)庫(kù)遷移實(shí)戰(zhàn)
- MySQL數(shù)據(jù)庫(kù)遷移后無(wú)法啟動(dòng)的問(wèn)題解決
相關(guān)文章
解決Mysql數(shù)據(jù)庫(kù)插入數(shù)據(jù)出現(xiàn)問(wèn)號(hào)(?)的解決辦法
這篇文章主要介紹了解決Mysql數(shù)據(jù)庫(kù)插入數(shù)據(jù)出現(xiàn)問(wèn)號(hào)(?)的解決辦法的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07MySQL架構(gòu)體系知識(shí)點(diǎn)總結(jié)
在本篇內(nèi)容里我們給大家整理了關(guān)于MySQL架構(gòu)體系的相關(guān)知識(shí)點(diǎn)內(nèi)容以及相關(guān)實(shí)例,需要的朋友們學(xué)習(xí)下。2019-02-02MYSQL優(yōu)化之?dāng)?shù)據(jù)表碎片整理詳解
在日常的數(shù)據(jù)庫(kù)維護(hù)中,在給客戶制定維護(hù)方案時(shí),都會(huì)有降低高水位此類(lèi)的建議 建議每年年終定期做數(shù)據(jù)整理,下面這篇文章主要給大家介紹了關(guān)于MYSQL優(yōu)化之?dāng)?shù)據(jù)表碎片整理的相關(guān)資料,需要的朋友可以參考下2022-04-04mysql導(dǎo)入sql文件報(bào)錯(cuò) ERROR 2013 2006 2002
今天在做項(xiàng)目的時(shí)候遇到個(gè)問(wèn)題,就是往mysql里導(dǎo)入sql文件的時(shí)候總是報(bào)ERROR 2013 2006 2002,研究了一番才找到解決辦法,這里記錄下來(lái)分享給大家2014-11-11MySQL創(chuàng)建帶特殊字符的數(shù)據(jù)庫(kù)名稱方法示例
這篇文章主要給大家介紹了MySQL創(chuàng)建帶特殊字符的數(shù)據(jù)庫(kù)名稱方法,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考學(xué)習(xí),下面來(lái)一起看看吧。2017-03-039種 MySQL數(shù)據(jù)庫(kù)優(yōu)化的技巧
這篇文章小編主要給大家介紹的是 MySQL數(shù)據(jù)庫(kù)優(yōu)化的正確姿勢(shì),九種方法呢?。?!需要的小伙伴趕快收藏起來(lái)吧2021-09-09Mysql事務(wù)隔離級(jí)別原理實(shí)例解析
這篇文章主要介紹了Mysql事務(wù)隔離級(jí)別原理實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03