這幾天公司新出了個組件化的項目,裡面需要用到mysql資料庫相關的技術,由於之前一直用的mongodb,所以mysql幾乎忘光了,於是只能在linux虛擬機中重新開始學習。
基本的增刪改查還好,但是在資料備份的上遇到了一些問題,好在一番嘗試之後終於成功。
Mysql的api以及網路上說的備份指令是:mysqldump -uroot –p 要備份的資料庫名稱> 目標路徑/目標檔名.sql,所以我就照著敲了一遍,但是結果報了一個2002的例外(補充:一開始用這個指令的時候是提示找不到mysqldump的,後來用了軟連結ln把mysqldump指令實際位址連接到usr/bin):
mysqldump:Got error: 2002: Can't connect to local MySQL server through socket'/tmp/mysql.sock' (2) when trying to connect, 如图1:
於是查了資料以後,我又進行了一些修改,如圖2:
#但是呢,這時候2002是沒有了,取而代之的卻是有出現了1045錯誤:mysqldump: Got error: 1045: Access denied for user 'root'@'localhost'(using password: YES) when trying to connect,如圖3:
估摸著這意思應該是說root用戶和localhost權限方面有問題,因為我記得我在設定mysql遠端存取的時候把host都設定成了%,如圖4:
#於是又在網路上搜尋了一下之後,又找到了另一個備份方面的指令,嘗試之後發現可行,如圖5:
#至此,已經在linux虛擬機中成功備份mysql資料庫,但是這個指令未免就太長了,再想到mysql的api說的應該總不會錯吧,於是便想著優化一下。
那麼,既然1045出現的錯誤我已經大概能猜到是用戶權限的問題,於是便從這裡下手,沒有root的localhost,那就加上吧。進入資料庫,使用mysql,如圖4,然後添加用戶,如圖6:
#再次查看user表,可以發現成功添加,如圖7:
那麼備份的指令便可以變成優化之後的了,如圖8:
顯而易見,指令變短了,只是依舊還不夠短,於是再次查找資料後找到了一個解決辦法,需要把mysql.sock的實際指向地址給鏈接到2002錯誤中的地址,我的修改如圖9:
那麼最後,大概就是見證奇蹟的時刻了吧,該驗證api上的說法了:輸命令,回車,再次成功備份,至此算是大功告成了,如圖10:
總結一下,備份的話這裡可以細分為三種命令方式,只是勉強弄懂了的話就知道其實還是一種而已。
以上就是linux中mysql指令方式備份資料的問題的詳解的內容,更多相關內容請關注PHP中文網(www.php.cn)!