mysql更改鎖機別 mysql表鎖定技術

2021-10-22 09:09:29 字數 2361 閱讀 5378

如何進行mysql資料庫表的故障檢測

如何修復mysql資料庫表

鎖定表的方法

防止客戶機的請求互相干擾或者伺服器與維護程式相互干擾的方法主要有多種。如果你關閉資料庫,就可以保證伺服器和myisamchk和 isamchk之間沒有互動作用。但是停止伺服器的執行並不是乙個好注意,因為這樣做會使得沒有故障的資料庫和表也不可用。本節主要討論的過程,是避免伺服器和myisamchk或isamchk之間的互動作用。實現這種功能的方法是對錶進行鎖定。

伺服器由兩種表的鎖定方法:

1.內部鎖定

內部鎖定可以避免客戶機的請求相互干擾——例如,避免客戶機的select查詢被另乙個客戶機的update查詢所干擾。也可以利用內部鎖定機制防止伺服器在利用myisamchk或isamchk檢查或修復表時對錶的訪問。

語法:鎖定表:lock tables tbl_name ,[ tbl_name ,…]

解鎖表:unlock tables

lock tables為當前執行緒鎖定表。unlock tables釋放被當前執行緒持有的任何鎖。當執行緒發出另外乙個lock tables時,或當伺服器的連線被關閉時,當前執行緒鎖定的所有表自動被解鎖。

如果乙個執行緒獲得在乙個表上的乙個read鎖,該執行緒(和所有其他執行緒)只能從表中讀。如果乙個執行緒獲得乙個表上的乙個write鎖,那麼只有持鎖的執行緒read或write表,其他執行緒被阻止。

每個執行緒等待(沒有超時)直到它獲得它請求的所有鎖。

write鎖通常比read鎖有更高的優先順序,以確保更改盡快被處理。這意味著,如果乙個執行緒獲得read鎖,並且然後另外乙個執行緒請求乙個write鎖, 隨後的read鎖請求將等待直到write執行緒得到了鎖並且釋放了它。

顯然對於檢查,你只需要獲得讀鎖。再者鍾情跨下,只能讀取表,但不能修改它,因此他也允許其它客戶機讀取表。對於修復,你必須獲得些所以防止任何客戶機在你對錶進行操作時修改它。

2.外部鎖定

伺服器還可以使用外部鎖定(檔案級鎖)來防止其它程式在伺服器使用表時修改檔案。通常,在表的檢查操作中伺服器將外部鎖定與myisamchk或 isamchk作合使用。但是,外部鎖定在某些系統中是禁用的,因為他不能可靠的進行工作。對執行myisamchk或isamchk所選擇的過程取決於伺服器是否能使用外部鎖定。如果不使用,則必修使用內部鎖定協議。

如果伺服器用--skip-locking選項執行,則外部鎖定禁用。該選項在某些系統中是預設的,如linux。可以通過執行mysqladmin variables命令確定伺服器是否能夠使用外部鎖定。檢查skip_locking變數的值並按以下方法進行: ◆ 如果skip_locking為off,則外部鎖定有效您可以繼續並執行人和乙個實用程式來檢查表。伺服器和實用程式將合作對錶進行訪問。但是,執行任何乙個實用程式之前,應該使用mysqladmin flush-tables。為了修復表,應該使用表的修復鎖定協議。 ◆ 如果skip_locaking為on,則禁用外部鎖定,所以在myisamchk或isamchk檢查修復表示伺服器並不知道,最好關閉伺服器。如果堅持是伺服器保持開啟狀態,月確保在您使用此表示沒有客戶機來訪問它。必須使用卡黨的鎖定協議告訴伺服器是該錶不被其他客戶機訪問。 檢查表的鎖定協議 本節只介紹如果使用表的內部鎖定。對於檢查表的鎖定協議,此過程只針對表的檢查,不針對表的修復。 1.呼叫mysql發布下列語句: $mysql –u root –p db_name mysql>lock table tbl_name read; mysql>flush tables; 該鎖防止其它客戶機在檢查時寫入該錶和修改該錶。flush語句導致伺服器關閉表的檔案,它將重新整理仍在告訴快取中的任何為寫入的改變。 2.執行檢查過程 $myisamchk tbl_name $ isamchk tbl_name 3.釋放表鎖 mysql>unlock tables; 如果myisamchk或isamchk指出發現該錶的問題,將需要執行表的修復。 修復表的鎖定協議 這裡只介紹如果使用表的內部鎖定。修復表的鎖定過程類似於檢查表的鎖定過程,但有兩個區別。第一,你必須得到寫鎖而非讀鎖。由於你需要修改表,因此根本不允許客戶機對其進行訪問。第二,必須在執行修復之後發布flush table語句,因為myisamchk和isamchk建立的新的索引檔案,除非再次重新整理改表的快取記憶體,否則伺服器不會注意到這個改變。本例同樣適合優化表的過程。 1.呼叫mysql發布下列語句: $mysql –u root –p db_name mysql>lock table tbl_name write; mysql>flush tables; 2.做資料表的拷貝,然後執行myisamchk和isamchk: $cp tbl_name.* /some/other/dir $myisamchk --recover tbl_name $ isamchk --recover tbl_name --recover選項只是針對安裝而設定的。這些特殊選項的選擇將取決與你執行修復的型別。 3.再次重新整理快取記憶體,並釋放表鎖: mysql>flush tables; mysql>unlock tables;

mysql 隱式鎖和顯示鎖 MySQL的鎖機制

2 解鎖階段 當事務釋放了乙個封鎖以後,事務進入解鎖階段,在該階段只能進行解鎖操作不能再進行加鎖操作。5 隱式和顯示鎖定 innodb會根據隔離級別在需要的時候自動加鎖,這稱為隱式加鎖。另外,innodb也支援通過特定的語句進行顯示加鎖 顯示加共享鎖 select lock in share mod...

mysql更改目錄 更改Mysql目錄方法

預設情況下,mysql的資料目錄是 var lib mysql,因為如果你的資料庫以後會越來越大,那麼你就得考慮用乙個空間足夠大的分割槽來存放資料庫檔案,所以還是選擇把它修改到其他位置。這個目錄可以直接掛載乙個大硬碟。具體修改方式如下 為了方便起見,你可以先用su命令將系統當前使用者轉到root,否...

mysql資料庫鎖 MySQL資料庫的鎖機制

在併發訪問情況下,很有可能出現不可重複讀等等讀現象。為了更好的應對高併發,封鎖 時間戳 樂觀併發控制 樂觀鎖 悲觀併發控制 悲觀鎖 都是併發控制採用的主要技術方式。鎖分類 按操作劃分 dml鎖,ddl鎖 按鎖的粒度劃分 表級鎖 行級鎖 頁級鎖 按鎖級別劃分 共享鎖 排他鎖 按加鎖方式劃分 自動鎖 顯...