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