做seo優化就難免與網站打交道,我們很多SEO學員做網站時間長了,購買的虛擬主機總覺得速度不給力,還動不動掛掉,隨著現在阿里云ECS價格不斷下降,手上有2、3個網站的人幾乎都會選擇性價比更高的ECS云服務器,不想折騰的可能會選擇輕量應用服務器,但配置受限,軟件版本很低,也很難體驗到速度和效率更高的mysql和php,最主要是性價比也確實不高,一臺輕量應用服務器再加2、300元足可以配一臺低配的標準的ECS云服務器了,數據庫和php都可以選擇自己想要的。
前兩天小編在折騰公司香港服務器的時候就遇到了一個非常棘手的問題,如果處理不慎,也可以說損失慘重,但我不能放棄,在這里做個小記。
自mysql5.5版本以后,隨著大家對Mysql數據庫要求越來越高,也有越來越多的服務器環境在安裝Mysql數據庫的時候默認使用InnoDB數據庫引擎做為默認引擎,而之前使用MyISAM數據庫引擎的人也為了應對復雜的事務處理和高并發而轉向InooDB。
InnoDB數據庫引擎應對復雜事件和并發是好很多但在這些好處面前,以前的網站運營人員也面臨一個問題,那就是偶然有一天,你的服務器上數據庫因一個誤操作導致數據庫服務掛掉了,怎么重啟都重啟不起來。這個時候,很多人都會想到把數據庫文件備份,重新安裝不就解決了嗎?想法很美好,但現實確不是那么回事,innodb類型的數據庫直接拷文件過去根本就讀不出來。
小編以前使用的數據庫默認數據庫引擎都是MyISAM,網站換服務器的時候,只需要把數據庫文件打包復制到新的服務器就可以了,前段時間由于想嘗試新的服務器軟件和PHP7.2帶來的優越性能,安裝數據庫的時候選擇了mysql5.7.22版本,默認的數據庫引擎則選擇了InnoDB,昨天檢查服務器的時候,發現數據庫日志里面產生了很多錯誤提示,經檢查,是一個wordpress網站的數據庫一個表因不能被InnoDB讀取不斷的產生錯誤日志,通過phpmyadmin 對有問題的進行修復,由于數據庫使用的數據庫引擎是MyISAM,于是我點了修復,結果提示:2006, MySQL server has gone away ,然后我就想著試一下優化怎么樣,點擊后,phpmyadmin控制面板的root賬號直接退出了,再登錄就提示:connect(): (HY000/2002): No such file or directory ,再一看服務器上的網站,所有網站打開時都提示數據庫連接失敗,這下玩大了!
但知道原因是數據庫服務掛了,連接ssh重啟數據庫服務,結果提示:Starting MySQL. ERROR! The server quit without updating PID file (/www/data/twk2.pid),在網上找了一番后最后還是放棄了,備份原來的數據庫,卸載服務器上的數據庫,重新安裝,安裝完后重啟都沒問題,但原來數據庫里面MyISAM類型的數據庫文件拷入后在phpmyadmin里面查看都讀得出來,也都沒問題,但是innodb類型的數據庫文件拷入后,讀不出來,從網上看了很多innodb相關的數據庫備份的內容也知道是ibdata1的文件,備份新數據庫目錄下面的ibdata1文件,停止數據庫服務,刪除ibdata1以及ib_logfile0和ib_logfile1兩個文件夾,拷入原來備份的數據庫下面的ibdata1文件到新的數據庫目錄,重啟數據庫,沒反應,還是提示:Starting MySQL. ERROR! The server quit without updating PID file (/www/data/twk2.pid),這可怎么辦?
換一種思路,想辦法把原來數據庫中InnoDB類型的數據庫導出來,然后再導入到新的數據庫中這樣問題就解決了,在網上一番查找和測試,終于找到了解決問題的方法。步驟如下:
以沒重裝數據庫為例,還是原來的數據庫,數據庫服務啟動不起來,刪除ib_logfile0和ib_logfile1兩個文件夾,修改數據庫配置文件my.cnf,在[mysqld] 下面加入
innodb_force_recovery = 6
innodb_purge_thread = 0
保存文件,重啟數據庫服務發現可以啟動起來了,登錄phpmyadmin控制面板也沒問題了,這時候在具體的數據庫(InnoDB類型)里面也可以看到文件了,但這些文件都是只讀的,你如果這時候想登錄網站后臺,是登錄不了的,所以這也不是長久解決問題的辦法,所以直接使用工具導出數據庫是最穩妥的辦法。MyISAM類型的數據庫不受這個影響,直接把文件拷貝到其它服務器上就可以使用。有時候查找問題比重裝數據庫用的時間更久,所以建議還是直接卸載原來的數據庫重裝比較快,然后新建所有數據庫導入數據就行了。
如果你已經卸載了服務器上的數據庫進行了重裝,那么備份新裝的數據庫所有文件,停止數據庫服務,刪除新裝的數據庫目錄下面ibdata1以及ib_logfile0和ib_logfile1兩個文件夾,把舊數據庫目錄下面的ibdata1文件拷貝到新安裝的數據庫目錄下面,然后修改數據庫配置文件my.cnf,在[mysqld] 下面加入
innodb_force_recovery = 6
innodb_purge_thread = 0
保存,重啟數據庫服務,登錄phpmyadmin,導出原來想要導出的innodb類型的數據庫,恢復新數據庫的ibdata1文件,刪除ib_logfile0和ib_logfile1兩個文件夾以及數據庫配置文件my.cnf加入的那兩行代碼,保存,重啟數據庫服務就可以了,新建數據庫把導出的數據庫文件導入進去就行了。
網上那些修復Starting MySQL. ERROR! The server quit without updating PID file (/www/data/twk2.pid) 的方法,例如:修改數據庫目錄權限,把配置文件里面的localhost修改成127.0.0.1,方法很多但幾乎沒用。
如果不適應InnoDB這種數據庫類型,覺得不方便,你也可以通過SQL命令把InnoDB類型的數據庫轉換成MyISAM類型,這樣如果數據庫服務出問題,只需要把數據庫文件下載拷貝到新的數據庫中就可以了。轉換方法如下:以wordpress數據庫為例,打開數據庫,點到SQL
輸入:
ALTER TABLE wp_commentmeta ENGINE=MYISAM;
ALTER TABLE wp_termmeta ENGINE=MYISAM;
ALTER TABLE wp_comments ENGINE=MYISAM;
ALTER TABLE wp_links ENGINE=MYISAM;
ALTER TABLE wp_options ENGINE=MYISAM;
ALTER TABLE wp_postmeta ENGINE=MYISAM;
ALTER TABLE wp_posts ENGINE=MYISAM;
ALTER TABLE wp_terms ENGINE=MYISAM;
ALTER TABLE wp_term_relationships ENGINE=MYISAM;
ALTER TABLE wp_term_taxonomy ENGINE=MYISAM;
ALTER TABLE wp_usermeta ENGINE=MYISAM;
ALTER TABLE wp_users ENGINE=MYISAM;
點執行,執行結束會給出執行結果,如果有提示錯誤,就按錯誤提示加入或者刪除對應的轉換行命令,這樣就可以把原來的InnoDB類型的數據庫轉換成MyISAM了,如果你的網站程序不是wordpress,那只需要把表名改成你的數據庫表名就可以了。
做seo就是這樣,折騰次數多了你遇到的問題多了,解決問題的方法也就多了,記得問題解決了別記了做個記錄分享給大家,幫助下次遇到這個問題的朋友,喜歡就轉發吧。