有兩種方法,一種方法使用mysql的check table和repair table 的sql語句,另一種方法是使用MySQL提供的多個myisamchk, isamchk數(shù)據(jù)檢測恢復(fù)工具。前者使用起來比較簡便。推薦使用。
創(chuàng)新互聯(lián)公司是一家專業(yè)提供邵東企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計、做網(wǎng)站、H5場景定制、小程序制作等業(yè)務(wù)。10年已為邵東眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進行中。
1. check table 和 repair table
登陸mysql 終端:
mysql -uxxxxx -p dbname
check table tabTest;
如果出現(xiàn)的結(jié)果說Status是OK,則不用修復(fù),如果有Error,可以用:
repair table tabTest;
進行修復(fù),修復(fù)之后可以在用check table命令來進行檢查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。
2. myisamchk, isamchk
其中myisamchk適用于MYISAM類型的數(shù)據(jù)表,而isamchk適用于ISAM類型的數(shù)據(jù)表。這兩條命令的主要參數(shù)相同,一般新的系統(tǒng)都使用MYISAM作為缺省的數(shù)據(jù)表類型,這里以myisamchk為例子進行說明。當(dāng)發(fā)現(xiàn)某個數(shù)據(jù)表出現(xiàn)問題時可以使用:
myisamchk tablename.MYI
進行檢測,如果需要修復(fù)的話,可以使用:
myisamchk -of tablename.MYI
關(guān)于myisamchk的詳細參數(shù)說明,可以參見它的使用幫助。需要注意的時在進行修改時必須確保MySQL服務(wù)器沒有訪問這個數(shù)據(jù)表,保險的情況下是最好在進行檢測時把MySQL服務(wù)器Shutdown掉。
另外可以把下面的命令放在你的rc.local里面啟動MySQL服務(wù)器前:
[ -x /tmp/mysql.sock ] /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/mysql.sock是MySQL監(jiān)聽的Sock文件位置,對于使用RPM安裝的用戶應(yīng)該是/var/lib/mysql/mysql.sock,對于使用源碼安裝則是/tmp/mysql.sock可以根據(jù)自己的實際情況進行變更,而pathtochk則是myisamchk所在的位置,DATA_DIR是你的MySQL數(shù)據(jù)庫存放的位置。
需要注意的時,如果你打算把這條命令放在你的rc.local里面,必須確認在執(zhí)行這條指令時MySQL服務(wù)器必須沒有啟動!檢測修復(fù)所有數(shù)據(jù)庫(表)
1,redis是一種內(nèi)存性的數(shù)據(jù)存儲服務(wù),所以它的速度要比mysql快。
2,redis只支持String,hashmap,set,sortedset等基本數(shù)據(jù)類型,但是不支持聯(lián)合查詢,所以它適合做緩存。
3,有時候緩存的數(shù)據(jù)量非常大,如果這個時候服務(wù)宕機了,且開啟了redis的持久化功能,重新啟動服務(wù),數(shù)據(jù)基本上不會丟。
4,redis可以做內(nèi)存共享,因為它可以被多個不同的客戶端連接。
5,做為mysql等數(shù)據(jù)庫的緩存,是把部分熱點數(shù)據(jù)先存儲到redis中,或第一次用的時候加載到redis中,下次再用的時候,直接從redis中取。
6,redis中的數(shù)據(jù)可以設(shè)置過期時間expire,如果這個數(shù)據(jù)在一定時間內(nèi)沒有被延長這個時間,那個一定時間之后這個數(shù)據(jù)就會從redis清除。
所以,redis只是用來緩存數(shù)據(jù)庫中經(jīng)常被訪問的數(shù)據(jù),可以增加訪問速度和并發(fā)量。而mysql只是提供一種數(shù)據(jù)備份和數(shù)據(jù)源的作用。
my.ini文件中
[wampmysqld]
port =?3306
socket =?/tmp/mysql.sock
key_buffer_size?=?16M??//?改這里
max_allowed_packet?=?1M
sort_buffer_size?=?512K
net_buffer_length?=?8K
read_buffer_size?=?256K
read_rnd_buffer_size?=?512K
myisam_sort_buffer_size?=?8M
PS ?如果是安裝版的mysql ?你需要改的MY.ini ?可能是在
C:\ProgramData\MySQL\MySQL?Server?5.7
這個目錄有可能是隱藏的目錄,你可以設(shè)置文件夾屬性,顯示所有文件
應(yīng)用redis實現(xiàn)數(shù)據(jù)的讀寫,同時利用隊列處理器定時將數(shù)據(jù)寫入mysql。
同時要注意避免沖突,在redis啟動時去mysql讀取所有表鍵值存入redis中,往redis寫數(shù)據(jù)時,對redis主鍵自增并進行讀取,若mysql更新失敗,則需要及時清除緩存及同步redis主鍵。
這樣處理,主要是實時讀寫redis,而mysql數(shù)據(jù)則通過隊列異步處理,緩解mysql壓力,不過這種方法應(yīng)用場景主要基于高并發(fā),而且redis的高可用集群架構(gòu)相對更復(fù)雜,一般不是很推薦。
緩存讀取流程:
1、先到緩存中查數(shù)據(jù)
2、緩存中不存在則到實際數(shù)據(jù)源中取,取出來后放入緩存
3、下次再來取同樣信息時則可直接從緩存中獲取
緩存更新流程:
1、更新數(shù)據(jù)庫
2、使緩存過期或失效,這樣會促使下次查詢數(shù)據(jù)時在緩存中查不到而重新從數(shù)據(jù)庫去一次。
通用緩存機制:
1、用查詢的方法名+參數(shù)作為查詢時的key value對中的key值
2、向memcache或redis之類的nosql數(shù)據(jù)庫(或者內(nèi)存hashmap)插入數(shù)據(jù)
3、取數(shù)據(jù)時也用方法名+參數(shù)作為key向緩存數(shù)據(jù)源獲取信息
增加線程緩存大小
連接管理器線程處理服務(wù)器監(jiān)聽的網(wǎng)絡(luò)接口上的客戶端連接請求。連接管理器線程將每個客戶端連接與專用于它的線程關(guān)聯(lián),該線程負責(zé)處理該連接的身份驗證和所有請求處理。因此,線程和當(dāng)前連接的客戶端之間是一對一的比例。確保線程緩存足夠大以容納所有傳入請求是非常重要的。
MySQL提供了許多與連接線程相關(guān)的服務(wù)器變量:
線程緩存大小由thread_cache_size系統(tǒng)變量決定。默認值為0(無緩存),這將導(dǎo)致為每個新連接設(shè)置一個線程,并在連接終止時需要處理該線程。如果希望服務(wù)器每秒接收數(shù)百個連接請求,那么應(yīng)該將thread_cache_size設(shè)置的足夠高,以便大多數(shù)新連接可以使用緩存線程??梢栽诜?wù)器啟動或運行時設(shè)置max_connections的值。
還應(yīng)該監(jiān)視緩存中的線程數(shù)(Threads_cached)以及創(chuàng)建了多少個線程,因為無法從緩存中獲取線程(Threads_created)。關(guān)于后者,如果Threads_created繼續(xù)以每分鐘多于幾個線程的增加,請考慮增加thread_cache_size的值。
使用MySQL show status命令顯示MySQL的變量和狀態(tài)信息。這里有幾個例子:
Monyog線程緩存監(jiān)測
Monyog提供了一個監(jiān)控線程緩存的屏幕,名為“線程”。與MySQL線程相關(guān)的服務(wù)器變量映射到以下Monyog指標(biāo):
Monyog線程屏幕還包括“線程緩存命中率”指標(biāo)。這是一個提示線程緩存命中率的指標(biāo)。如果值較低,則應(yīng)該考慮增加線程緩存。在狀態(tài)欄以百分比形式顯示該值;它的值越接近100%越好。
如果這些指標(biāo)的值等于或超過指定值,則可以將每一個指標(biāo)配置為發(fā)出警告和/或嚴重警報