Mysql

表損壞:如何在 MySQL 5.5 for Windows 中執行 Innodb Checksum 檢查?

  • May 6, 2013

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

引用自:https://dba.stackexchange.com/questions/41610