這個錯誤在前些周遇到過,沒有解決,直接粗暴的卸載重裝了,自己用的是wampserver集成環境,重裝的后果是mysql里面的一些已有的數據庫就沒有了,有點小悲劇,不過幸好都是一些測試用的數據庫,后面直接向小伙伴重新要了份,這次又遇到了,受不了了,谷歌百度,花了倆鍾把把解決了,解決方案是在mysql的my.ini文件中添加一行:
下面記錄下問題解決windows下mysql啟動不了的一般的流程:
1、先檢查mysql的端口號是否被暫用,windows的cmd下使用,有用的話則把對應的程序關閉掉
windows下查詢端口占用:netstat -ano | findstr "3306" ,由此可以得到占用端口的進程號
根據進程號PID得到進程名字:tasklist |findstr 6432 ,由此得到進程名稱
windows殺死對應進程,用任務管理器,或者taskkill /PID 6432 或者taskkill /IM notepad.exe
2、如果沒有端口占用,右擊計算機---管理---服務,找打mysql,wampserver的是 wampmysqld,如下圖,嘗試啟動,能啟動最好,不能啟動,會提示相應的報錯,可以根據不同的錯誤類型,一般會得到相應的提示或解決方案,如不行,見下一步:
3、查看事件管理器中的應用程序,找到帶紅色感嘆號的mysql,看看錯誤日志是什么,我這次遇到的問題如下:
InnoDB: Attempted to open a previously opened tablespace. Previous tablespace ck_cookabuy/ck_brands uses space ID: 35 at filepath: .\ck_cookabuy\ck_brands.ibd. Cannot open tablespace cookabuy3/ck_users which uses space ID: 35 at filepath: .\cookabuy3\ck_users.ibd
事件查看器
根據錯誤提示,在goole下找到這么篇文章:
就是在mysql的配置文件my.ini中添加
innodb_force_recovery = 1
重啟后就正常了,完事之后可以把這個去掉。
后面又去了解了下關於這個配置選項已經錯誤的原因,
原來是我機器關機的時候沒有正常關閉數據庫,因為偷懶,在自己的機器上開發,一般就直接關機,結果導致mysql日志文件損壞,重啟之后無法正常恢復,更無法正常對外提供服務。
而關
於innodb_force_recovery參數,參考這篇博文【案例】利用innodb_force_recovery 解決MySQL服務器crash無法重啟問題 ,才知道他有6個參數
1. (SRV_FORCE_IGNORE_CORRUPT):忽略檢查到的corrupt頁。
2. (SRV_FORCE_NO_BACKGROUND):阻止主線程的運行,如主線程需要執行full purge操作,會導致crash。
3. (SRV_FORCE_NO_TRX_UNDO):不執行事務回滾操作。
4. (SRV_FORCE_NO_IBUF_MERGE):不執行插入緩沖的合並操作。
5. (SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存儲引擎會將未提交的事務視為已提交。
6. (SRV_FORCE_NO_LOG_REDO):不執行前滾的操作。
由此就能夠理解這個錯誤的原因以及解決方法了,看來以后還是要關機還是要正常關閉數據庫啊。
看了百度里面很多方法,折騰了挺久,最后就那么一句配置解決問題,是自己經驗不足吧,僅此做個記錄。希望這篇文章能夠幫助遇到同樣問題的小伙伴。