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