mysql 修复模式_Mysql表修复
mysqlcheck
mysqlcheck客戶端可以檢查和修復(fù)MyISAM表。它還可以優(yōu)化和分析表。mysqlcheck的功能類似myisamchk,但其工作不同。
主要差別是當(dāng)mysqld服務(wù)器在運(yùn)行時必須使用mysqlcheck,而myisamchk應(yīng)用于服務(wù)器沒有運(yùn)行時。使用mysqlcheck的好處是不需要停止服務(wù)器來檢查或修復(fù)表。
mysqlcheck為用戶提供了一種方便的使用SQL語句CHECK TABLE、REPAIR TABLE、ANALYZE TABLE和OPTIMIZE TABLE的方式。它確定在要執(zhí)行的操作中使用使用哪個語句,然后將語句發(fā)送到要執(zhí)行的服務(wù)器上。
示例
mysqlcheck -B 指定數(shù)據(jù)庫 -r -S /data/mysql2/mysql2.sock -u root -p'test' >> /var/log/mysqlcheck.log
常用選項(xiàng)
--optimize,-o 優(yōu)化表
-h 主機(jī)地
-P 端口號
-F 只檢查沒有正確關(guān)閉的表
-r 執(zhí)行可以修復(fù)大部分問題的修復(fù),只是唯一值不唯一時不能修復(fù)。
-a 分析表
-c 檢查表,默認(rèn)選項(xiàng)
-m 中等的檢查
-e 完全檢查,很慢
--database,-B 指定庫 如果沒指定,表示全部庫
--all--database,-A 所有庫
--fast,-F 只檢查沒有正確關(guān)閉的表。
--quick,-q 如果你正使用該選項(xiàng)在檢查表,它防止掃描行以檢查錯誤鏈接的檢查。這是最快的檢查方法。 如果你正使用該選項(xiàng)在修復(fù)表,它嘗試只修復(fù)索引樹。這是最快的修復(fù)方法。
--silent,-s 沉默模式。只打印錯誤消息
--tables 覆蓋---database或-B選項(xiàng)。選項(xiàng)后面的所有參量被視為表名。
--socket=/-S 指定套接字
myisamchk
myisamchk,只適用于myisam引擎,使用時需要關(guān)閉數(shù)據(jù)庫
myisamchk表損壞原因
服務(wù)器突然斷電導(dǎo)致數(shù)據(jù)文件損壞;強(qiáng)制關(guān)機(jī),沒有先關(guān)閉mysql 服務(wù);mysqld 進(jìn)程在寫表時被殺掉。因?yàn)榇藭rmysql可能正在刷新索引。
磁盤損壞。
服務(wù)器死機(jī)。
mysql 本身的bug 。
MySQL中MyISAM表損壞的癥狀
查詢數(shù)據(jù)時報出錯誤:Incorrect key file for table: '...'. Try to repair it
查詢不能在表中找到行或返回不完全的數(shù)據(jù)。
Error: Table '...' is marked as crashed and should be repaired 。
打開表失敗: Can't open file: '×××.MYI' (errno: 145) 。
常見選項(xiàng)
-q 快速修復(fù),一般和-r一起使用,快速修復(fù)
-r 修復(fù)模式
-o 能修復(fù)-r不能修復(fù)的問題。一般會有提示使用-o
-i 打印被檢測表的信息
-m 中等的檢查
-e 最徹底的檢查
-a 分析表
-s 安靜的
-B 將.MYD文件備份為file_name-time.BAK
--sort-index, -S 以從高到低的順序排序索引樹塊。這將優(yōu)化搜尋并且將使按鍵值的表掃描更快。
-f 強(qiáng)制修復(fù),一般不使用,可能會有數(shù)據(jù)丟失
myisamchk默認(rèn)只用3M的內(nèi)存來修復(fù),如果要修復(fù)大表的話,顯然速度會巨慢,我們可以通過為myisamchk設(shè)置更多的內(nèi)存,來使其運(yùn)行的更快,
myisamchk --sort_buffer_size=16M --key_buffer_size=16M --read_buffer_size=1M --write_buffer_size=1M
一般sort_buffer_size的大小16m就足夠用了。
myisamchk默認(rèn)使用選項(xiàng)“--tmpdir”作為臨時文件的,如果tmpdir指定內(nèi)存的話,恢復(fù)的表比較大,很容易報內(nèi)存的錯誤,所以我們可以用tmpdir指定一個比較大的文件系統(tǒng)
myisamchk --sort_buffer_size=16m --key_buffer_size=16m --read_buffer_size=2m --write_buffer_size=1m --tmpdir=/tmp
執(zhí)行myisam表的恢復(fù)只要是修復(fù)表的三個文件,最常發(fā)生問題的文件是數(shù)據(jù)文件和索引文件
tbl_name.frm:定義(格式)文件
tbl_name.MYD:數(shù)據(jù)文件
tbl_name.MYI:索引文件
示例
首先進(jìn)入到對應(yīng)的數(shù)據(jù)庫下:cd /data/mysql/game | 也可以直接指定表的路徑,從而不用進(jìn)入目錄
檢查表
#快速的檢查
myisamchk -im /usr/local/mysql/data/testx/t2
#只檢查沒有正常關(guān)閉的表
myisamchk -iFm /usr/local/mysql/data/testx/t2
#僅顯示表的最重要的信息
myisamchk -eim /usr/local/mysql/data/testx/t2
修復(fù)表
#常用的修復(fù)命令
myisamchk -rq tbl_name #快速修復(fù)表,只修復(fù)索引
myisamchk -Br tbl_name #備份并修復(fù)表
總結(jié)
以上是生活随笔為你收集整理的mysql 修复模式_Mysql表修复的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS动态加载JSON文件并读取数据
- 下一篇: mysql编译innodb_源码编译My