Mysql
表損壞:如何在 MySQL 5.5 for Windows 中執行 Innodb Checksum 檢查?
Mysql 5.5.31 (Windows) 數據庫損壞,我的問題與如何辨識 InnoDB 表損壞?,更準確地說是以下腳本,該腳本應該告訴您哪些表已損壞:
#!/bin/bash for i in $(ls /var/lib/mysql/*/*.ibd) do innochecksum -v $i done
事實上我有兩個問題:1)你在哪裡執行這樣的腳本?我認為 MySQL Workbench 中的腳本外殼會通過將此片段保存為 Python 文件然後執行它來完成這項工作 - 但是它在“for …”行中報告了無效的語法。2) 根據http://dev.mysql.com/doc/refman/5.5/en/innochecksum.html innochecksum 是 MySQL/Oracle 提供的實用程序。但是,我似乎沒有在我的 MySQL 安裝的 bin 或其他文件夾中找到它。我如何獲得它?
更新:由於我不信任自己的 MySQL 安裝,我下載了 5.5.31 的 32 位和 64 位版本的 zip 文件,但可以確認不包括 innochecksum 文件。
謝謝。
答案#1
在 Windows 中這樣做感覺很笨拙,但它就在這裡。如果您能夠登錄到 mysql,則執行此腳本
set MYSQL_USER=root set MYSQL_PASS=rootpassword set SQLSTMT=SELECT CONCAT('REPAIR TABLE ',table_schema,'.',table_name,';') set SQLSTMT=%SQLSTMT% FROM information_schema.tables WHERE engine='InnoDB' set MYSQL_CONN=-u%MYSQL_USER% -p%MYSQL_PASS% echo %SQLSTMT% mysql %MYSQL_CONN% -ANe"%SQLSTMT%" > C:\windows\InnoDBCheck.sql
執行此腳本後,將其添加到 my.ini
[mysqld] init-file=C:\windows\InnoDBCheck.sql
然後重啟mysql
net stop mysql met start mysql
在啟動過程中,就在崩潰恢復之後,
請原諒我這麼粗魯的解決方案,因為我很少處理 Windows 的 MySQL(這不是諷刺,我是認真的)。
答案#2
這是更嚴重的事情
我剛剛檢查了我的 MySQL 5.6.10 免安裝 ZIP 文件。它有無校驗和。
C:\>dir \MySQL_5.6.10\bin\i* Volume in drive C has no label. Volume Serial Number is 2C92-485B Directory of C:\MySQL_5.6.10\bin 01/22/2013 07:05 PM 4,065,792 innochecksum.exe 01/22/2013 07:05 PM 3,706,880 innochecksum.pdb 2 File(s) 7,772,672 bytes 0 Dir(s) 160,596,770,816 bytes free C:\>
下載該 ZIP 並嘗試執行該 .
然後,您可以使用以下內容收集所有
.ibd
文件:cd "C:\Program Files\MySQL\MySQL 5.5\data" dir *.ibd /s/b > C:\ibdfiles.bat
然後,您可以
C:\ibdfiles.bat
針對每個文件名編輯和添加 innochecksum。對不起,這不是一個完整的答案,但至少你可以持有 innochecksum.exe