史上最簡單的MySQL數(shù)據(jù)備份與還原教程(中)(三十六)
數(shù)據(jù)備份與還原第二篇,具體如下
基礎(chǔ)概念:
備份,將當(dāng)前已有的數(shù)據(jù)或記錄另存一份;
還原,將數(shù)據(jù)恢復(fù)到備份時(shí)的狀態(tài)。
為什么要進(jìn)行數(shù)據(jù)的備份與還原?
防止數(shù)據(jù)丟失;保護(hù)數(shù)據(jù)記錄。
數(shù)據(jù)備份與還原的方式有很多種,具體可以分為:數(shù)據(jù)表備份、單表數(shù)據(jù)備份、SQL備份和增量備份。
單表數(shù)據(jù)備份
單表數(shù)據(jù)備份,每次只能備份一張表,而且只能備份數(shù)據(jù),不能備份表結(jié)構(gòu)。
通常的使用場景為:將表中的數(shù)據(jù)導(dǎo)出到文件。
備份方法:從表中選出一部分?jǐn)?shù)據(jù)保存到外部的文件中,
select */字段列表 + into outfile + '文件存儲(chǔ)路徑' + from 數(shù)據(jù)源;
在這里,使用單表數(shù)據(jù)備份有一個(gè)前提,那就是:導(dǎo)出的外部文件不存在,即文件存儲(chǔ)路徑下的文件不存在。
執(zhí)行如下 SQL 語句,進(jìn)行測試:
-- 單表數(shù)據(jù)備份 select * into outfile 'D:/CoderLife/testMySQL/class.txt' from class;

如上圖所示,SQL 語句已經(jīng)執(zhí)行成功。在這里,如果我們遇到:
ERROR 1290 (HY000): The MySQL server is running with the –secure-file-priv option so it cannot execute this statement.
這個(gè)錯(cuò)誤,可以通過查看「詳述 MySQL 導(dǎo)出數(shù)據(jù)遇到 secure-file-priv 的問題」進(jìn)行解決。
為了驗(yàn)證是否真的將class表中的數(shù)據(jù)導(dǎo)出到指定位置,我們可以到該路徑下進(jìn)行確認(rèn):

如上圖所示,顯然我們已經(jīng)將class表中的數(shù)據(jù)導(dǎo)出到本地啦!不過在這里,有一點(diǎn)需要我們特別注意,那就是:對于從數(shù)據(jù)庫導(dǎo)出的文件,我們最好用EditPlus等編輯工具打開,防止亂碼。
此外,對于上述用于導(dǎo)出表中數(shù)據(jù)的 SQL 語法,其實(shí)我們可以顛倒書寫順序,也沒有問題,例如:
select */字段列表 + from 數(shù)據(jù)源 + into outfile + '文件存儲(chǔ)路徑';
執(zhí)行如下 SQL 語句,進(jìn)行測試:
-- 單表數(shù)據(jù)備份 select * from class into outfile 'D:/CoderLife/testMySQL/class2.txt';

接下來,我們學(xué)習(xí)一些用于單表數(shù)據(jù)備份的高級(jí)操作,即自己指定字段和行的處理方式。
基本語法:select */字段列表 + into outfile + '文件存儲(chǔ)路徑' + fields + 字段處理 + lines + 行處理 + from 數(shù)據(jù)源;
字段處理:
enclosed by:指定字段用什么內(nèi)容包裹,默認(rèn)是,空字符串;
terminated by:指定字段以什么結(jié)束,默認(rèn)是\t,Tab鍵;
escaped by:指定特殊符號(hào)用什么方式處理,默認(rèn)是\\,反斜線轉(zhuǎn)義。
行處理:
starting by:指定每行以什么開始,默認(rèn)是,空字符串;
terminated by:指定每行以什么結(jié)束,默認(rèn)是\r\n,換行符。
執(zhí)行如下 SQL 語句,進(jìn)行測試:
-- 指定單表數(shù)據(jù)備份處理方式 select * into outfile 'D:/CoderLife/testMySQL/class3.txt' -- 字段處理 fields enclosed by '"' terminated by '|' lines starting by 'START:' from class ;

如上圖所示,顯然導(dǎo)出文件class3.txt按照我們指定的格式進(jìn)行輸出啦!在前面,我們已經(jīng)測試了各種單表數(shù)據(jù)備份的方式,現(xiàn)在我們刪除數(shù)據(jù),并嘗試還原數(shù)據(jù),即將保持在外部的數(shù)據(jù)重新恢復(fù)到數(shù)據(jù)表中。But,由于單表數(shù)據(jù)備份進(jìn)能備份數(shù)據(jù),因此如果表結(jié)構(gòu)不存在,則不能進(jìn)行還原。
基本語法:load data infile + '文件存儲(chǔ)路徑' + into table + 表名 + [字段列表] + fields + 字段處理 + lines + 行處理;
執(zhí)行如下 SQL 語句,進(jìn)行測試:
-- 刪除表 class 中的數(shù)據(jù) delete from class; -- 查看表 class 中的數(shù)據(jù) select * from class; -- 還原表 class 中的數(shù)據(jù) load data infile 'D:/CoderLife/testMySQL/class3.txt' into table class -- 字段處理 fields enclosed by '"' terminated by '|' lines starting by 'START:'; -- 查看表 class 中的數(shù)據(jù) select * from class;

如上圖所示,顯然在我們刪除表class中的數(shù)據(jù)之后,還原數(shù)據(jù)成功。
溫馨提示:符號(hào)[]括起來的內(nèi)容,表示可選項(xiàng);符號(hào)+,則表示連接的意思。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
mysql 通過拷貝數(shù)據(jù)文件的方式進(jìn)行數(shù)據(jù)庫遷移實(shí)例
這篇文章主要介紹了mysql 通過拷貝數(shù)據(jù)文件的方式進(jìn)行數(shù)據(jù)庫遷移實(shí)例的相關(guān)資料,需要的朋友可以參考下2016-11-11
mysql修改數(shù)據(jù)庫引擎的幾種方法總結(jié)
這篇文章主要給大家介紹了關(guān)于mysql修改數(shù)據(jù)庫引擎的相關(guān)資料,包括使用ALTERTABLE語句、更改默認(rèn)存儲(chǔ)引擎、使用MySQLWorkbench、導(dǎo)出和導(dǎo)入數(shù)據(jù)以及編寫腳本批量修改,每種方法都有其優(yōu)缺點(diǎn)和適用場景,需要的朋友可以參考下2024-11-11
MySQL中實(shí)現(xiàn)插入或更新操作(類似Oracle的merge語句)
這篇文章主要介紹了在MySQL中實(shí)現(xiàn)插入或更新操作(類似Oracle的merge語句)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09
Prometheus 插件mysql_exporter安裝過程
mysql_exporter是用來收集MysQL或者M(jìn)ariadb數(shù)據(jù)庫相關(guān)指標(biāo)的,mysql_exporter需要連接到數(shù)據(jù)庫并有相關(guān)權(quán)限,這篇文章主要介紹了Prometheus插件安裝(mysql_exporter),需要的朋友可以參考下2023-06-06
MySQL表字段時(shí)間設(shè)置默認(rèn)值
很多人可能會(huì)把日期類型的字段的類型設(shè)置為 date或者 datetime,但是這些不是當(dāng)前時(shí)間,那么如何把字段時(shí)間設(shè)置成當(dāng)前時(shí)間,本文就具體來介紹一下2021-05-05

