做后端開發(fā)、運(yùn)維的朋友,肯定都踩過MySQL數(shù)據(jù)的坑——誤刪表、服務(wù)器崩潰、換服務(wù)器需要遷移數(shù)據(jù),要么手忙腳亂找工具,要么對著復(fù)雜命令無從下手,更怕操作失誤把僅有的數(shù)據(jù)也搞沒,最后加班到深夜還不一定能解決。其實(shí)不用慌,MySQL自帶的mysqldump工具,就能輕松搞定備份、恢復(fù)和數(shù)據(jù)遷移,全程命令行操作,步驟簡單,新手跟著做也能一次成功,今天就用最口語化的方式,把實(shí)操細(xì)節(jié)講透,避開所有坑。
首先跟大家說下,mysqldump到底是什么?說白了,它就是MySQL官方自帶的備份工具,不需要額外安裝,只要你的MySQL能正常啟動,就能直接用。它的核心原理很簡單:把數(shù)據(jù)庫里的表、數(shù)據(jù)、存儲過程,甚至權(quán)限,都轉(zhuǎn)換成SQL腳本文件,備份的時候生成這個腳本,恢復(fù)的時候執(zhí)行這個腳本,就能把數(shù)據(jù)完整還原;遷移數(shù)據(jù)的時候,就是把源數(shù)據(jù)庫的腳本拷貝到目標(biāo)服務(wù)器,再執(zhí)行恢復(fù),全程無復(fù)雜操作,而且兼容性極強(qiáng),不管是Windows還是Linux服務(wù)器,操作邏輯都一樣。
先講最基礎(chǔ)的——mysqldump備份實(shí)操,這是所有操作的前提,畢竟只有備份做好了,數(shù)據(jù)才不會丟。這里分三種常見場景,覆蓋大家90%的需求,新手優(yōu)先掌握前兩種就夠了。
第一種,全量備份:備份MySQL里所有的數(shù)據(jù)庫,適合服務(wù)器遷移、定期全量備份(比如每天凌晨自動備份)。操作命令很簡單,打開服務(wù)器的命令行(Windows打開CMD,Linux打開終端),直接輸入命令:
mysqldump -u 用戶名 -p --all-databases > 備份文件路徑/備份文件名.sql
舉個例子,比如我的MySQL用戶名是root,密碼是123456,我要把備份文件存在D盤的backup文件夾里,文件名叫做all_mysql_backup.sql,那命令就是:
mysqldump -u root -p --all-databases > D:/backup/all_mysql_backup.sql
輸完命令后,會提示你輸入MySQL密碼,直接輸入(輸入時不顯示密碼,正常輸入即可),回車之后,就開始備份了。這里有兩個坑要避開:一是密碼不要直接寫在命令里(比如-p123456),容易泄露,而且部分版本會報錯;二是備份文件路徑要提前建好,比如上面的backup文件夾,如果沒建,會提示“路徑不存在”,先建文件夾再執(zhí)行命令。
第二種,單庫備份:只備份某一個指定的數(shù)據(jù)庫,適合日常維護(hù)(比如只備份業(yè)務(wù)庫,不備份系統(tǒng)庫),比全量備份更節(jié)省空間。命令和全量備份類似,只是去掉--all-databases,加上指定的數(shù)據(jù)庫名:
mysqldump -u 用戶名 -p 數(shù)據(jù)庫名 > 備份文件路徑/備份文件名.sql
比如我要備份名為test的數(shù)據(jù)庫,備份文件存在Linux的/root/backup目錄下,文件名叫test_backup.sql,命令就是:
mysqldump -u root -p test > /root/backup/test_backup.sql
這里提醒大家,備份完成后,最好打開備份文件看看,確認(rèn)里面有內(nèi)容,而且沒有報錯信息(比如出現(xiàn)“ERROR”就是備份失?。?,避免后續(xù)恢復(fù)時發(fā)現(xiàn)備份文件無效。
第三種,單表備份:只備份某一個數(shù)據(jù)庫里的指定表,適合只誤刪了某張表,不需要恢復(fù)整個數(shù)據(jù)庫的場景,更高效。命令如下:
mysqldump -u 用戶名 -p 數(shù)據(jù)庫名 表名 > 備份文件路徑/備份文件名.sql
比如備份test數(shù)據(jù)庫里的user表,命令就是:mysqldump -u root -p test user > D:/backup/user_backup.sql,操作和前兩種一樣,輸入密碼即可。
備份做好了,接下來講恢復(fù)實(shí)操——這是大家最關(guān)心的,萬一數(shù)據(jù)丟了,怎么用備份文件恢復(fù)?恢復(fù)的核心邏輯是:先創(chuàng)建好對應(yīng)的數(shù)據(jù)庫(如果是全量恢復(fù),不需要手動創(chuàng)建,腳本會自動創(chuàng)建;如果是單庫、單表恢復(fù),需要先創(chuàng)建數(shù)據(jù)庫),然后執(zhí)行備份的SQL腳本,就能還原數(shù)據(jù)。
先講全量恢復(fù):適合服務(wù)器崩潰、重新安裝MySQL后,還原所有數(shù)據(jù)。步驟分兩步,第一步,登錄MySQL:
mysql -u 用戶名 -p
輸入密碼,登錄成功后,執(zhí)行第二步,恢復(fù)數(shù)據(jù):
source 備份文件路徑/備份文件名.sql;
比如我的備份文件在D:/backup/all_mysql_backup.sql,那就是source D:/backup/all_mysql_backup.sql; 這里要注意,命令末尾一定要加“;”,否則MySQL不會執(zhí)行,而且路徑要寫對,寫錯了會提示“文件不存在”。執(zhí)行完成后,退出MySQL,重新登錄,就能看到所有數(shù)據(jù)都還原了。
然后是單庫恢復(fù):比如誤刪了test數(shù)據(jù)庫,或者需要把備份的test庫恢復(fù)到另一臺服務(wù)器。步驟比全量恢復(fù)多一步——先創(chuàng)建數(shù)據(jù)庫。第一步,登錄MySQL,執(zhí)行創(chuàng)建數(shù)據(jù)庫的命令:
create database 數(shù)據(jù)庫名 charset utf8mb4;
比如創(chuàng)建test數(shù)據(jù)庫:create database test charset utf8mb4; (utf8mb4是目前最常用的編碼,支持所有特殊字符,避免中文亂碼)。第二步,切換到這個數(shù)據(jù)庫:use test; 第三步,執(zhí)行恢復(fù)命令:source 備份文件路徑/test_backup.sql; 執(zhí)行完成后,數(shù)據(jù)就還原了。
單表恢復(fù)和單庫恢復(fù)類似,前提是數(shù)據(jù)庫已經(jīng)存在,切換到對應(yīng)數(shù)據(jù)庫后,執(zhí)行source 備份文件路徑/user_backup.sql; 就能還原指定的表,這里要注意,不要在錯誤的數(shù)據(jù)庫里執(zhí)行腳本,否則會把表恢復(fù)到錯誤的庫中。
最后講大家經(jīng)常用到的——mysqldump數(shù)據(jù)遷移實(shí)操,其實(shí)就是“備份+恢復(fù)”的組合操作,核心是把源服務(wù)器的數(shù)據(jù)庫備份成SQL腳本,然后把腳本拷貝到目標(biāo)服務(wù)器,再在目標(biāo)服務(wù)器執(zhí)行恢復(fù)命令,全程不需要額外工具,新手也能搞定。
遷移步驟分3步,非常簡單:第一步,在源服務(wù)器(原來的數(shù)據(jù)庫服務(wù)器)上,執(zhí)行備份命令(全量、單庫都可以,根據(jù)需求選擇),生成SQL腳本;第二步,把備份的SQL腳本,通過FTP、U盤或者命令行(scp命令,Linux之間)拷貝到目標(biāo)服務(wù)器的指定路徑;第三步,在目標(biāo)服務(wù)器上,按照上面講的恢復(fù)步驟,執(zhí)行SQL腳本,完成遷移。
這里有兩個關(guān)鍵注意事項,一定要記好:一是源服務(wù)器和目標(biāo)服務(wù)器的MySQL版本,盡量保持一致,或者目標(biāo)服務(wù)器版本高于源服務(wù)器,避免版本不兼容導(dǎo)致恢復(fù)失??;二是遷移前,目標(biāo)服務(wù)器上不要有和源服務(wù)器同名的數(shù)據(jù)庫,否則會覆蓋原有數(shù)據(jù),建議先備份目標(biāo)服務(wù)器的原有數(shù)據(jù),再執(zhí)行遷移。
另外,給大家補(bǔ)充幾個實(shí)用小技巧,提升操作效率,避開坑:1. 備份時可以加上--lock-tables=false參數(shù),避免備份時鎖表,影響業(yè)務(wù)正常運(yùn)行(適合生產(chǎn)環(huán)境);2. 備份文件可以加上時間戳,比如all_mysql_backup_20260505.sql,方便區(qū)分不同時間的備份,避免覆蓋;3. 恢復(fù)時如果提示“權(quán)限不足”,可以先給MySQL用戶授權(quán),命令:grant all privileges on *.* to '用戶名'@'localhost' identified by '密碼'; 4. 日常備份建議設(shè)置定時任務(wù),比如Linux用crontab,Windows用任務(wù)計劃,每天凌晨自動備份,避免忘記備份導(dǎo)致數(shù)據(jù)丟失。
其實(shí)mysqldump的操作真的很簡單,核心就是“備份生成SQL,恢復(fù)執(zhí)行SQL”,不管是備份、恢復(fù)還是遷移,只要跟著上面的步驟走,避開幾個常見的小坑,新手也能輕松搞定。大家可以先在測試環(huán)境練手,熟悉命令后,再在生產(chǎn)環(huán)境操作,確保數(shù)據(jù)安全。