mysql数据库管理维护_(转)Mysql数据库管理 表的维护
原文:http://t.dbdao.com/archives/mysql%E6%95%B0%E6%8D%AE%E5%BA%93%E7%AE%A1%E7%90%86-%E8%A1%A8%E7%9A%84%E7%BB%B4%E6%8A%A4.html
一、目標(biāo)
完成本課程后,你應(yīng)該能夠:
認(rèn)識不同類型的表維護(hù)操作
執(zhí)行維護(hù)表的SQL語句
使用客戶端和實用程序維護(hù)表
根據(jù)具體的存儲引擎維護(hù)表
二、實施表的維護(hù)
表的維護(hù)操作對識別和解決數(shù)據(jù)庫問題非常有用,例如:
因服務(wù)器崩潰而損壞的表
表上查詢處理緩慢
許多工具可以執(zhí)行表的維護(hù)
MySQL Workbench(MySQL工作臺)
MySQL Enterprise Monitor(MySQL企業(yè)版監(jiān)視器)
SQL(DML)Maintenance statements(SQL 維護(hù)語句)
工具:
mysqlcheck
Myisamchk
Server auto-recovery(服務(wù)器自動恢復(fù))
三、使用SQL進(jìn)行表的維護(hù)操作
有多條SQL語句可以執(zhí)行表的維護(hù):
ANALYZE TABLE : 更新索引的統(tǒng)計信息
CHECK TABLE : 檢查表的完整性
CHECKSUM TABLE : 報告表數(shù)據(jù)的一致性檢測結(jié)果
REPAIR TABLE : 修復(fù)表
OPTIMIZE TABLE : 優(yōu)化表
每條語句需要一個或多個表名和可選關(guān)鍵字。
一條維護(hù)語句和輸出的樣例:
備注:
在執(zhí)行請求的操作之后,服務(wù)器返回操作的結(jié)果信息到客戶端。
結(jié)果信息以四列格式顯示:
Table : 標(biāo)示執(zhí)行操作的表
Op : 操作的名字(check,repair,analyze,或optimize)
Msg_type : 提供一個成功或失敗的指示器
Msg_text : 提供額外的信息
如果想獲取關(guān)于MySQL表維護(hù)的更多信息,可以參照文檔:
MySQL Reference Manual
一、ANALYZE TABLE(分析表)語句
分析并存儲表的鍵值分布統(tǒng)計信息
為執(zhí)行查詢提供更好的選擇
對使用InnoDB,NDB和MyISAM存儲引擎的表生效
支持分區(qū)表
ANALYZE TABLE選項:
NO_WRITE_TO_BINLOG或LOCAL : 不記錄二進(jìn)制日志
一條ANALYZE TABLE語句結(jié)果的樣例:
備注:
當(dāng)你執(zhí)行一個除常數(shù)之外的連接時,MySQL使用存儲的鍵值分布統(tǒng)計信息決定如何優(yōu)化表連接的順序。另外,鍵值分布決定了查詢中具體的表MySQL使用什么索引。
你可以執(zhí)行ANALYZE TABLE語句分析和存儲統(tǒng)計信息,或者你可以配置InnoDB,在數(shù)據(jù)變化后或者你查詢表或索引的元數(shù)據(jù)時,將會自動收集統(tǒng)計信息。
ANALYZE TABLE 的特點:
在分析過程中,MySQL在使用InnoDB和MyISAM引擎的表上加上一個只讀鎖
這條語句等價于使用mysql check –analyze語句
需要有表的SELECT和INSERT權(quán)限
支持分區(qū)表。你也可以使用ALTER TABLE …ANALYZE PARTITION來檢查一個或多個分區(qū)。
如果表自從上次執(zhí)行ANALYZE TABLE語句后沒有發(fā)生過改變,MySQL將不分析該表。
默認(rèn)情況下,MySQL將ANALYZE TABLE語句寫入二進(jìn)制日志并且將其復(fù)制到從庫。
使用可選的關(guān)鍵字NO_WRITE_TO_BINLOG或它的別名LOCAL來設(shè)置不記錄日志。
續(xù):備注:
你可以使用以下選項控制MySQL如何收集和存儲鍵值分布統(tǒng)計信息:
innodb_stats_persistent :
當(dāng)該選項設(shè)置為ON,MySQL將在新建的表上啟用STATS_PERSISTENT設(shè)置。你也可以在使用CREATE TABLE 或者 ALTER TABLE 語句時使用STATS_PERSISTENT。
默認(rèn)情況下,MySQL不會持續(xù)將鍵值分布的統(tǒng)計信息寫入磁盤,所以它們(統(tǒng)計信息)必須在某些時間(重新)生成,比如服務(wù)器重啟。當(dāng)(對某些表)啟用STATS_PERSISTENT時,MySQL將存儲這些表的鍵值分布統(tǒng)計信息至磁盤,這樣這些表將不需要再頻繁生成統(tǒng)計信息。這使得隨著時間的推移,優(yōu)化器可以創(chuàng)建更一致(穩(wěn)定)的查詢計劃。
innodb_stats_persistent_sample_pages :
MySQL通過對STATS_PERSISTENT表的索引頁采樣而非整張表重新生成統(tǒng)計信息。
默認(rèn)情況下,它對樣例的20頁進(jìn)行采樣,增加頁數(shù)可以提升生成的統(tǒng)計信息的準(zhǔn)確性和生成更精準(zhǔn)的查詢計劃。
減少頁數(shù)可以減少生成統(tǒng)計信息時I/O的消耗。
innodb_stats_transient_sample_pages :
當(dāng)STATS_PERSISTENT未設(shè)置的時候,該選項控制表上索引頁的采樣數(shù)量。
以下選項控制MySQL如何自動收集統(tǒng)計信息。
innodb_stats_auto_recalc :
啟用該選項時,當(dāng)STATS_PERSISTENT表自上次重新統(tǒng)計后,有10%行記錄改變時,MySQL將自動收集統(tǒng)計信息。
innodb_stats_on_metadata :
當(dāng)你執(zhí)行SHOW TABLE STATUS或其他元數(shù)據(jù)語句?,或當(dāng)你查詢INFOMATION_SCHEMA.TABLES時,啟用該選項將更新統(tǒng)計信息。
默認(rèn)情況下,該選項是禁用的。
一、CHECK TABLE(檢查表)語句
檢查表結(jié)構(gòu)和內(nèi)容的完整性
驗證視圖定義
支持分區(qū)表
對使用InnoDB,CSV,MyISAM和ARCHIVE(存儲引擎)的表生效
CHECK TABLE選項:
FOR UPGRADE : 檢查當(dāng)前服務(wù)器的表是否工作?
QUICK : 不掃描不正確鏈接的行
如果CHECK TABLE發(fā)現(xiàn)使用InnoDB存儲引擎的表有錯誤:
服務(wù)器將會被關(guān)閉以防止錯誤傳播
MySQL將會記錄錯誤到錯誤日志
備注:
CHECK TABLE特點:
對于使用MyISAM存儲引擎的表,鍵值統(tǒng)計信息也會被更新。
也可以檢查視圖的問題,例如表中引用的視圖定義并不存在。
支持分區(qū)表。你也可以使用ALTER TABLE…CHECK PARTITION來檢查一個或多個分區(qū)。
對于FOR UPGRADE子句,服務(wù)器檢查每個表以確認(rèn)表結(jié)構(gòu)是否與當(dāng)前版本的MySQL兼容。數(shù)據(jù)類型的存儲格式更改或者它的排序順序改變都可能導(dǎo)致不兼容。如果這里可能存在不兼容,服務(wù)器將在表上運行一個完整的檢查,如果完整檢查成功,服務(wù)器將會在表的.frm文件上標(biāo)記當(dāng)前MySQL版本的數(shù)字。標(biāo)記.frm文件可以確保該表未來做(與文件標(biāo)記)同樣版本服務(wù)器檢查時快速檢查。
在InnoDB,MyISAM和ARCHIVE存儲引擎上可使用FOR UPGRADE。
使用InnoDB和MyISAM存儲引擎的表上可使用QUICK。MyISAM支持更多選項。
續(xù):五、CHECK TABLE(檢查表)語句
一個好的CHECK TABLE結(jié)果樣例:
備注:
如果CHECK TABLE的輸出表明表有問題,修復(fù)該表。
例如,你可以在修復(fù)表之前使用CHECK TABLE語句檢測硬件問題(例如內(nèi)存錯誤或磁盤扇區(qū)損壞)。Msg_text輸出列正常顯示為“OK”。如果得到的(結(jié)果)不是“OK”或“Table is already up to date”,對表執(zhí)行修復(fù)。
如果表被標(biāo)記為“corrupted”或“not closed properly”,但CHECK TABLE沒有在表上發(fā)現(xiàn)任何錯誤,將會標(biāo)記表為“OK”。
一、CHECKSUM TABLE(校驗表)語句
報告表的checksum
(該語句)用來驗證表備份,回滾或者其他操作之前或之后內(nèi)容是否一致
讀取整個表逐行進(jìn)行校驗
默認(rèn)選項EXTENDED提供這種行為
QUICK選項在MyISAM表上可用。
MyISAM 上默認(rèn)選項為設(shè)置CHECKSUM=1。
一條CHECKSUM TABLE語句的樣例:
備注:
CHECKSUM TABLE特點:
CHECKSUM TABLE需要SELECT表的權(quán)限
對于不存在的表,CHECKSUM TABLE返回“NULL”并且生成一條警告
如果使用了EXTENDED選項,逐行讀取整張表,并且計算checksum的值。
如果使用QUICK選項:
如果表的在線checksum可用將會給出報告,否則報告(顯示)為“NULL”,這操作將會很快速。
你創(chuàng)建表時為MyISAM表指定CHECKSUM=1將會啟用在線checksum。
如果既沒有指定QUICK又沒有指定EXTENDED,MySQL設(shè)置選項為EXTENDED,除非MyISAM表CHECKSUM=1。
checksum的值取決于表的行記錄的格式,如果行記錄的格式改變,checksum也會改變。
比如,“VARCHAR”存儲類型在MySQL4.1之后發(fā)生了改變,所以如果你升級一張4.1版本的表到更新的版本,包含VARCHAR列的表的checksum值將會改變。
續(xù):備注:
注意:
如果兩張表的checksums值不同,這可能說明它們可能在某些方面不同。
自從CHECKSUM TABLE使用哈希函數(shù)后,不能保證沒有沖突,這將會有極小的可能導(dǎo)致兩張不同的表得到相同的checksum值。
一、OPTIMIZE TABLE(優(yōu)化表)語句
整理表的碎片
重建表和釋放未使用的空間以整理碎片
優(yōu)化過程中會鎖定表
更新索引統(tǒng)計信息
在一張永久的,數(shù)據(jù)密集/完全填充?的表上是比較好的
在InnoDB,MyISAM和ARCHIVE表上生效
支持分區(qū)表
OPTIMIZE TABLE選項:
NO_WRITE_TO_BINLOG或LOCAL:不記錄二進(jìn)制日志
備注:
OPTIMIZE TABLE特點:
對刪除、更新和接合記錄等引起的分散的,非連續(xù)的數(shù)據(jù)中涉及到的未使用的可回收空間進(jìn)行碎片整理
需要表的SELECT和INSERT權(quán)限
支持分區(qū)表。你可以使用ALTER TABLE…OPTIMIZE PARTITION檢查一個或多個分區(qū)。
例如,你可以在表的行記錄數(shù)發(fā)生大幅度修改后,使用OPTIMIZE TABLE語句在InnoDB中重建一個FULLTEXT(全文)索引。
在InnoDB表中,OPTIMIZE TABLE和ALTER TABLE類似,將重建表以更新索引統(tǒng)計信息和群集索引中空閑的未使用的空間?
InnoDB和其他存儲引擎產(chǎn)生碎片的方式不同,所以你不需要經(jīng)常(在InnoDB上)使用OPTIMIZE TABLE。
在ARCHIVE存儲引擎上使用OPTIMIZE TABLE可以壓縮表。
使用SHOW TABLE STATUS語句查看ARCHIVE表行數(shù)產(chǎn)生的結(jié)果往往比較準(zhǔn)確。在執(zhí)行優(yōu)化操作時會產(chǎn)生一個.ARN文件。
續(xù):七、OPTIMIZE TABLE(優(yōu)化表)語句
以下OPTIMIZE TABLE語句優(yōu)化了兩張mysql數(shù)據(jù)庫中數(shù)據(jù)密集/完全填充?的表:
備注:
對于MyISAM表,在對表的大部分?jǐn)?shù)據(jù)刪除或者在可變長度行記錄(包含VARCHAR,VARBINARY,BLOB或TEXT列)做出修改后,使用OPTIMIZE TABLE語句。
被刪除的行都保存在一個鏈接列表中,并且隨后的INSERT(插入)操作重復(fù)使用舊的行的位置。
OPTIMIZE TABLE在完全填充且數(shù)據(jù)很少改變的表上有較好的優(yōu)化小故宮。當(dāng)數(shù)據(jù)變化比較多時優(yōu)化效果變差,并且你不得不經(jīng)常進(jìn)行優(yōu)化。
一、REPAIR TABLE(修復(fù)表)語句
修復(fù)可能已經(jīng)損壞的MyISAM或ARCHIVE表
不支持InnoDB
優(yōu)化過程中會鎖定表
支持分區(qū)表
REPAIR TABLE選項:
QUICK : 僅僅修復(fù)索引樹
EXTENDED : 逐行創(chuàng)建索引(替代以排序方式一次創(chuàng)建一個索引)
USE_FRM : 使用.FRM文件重新創(chuàng)建 .MYI 文件
NO_WRITE_TO_BINLOG或LOCAL:不記錄二進(jìn)制日志
備注:
REPAIR TABLE特點:
QUICK 選項:
僅僅嘗試對索引而非數(shù)據(jù)文件進(jìn)行修復(fù)。這個修復(fù)選項和myisamchk –recover –quick 接近。
EXTENDED選項:
MySQL逐行創(chuàng)建索引而非以排序方式一次創(chuàng)建一個索引。這種類型修復(fù)與myisamchk ???? –safe-recover接近。
USE_FRM選項不能在分區(qū)表上使用。
需要表上的SELECT和INSERT權(quán)限。
支持分區(qū)表。你可以使用ALTER TABLE…REPAIR PARTITION來檢查一個或多個分區(qū)。
最好在隊標(biāo)執(zhí)行修復(fù)操作之前對表進(jìn)行備份,在某些情況下,該操作可能會導(dǎo)致數(shù)據(jù)丟失。可能會引起(但是不限于)數(shù)據(jù)文件錯誤。
如果在執(zhí)行REPAIR TABLE操作期間服務(wù)器崩潰,你必須在服務(wù)器重啟之后執(zhí)行其他任何操作之前再次執(zhí)行REPAIR TABLE指令來避免進(jìn)一步的錯誤。
如果你需要頻繁的執(zhí)行REPAIR TABLE語句來修復(fù)某張故障表,嘗試去找出底層原因來預(yù)防類似錯誤并且消除使用REPAIR TABLE的需求。
續(xù):八、REPAIR TABLE(修復(fù)表)語句
一個REPAIR TABLE語句樣例:
一、mysqlcheck客戶端程序
mysqlcheck是一條檢查,修復(fù),分析和優(yōu)化表的客戶端命令行
可以更方便的執(zhí)行一條SQL語句
對InnoDB,MyISAM和ARCHIVE存儲引擎的表生效
三個檢查級別:
指定表
指定數(shù)據(jù)庫
指定所有數(shù)據(jù)庫
一些mysqlcheck維護(hù)選項:
–analyze : 執(zhí)行一條ANALYZE TABLE語句
–check : 執(zhí)行一條CHECK TABLE語句(該選項為默認(rèn)選項)
–optimize : 執(zhí)行一條OPTIMIZE TABLE語句
–repair : 執(zhí)行一條REPAIR TABLE語句
備注:
在某些情況下,mysqlcheck可以更方便直接地執(zhí)行SQL語句。
例如日,如果你將數(shù)據(jù)庫名作為參數(shù),mysqlcheck會對該數(shù)據(jù)庫中包含的所有表和問題語句都進(jìn)行處理?你不需要提供明確的表名作為參數(shù)。
同樣的,由于mysqlcheck是一個命令行程序,你可以方便地使用它在操作系統(tǒng)作業(yè)上執(zhí)行計劃管理。
續(xù):九、mysqlcheck客戶端程序
Oracle建議(為什么不是Mysql建議⊙﹏⊙)先不加選項執(zhí)行myqlcheck命令。如果需要修復(fù)再次執(zhí)行它。
一些mysqlcheck限制選項:
–repair –quick : 嘗試執(zhí)行一次快速修復(fù)
–repair : 常規(guī)修復(fù)(如果快速修復(fù)失敗)
–repair –force : 強制執(zhí)行一次修復(fù)
mysqlcheck樣例:
備注:
默認(rèn)情況下,mysqlcheck將第一個非選項參數(shù)解讀為數(shù)據(jù)庫名,并且檢查數(shù)據(jù)庫中所有表。如果在數(shù)據(jù)庫名參數(shù)后有其他參數(shù),將被作為表名,并且僅僅檢查這些表。
上圖展示的mysqlcheck 樣例說明了以下內(nèi)容:
第一條帶選項的指令僅僅檢查world_innodb數(shù)據(jù)庫中的City和Country表。
帶有–database(或 -B)選項的樣例中,mysqlcheck會將該參數(shù)作為數(shù)據(jù)庫名,并且檢查名為world_innodb和test數(shù)據(jù)庫中的表。
帶有–all-database(或 -A)選項時,mysqlcheck檢查所有數(shù)據(jù)庫中的所有表。
一、myisamchk 工具
myisamchk 是一個檢查MyISAM引擎表的非客戶端實用工具
myisamchk 和mysqlcheck工具有以下差異:
它可以啟用和禁用索引
它可以不通過服務(wù)器直接訪問表文件
這避免了并發(fā)表查詢
一些myisamchk 的選項:
–recover : 修復(fù)一張表
–safe-recover : 修復(fù)一張不能使用–recover選項修復(fù)的表?
myisamchk樣例:
備注:
從概念上看,myisamchk和mysqlcheck在功能上很相似。然而,myisamchk并不和MySQL服務(wù)器通信。相反的,它直接從文件訪問表。
在執(zhí)行表維護(hù)時使用myisamchk可以避免表的并發(fā)訪問:
確保在服務(wù)器工作時不能訪問表。保障的方法是鎖定表或者停止服務(wù)器。
在命令提示符中,將當(dāng)前目錄更改為數(shù)據(jù)庫中存放表的路徑。 這是具有和數(shù)據(jù)庫包含的將要被檢查的表有同樣名字的服務(wù)器的數(shù)據(jù)目錄的子目錄?(切換目錄的原因是可以更方便的查看表文件)
使用選項調(diào)用myismchk指明將要執(zhí)行的操作,跟在myismchk指令后的參數(shù)指定將要被操作的表名。每個參數(shù)都可以是表名或表上索引文件的名字。索引文件名和表名一致,并添加.MYI后綴。因此,一張表可以被寫作table_name(表名)或MYI(該表的索引文件名)。
重啟服務(wù)器。
注意:
先使用–recover,inwei–safe-recover會慢許多。
一、mysqlcheck和myisamchk的選項
控制維護(hù)執(zhí)行類型的選項:
備注:
myisamchk和mysqlcheck都有多個控制表維護(hù)操作類型的選項。
上圖的表中列舉了一些常用的選項,其中大部分可以在兩個程序(mysqlcheck和myisamchk)中使用。除了這種情況外,(其余情況)將在相關(guān)選項說明中指出。?
–analyze :
分析表中鍵值分布。這可以提高基于索引查找的查詢語句速度的性能。
–auto-repair :
如果檢查操作發(fā)現(xiàn)問題,自動修復(fù)表。
–check 或 -c :
檢查表的問題。當(dāng)沒有指定其他選項時,該選項為默認(rèn)動作。
–check-only-changed 或 -c :
跳過表查詢,除非表自從上次檢查后發(fā)生了改變或者沒有正確關(guān)閉。后者可能在表打開時服務(wù)器崩潰的情況下發(fā)生。
–fast 或 -F :
跳過表檢查除非表沒有被正確關(guān)閉。
–extended,–extend-check,或 -e :
運行擴展的表檢查。
對于mysqlcheck,當(dāng)該選項和repair(修復(fù))選項一起使用時,將會比單獨使用repair?????? (修復(fù))選項時進(jìn)行更全面徹底的修復(fù)。就是說,使用–repair –extended選項比使用???? –repair選項執(zhí)行更徹底的修復(fù)操作。
續(xù):十一、mysqlcheck和myisamchk的選項
–extended,–extend-check,或 -e :
運行中級表檢查
–quick或-q :
對mysqlcheck指令,使用–quick選項不使用repair(修復(fù))選項,僅僅只有索引文件被檢查,而不檢查數(shù)據(jù)文件。對于兩個程序(mysqlcheck和myisamchk),使用–quick選項和repair(修復(fù))選項,僅僅只有索引文件被檢查,而不檢查數(shù)據(jù)文件。
–repair,–recover,或 -r :
運行一個表修復(fù)操作。
一、InnoDB表維護(hù)
InnoDB引擎表在故障發(fā)生后自動修復(fù)
使用CHECK TABLE或者一個客戶端程序找出不一致、不兼容和其他問題。
使用mysqldump語句通過導(dǎo)出還原一張表:
然后刪除它并且從導(dǎo)出的文件重新創(chuàng)建表。
為了在(服務(wù)器)崩潰后恢復(fù)表,使用–innodb_force_recovery選項啟動服務(wù)器,或者從一個備份復(fù)原表。
使用ALTER TABLE重建表和釋放在群集索引中未使用的空間以進(jìn)行優(yōu)化
備注:
如果表檢查顯示有問題,使用mysqldump指令通過導(dǎo)出還原表到一致性狀態(tài),刪除它,然后再從導(dǎo)出的文件重建表。
萬一發(fā)生數(shù)據(jù)庫運行的主機或者服務(wù)器崩潰,使用InnoDB存儲引擎的表可能額處于不一致的狀態(tài)。作為(服務(wù)器)啟動的一個步驟,InnoDB存儲引擎將執(zhí)行自動恢復(fù)。
極少見的情況下,可能服務(wù)器由于錯誤的自動恢復(fù)不能啟動。如果遇到這樣的情況,可以嘗試以下的過程:
重啟服務(wù)器時,將–innodb_force_recovery選項值設(shè)置為1 – 6。
這個值表明避免崩潰警告的增進(jìn)級別和恢復(fù)表時寬限表可能不一致的增進(jìn)級別。
建議值從4開始,可以防止insert buffer(插入緩沖區(qū))合并操作發(fā)生。
當(dāng)服務(wù)器以參數(shù)–innodb_force_recovery選項設(shè)置為非零值啟動時,InnoDB阻止INSERT,UPDATE或DELETE操作。因此,當(dāng)該選項生效時你需要導(dǎo)出InnoDB表,然后刪除表。然后,再去掉–innodb_force_recovery選項啟動服務(wù)器,當(dāng)服務(wù)器啟動后,從導(dǎo)出的文件恢復(fù)表。
如果前面描述的步驟都失敗了,從以前的備份還原表。
一、MyISAM表維護(hù)
使用CHECK TABLE…MEDIUM(該選項為默認(rèn)選項)
使用客戶端程序運行myisamchk:
表損壞使用通常發(fā)生在索引中,標(biāo)記這些檢查將會很有用。
當(dāng)表損壞時,該工具修復(fù)表。
設(shè)置服務(wù)器運行檢查并且自動修復(fù)表。
使用 –myisam-recover選項啟用自動修復(fù)
服務(wù)器在啟動后第一次訪問是檢查每一張MyISAM表,以確保上一次是正常關(guān)閉。
根據(jù)“config”文件強制恢復(fù)MyISAM表。
備注:
默認(rèn)的CHECK TABLE(檢查表)檢查類型是為動態(tài)與靜態(tài)格式的表執(zhí)行MEDIUM(中級)檢查。
如果一個靜態(tài)格式表類型設(shè)置為CHANGED或FAST,則默認(rèn)值為QUICK。
對于CHANGED和FAST值將會跳過行掃描,因為這些行很少會出現(xiàn)損壞。
如果表被標(biāo)記為“corrupted”或“not closed ”,CHECK TABLE將修改表。
如果沒有發(fā)現(xiàn)表上有任何問題,將會被標(biāo)記為“up to date”。
如果表有損壞,問題多數(shù)出現(xiàn)在索引而不是數(shù)據(jù)上。
選項 –myisam-recover可以包含以下一個或多個以逗號分割的列表:
DEFAULT : 默認(rèn)檢查
BACKUP : 告訴服務(wù)器對必須改變的表進(jìn)行備份
FORCE : 即使丟失超過一行數(shù)據(jù),仍然執(zhí)行表恢復(fù)
QUICK :
執(zhí)行一次快速恢復(fù)。恢復(fù)跳過刪除或更新的行沒有間隔(known as“holes”?)的表。
續(xù):備注:
例如,告知服務(wù)器對發(fā)現(xiàn)有問題的MyISAM表進(jìn)行強制恢復(fù),但要對表改變的部分做一個備份,添加以下內(nèi)容到你的選項文件:
[mysqld]
Myisam-recover=FORCE,BACKUP
一、內(nèi)存表維護(hù)
當(dāng)使用一條..WHERE語句刪除行記錄時,MEMORY(內(nèi)存)表不釋放內(nèi)存。
為了釋放內(nèi)存,你必須執(zhí)行一條空ALTER TABLE操作。
為了查看MEMORY(內(nèi)存)表的存儲要求,執(zhí)行SHOW TABLE STATUS并且添加Data_length和Index_length列。
如果刪除行沒有重復(fù)值,Data_free列為非零。
備注:
以下是一條SHOW TABLE STATUS語句在world_innodb數(shù)據(jù)庫City表副本CityCopy表上執(zhí)行的輸出結(jié)果。
CityCopy表使用MEMORY存儲引擎:
mysql> SHOW TABLE STATUS LIKE ‘CityCopy’\G
*************************** 1. row ***************************
Name: CityCopy
Engine: MEMORY
Version: 10
Row_format: Fixed
Rows: 4079
Avg_row_length: 67
Data_length: 383072
Max_data_length: 10808373
Index_length: 253984
Data_free: 0
…:
1 row in set (0.00 sec)
The total memory the CityCopy table occupies can be calculated as follows:
Data_length (383072) + Index_length (253984) = 637056 bytes
二、ARCHIVE表維護(hù)
ARCHIVE壓縮問題:
數(shù)據(jù)插入時表的行記錄被壓縮。
進(jìn)行檢索時?,行記錄可以根據(jù)需要不壓縮、
一些SELECT語句可能導(dǎo)致壓縮惡化?
使用OPTIMIZE TABLE或REPAIR TABLE可以實現(xiàn)更好的壓縮。
OPTIMIZE TABLE在表沒有被訪問(讀或?qū)?時生效。
三、總結(jié)
在本課程中,你已經(jīng)學(xué)習(xí)到如何:
認(rèn)識表維護(hù)操作的類型
執(zhí)行SQL語句維護(hù)表
使用客戶端和工具程序維護(hù)表
根據(jù)具體的存儲引擎維護(hù)表
實踐13-1概覽:
測驗?–?維護(hù)表
在本測驗中,你需要回答關(guān)于MySQL表維護(hù)的問題。
實踐13-2概覽:
使用維護(hù)表的SQL語句
在本測驗中,你使用SQL語句檢查和優(yōu)化表。
實踐13-3概覽:
使用表維護(hù)工具
在本測驗中,你使用MySQL命令行工具檢查并修復(fù)一張表。
總結(jié)
以上是生活随笔為你收集整理的mysql数据库管理维护_(转)Mysql数据库管理 表的维护的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 点击编辑框全选内容java_Androi
- 下一篇: linux cmake编译源码,linu