我有一個C#應用程序在MySQL 5.7服務器上執行一些數據庫操作。一旦整個系統陷入困境,我不得不對其進行硬重置。當涉及到特定的表讀/寫操作時,數據庫服務器崩潰。窗戶日誌顯示MySQL服務器崩潰,InnoDB超出表空間範圍
InnoDB: Trying to access page number 286720 in space 29,
space name myInstance/myTable, which is outside the tablespace bounds.
Byte offset 0, len 16384, i/o type read.
我試圖用mysqlcheck --repair
,但它失敗,因爲note : The storage engine for the table doesn't support repair
。
我讀過一些建議是說我應該在恢復模式啓動MySQL,所以我加了
[mysqld]
innodb_force_recovery=4
到my.ini
配置文件,於是我應該能夠使用mysqldump
出口受影響的數據庫表。但不幸的是,我不是。
mysqldump: Error 2013: Lost connection to MySQL server
during query when dumping table `myTable` at row: 1246
編輯:
我再次檢查錯誤日誌,發現許多條目說
[ERROR] C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld.exe:
The table 'myTable' is full
我在服務器上運行一個Windows 32位操作系統與NTFS格式化分區。 myTable.ibd
文件大小約爲4.5 GB,對於Win32 w/NTFS,檢查C.10.3 Limits on Table Size指出文件大小限制爲「2TB(可能更大)」。 雖然檢查我的錯誤的原因,我發現唯一可能的原因是一個完整的InnoDB表空間。解決方案可能是「更改InnoDB重做日誌文件的數量或大小」,儘管一致性對我來說有點模糊。不過,我將重做日誌文件的大小從48M增加到了100M。但沒有任何改變。
如果我執行SQL select * from myTable order by Id desc
,服務器會立即崩潰。錯誤日誌條目與上述完全相同。
我查看了章節15.7.1 Resizing the InnoDB System Tablespace,發現innodb_data_file_path
未明確指定。
任何想法我現在可以做什麼?非常感謝!
先生,我有完全相同的問題。你能告訴我你是如何解決這個問題的?我第一次得到'表已滿'錯誤,然後服務器崩潰在每個查詢事件mysqldump。我嘗試了從1到6的所有錄製選項。 –
在http://bugs/mysql.com發佈錯誤報告 –
通過切換整個DBMS解決了問題。關於這些壞消息我很遺憾。 – marrrschine