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