記一次mysql數據庫備份引起的風波

       前幾日閒着無事,正練習着幾個簡單的linux命令,平時圖形用戶界面操作慣了,這真要轉到命令行下還真不太適應。突然想到自己管理的那個linux服務器上的一個主要網站的mysql數據庫有半年沒備份了,正好練習下。

       說幹就幹,cd命令進入目標目錄,輸入:zip -r ./XXX.zip ./* 一陣滾屏後,SecureCRT親切地反饋命令執行完成。然後自然而然sz命令了,下載完成後,在本地搭建的服務器上測試了下,數據正常,便把數據包扔進了自己電腦的備份目錄,OK!

       馬上就要期末考試了,平時沒怎麼上過課,課後沒怎麼認真做作業的我表示十分慌張,沒辦法,老老實實自習吧!今天正在一教自習着,手機響了。拿出來一看,是原來部門的一個幹事(當然現在是幹部了)打來的。看到這小子打來電話我就覺得沒好事,果不其然,第一句就問在電腦旁沒。我問什麼事情,他說一個學生在管理網站後臺時不小心把一個欄目下的文章全給刪掉了!!!我勒個去!這該是一個什麼樣的操作啊!恢復那些文章肯定是不行的了,還好,哥有備份,嘿嘿!我便答應他回去處理一下,當然,小幹事的態度是很好的,我便又趁機鼓勵、批評教育了他一番,過了一把學長癮~

       廢話少說,進入正題。回到寢室,打開那個網站,發現那個原本有近千條新聞的欄目下只有幾十條最近的新聞了,看來是犯了錯怕被罵,趕緊補上幾十條暫時瞞天過海吧!根據平時的經驗,因爲這個網站的所有新聞都放在了一個表裏(這個數據庫的設計者真是個渣!),不太好區分,又加上我嫌麻煩,便直接K掉了那個數據庫,然後把前幾天備份的上傳上去。本以爲萬事大吉,再次打開網站,我擦!提示SQL語句出錯!我暈,這本地的網站和服務器上的是一模一樣的啊,平時用的好好的,怎麼今天就不行了呢?抱着懷疑的態度,我登錄上phpmyadmin,咦,數據庫、表什麼的都在啊,隨便點進去一個表,訪問OK。當點擊到那個出問題的表時,問題來了:phpmyadmin提示can't find xxx.frm……我納悶了,其他表正常,爲啥這個表會提示文件找不到呢?爲了確認是真的找不到,便cd進去對應目錄,尼瑪,這個文件好好的在文件夾裏躺着!真的是“躺着”也中槍啊!

       我又隨手點開了其他的表,發現有幾個表出現了這個問題,大部分表是正常的。在仔細一看,發現在這些無法訪問的表欄目裏顯示着“使用中”三個字,我想會不會就是這個問題呢? 帶着疑問上網 一搜,看到有人說修復表可能解決問題,好吧,修復就修復吧,可這修復功能在哪呢?找了好半天才發現它藏在了一個下拉框裏!勾選那幾個出問題的表,然後修復,可問題依舊!

        再上網尋覓了 一番,發現有人說可能是權限的問題,即mysql沒有訪問那些表的權限,那人還提供了幾條命令:chown -R root /usr/local/mysql5/var。照着敲進去,運行後,重啓 mysql,我擦!!!mysql直接躺着不肯起來了!!!順便嘟噥了一句看不懂的英語。OK,有問題,找度娘!直接複製這條錯誤代碼,百度立馬就找到了相關文章,真不愧是度娘啊!點進去一看,說是要刪除mysql數據目錄下的mysq-bin.index文件,你讓我刪我就刪,kill掉然後再次重啓,這下mysql乖乖啓動了,可還是沒能解決問題,再刷新phpmyadmin,想死的心都有!除了mysql的系統數據庫和極個別數據庫,大部分數據庫直接顯示錶數目爲0!

       這下我慌了!感覺捅出大簍子來了!其他數據庫我可從來沒備份過啊,這下全沒了,我到哪哭去?隨手進入一個數據庫的目錄,想看看是不是真的不在了,ls一下,暈,這不好好在這嘛!看來數據沒有被刪除,應該還是老問題。這時我發現phpmyadmin已經沒有用武之地了,乾脆自己動手,手動進入mysql環境,先show database,發現數據庫好好的都出現了,再use 一下 那個表消失的數據庫,提示:

Mysql Error:1018:can't read dir of XXX

       老規矩,複製粘貼問度娘。一番查找後在百度空間看到了一篇帖子說這個問題,上面解釋說是數據庫的屬主不對,使用chown命令爲mysql賦權即可。我想剛剛不是賦過一次了嗎?好吧,再來一次。爲了不打錯命令,我仔細對比了一下,上面那條命令是chown -R root /usr/local/mysql5/var,而這條是chown -R mysql:mysql /usr/local/mysql/var,果然命令不對,上面那條是把數據庫的屬主設置爲root,下面這條纔是設置爲mysql,看來文件就在這裏,我重新輸入了一下這條新命令,然後重啓mysql,抱着忐忑不安的心理訪問網站,我的天,竟然奇蹟般的好了!!!

       折騰了我一個多小時,問題終於解決,心裏那個激動啊!下面來總結一下:

        1、罪魁禍首就在於我那天備份數據庫的時候沒有先停止mysql服務,在數據庫中的某幾個表正在使用時進行備份,導致出現了上面所說的”使用中“和can't find XXX.frm 的故障。

        2、不要輕易使用網上提供的命令,最好能找到其他也是使用這個命令解決問題的類似帖子,能確認一下,不然對於我們這種命令菜鳥來說,一旦操作出了問題,想再恢復就難了,還好今天使用的命令都沒造成什麼大問題。

        3、mysql目錄下一大堆mysql-bin.0000X文件,如果不佔用太大的空間,不太影響性能,最好不要輕易刪除,就我所知,這個可用來做數據恢復的,今天看來還有別的用處啊。像今天出現的多個數據庫表數目爲0的問題,就是因爲我輕易刪掉了這些東西!

        4、要養成數據備份的好習慣,像我這個例子,還好我之前備份了數據庫,不然真得把數據恢復到半年前,估計要被老師罵死!手動重發那些通知,不得累死啊!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章