程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL關於InnoDB的幾個錯誤

MySQL關於InnoDB的幾個錯誤

編輯:MySQL綜合教程

阿裡雲服務器上裝有MySQL 5.6,這幾天MySQL服務經常死掉,啟動MySQL服務(service mysql start),卻報如下錯誤

Starting MySQL.. ERROR! The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid).

簡單的去搜索一下關於此錯誤的解決方法,找到一個說刪除InnoDB表的日志文件即可,於是就嘗試了一下(刪除操作首先別忘了備份)

不知道mysql數據存放位置的可以這樣子查看,找到my.cnf,裡面的datadir=/var/lib/mysql既是了

cat /etc/my.cnf 找到mysql數據存放位置

來到這裡面有三個文件ibdata1,ib_logfile0,ib_logfile1

其中ibdata1是InnoDB表的共享表空間,切忌不可以刪除這個文件,部分InnoDB表的數據就在裡面呢

ib_logfile0,ib_logfile1,這兩個文件不同配置下名字會不同,是InnoDB表的日志文件(別忘記了InnoDB表示事務安全的,當數據庫奔潰時,重啟數據庫服務,會根據這些日志文件重做一些事務

刪除了這兩個日志文件,然後啟動mysql(service mysql start)這次啟動成功了!

--------------------------------------------------------------------------------------------------------

可是過了不久,真的不久,才十幾分鐘,數據庫又掛了,啟動數據庫(service mysql start),又報下面這個錯誤

Starting MySQL.. ERROR! The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid).

然後再次刪除日志文件,再啟動,可以了,再過了不久……又掛了,所以明白,問題不出於這裡

這些問題,每個人出錯的都不一樣,網上別人的出錯原因也許和你不一樣呢,要不人家可以解決,你怎麼就不可以解決,故去查看msyql錯誤記錄文件自己瞧個明白

msyql錯誤記錄文件不知道在哪裡,可以這樣子來找:同樣查看my.cnf文件,其中mysqld-safe下的log-error就是mysql錯誤日志

[mysqld_safe]
log-error=/var/log/mysqld.log

打開它看看,發現一堆錯誤,用這個命令簡單看一下出錯重點

cat /var/log/mysqld.log | grep 'ERROR' | less

發現了服務啟動時,為何會跑錯了

2013-08-04 13:48:22 760 [ERROR] InnoDB: Attempted to open a previously opened tablespace. Previous tablespace em/temp uses space ID: 2 at filepath: .\em\temp.ibd. Cannot open tablespace mysql/innodb_index_stats which uses space ID: 2 at filepath: .\mysql\innodb_index_stats.ibd 

打開表空間出錯!!出這個錯的原因是以前有次操作把ibdata1給刪除掉了!(ibdata1文件剛才說了,共享表空間!!刪除掉了後mysql雖然會重新生成,但是已經損壞了所有的InnoDB數據庫了。ps:為什麼會刪除掉這個文件,我也不知道是什麼時候刪除了,是通過history看到的)

找到原因了,但是ibdata1這個文件沒有備份,恢復不了,還在我這個服務上的數據庫都是測試數據,可以drop掉重新導入以前備份的版本,故drop掉損壞的數據庫,在mysql命令中是drop不掉的,只能在文件系統裡直接刪除其文件(第一步已經知道了數據存儲位置了,直接刪(ps記得先備份))

然後再重建了數據庫,導入數據,重啟mysql,正常啟動,過了一天還沒有掛掉!修復成功!第二天再去看一下mysql錯誤日志,又有了新發現

--------------------------------------------------------------------------------------------------------------

tail -n 200 /var/log/mysqld.log

 

文件裡都在報這樣的錯誤

Error: Table "mysql"."innodb_table_stats" not found.

2013-04-02 09:07:35 7fc53f5e4700 InnoDB: Recalculation of persistent statistics requested for table "mydatabase"."mytable" but the required persistent statistics storage is not present or is corrupted. Using transient stats instead.

但是目前有沒察覺到對項目和數據庫使用的明顯影響,但是還要解決的,這篇博客說的很明白,果斷推薦

http://hi.baidu.com/life_to_you/item/d35894c0058a993098b498ee

最後,都沒發現什麼問題了。MySQL遇到什麼問題,第一下還是看下mysql的錯誤日志比較好,裡面記錄的一清二楚,逐個排除就好啦

 

 

 

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved