show global&n..."/>
您好,登錄后才能下訂單哦!
將MySQL設(shè)置為只讀狀態(tài)的命令:
mysql> show global variables like "%read_only%"; mysql> flush tables with read lock; mysql> set global read_only=1; mysql> show global variables like "%read_only%";
將MySQL從只讀狀態(tài)設(shè)置為讀寫狀態(tài)的命令:
mysql> unlock tables; mysql> set global read_only=0;
將slave從庫(kù)設(shè)置為只讀狀態(tài),需要執(zhí)行的命令為:
mysql> set global read_only=1;
將salve庫(kù)從只讀狀態(tài)變?yōu)樽x寫狀態(tài),需要執(zhí)行的命令是:
mysql> set global read_only=0;
對(duì)于Mysql數(shù)據(jù)庫(kù)讀寫狀態(tài),主要靠"read_only"全局參數(shù)來(lái)設(shè)定;默認(rèn)情況下, 數(shù)據(jù)庫(kù)是用于讀寫操作的,所以read_only參數(shù)也是0或faluse狀態(tài),這時(shí)候不論是本地用戶還是遠(yuǎn)程訪問(wèn)數(shù)據(jù)庫(kù)的用戶,都可以進(jìn)行讀寫操作;
如需設(shè)置為只讀狀態(tài),將該read_only參數(shù)設(shè)置為1或TRUE狀態(tài),但設(shè)置 read_only=1 狀態(tài)有兩個(gè)需要注意的地方:
read_only=1只讀模式,不會(huì)影響slave同步復(fù)制的功能,所以在MySQL slave庫(kù)中設(shè)定了read_only=1后,通過(guò) "show slave status\G" 命令查看salve狀態(tài),可以看到salve仍然會(huì)讀取master上的日志,并且在slave庫(kù)中應(yīng)用日志,保證主從數(shù)據(jù)庫(kù)同步一致;
read_only=1只讀模式,可以限定普通用戶進(jìn)行數(shù)據(jù)修改的操作,但不會(huì)限定具有super權(quán)限的用戶的數(shù)據(jù)修改操作;在MySQL中設(shè)置read_only=1后,普通的應(yīng)用用戶進(jìn)行insert、update、delete等會(huì)產(chǎn)生數(shù)據(jù)變化的DML操作時(shí),都會(huì)報(bào)出數(shù)據(jù)庫(kù)處于只讀模式不能發(fā)生數(shù)據(jù)變化的錯(cuò)誤,但具有super權(quán)限的用戶,例如在本地或遠(yuǎn)程通過(guò)root用戶登錄到數(shù)據(jù)庫(kù),還是可以進(jìn)行數(shù)據(jù)變化的DML操作;
為了確保所有用戶,包括具有super權(quán)限的用戶也不能進(jìn)行讀寫操作,就需要執(zhí)行給所有的表加讀鎖的命令 "flush tables with read lock;",這樣使用具有super權(quán)限的用戶登錄數(shù)據(jù)庫(kù),想要發(fā)生數(shù)據(jù)變化的操作時(shí),也會(huì)提示表被鎖定不能修改的報(bào)錯(cuò)。這樣通過(guò)設(shè)置"read_only=1"和"flush tables with read lock;"兩條命令,就可以確保數(shù)據(jù)庫(kù)處于只讀模式,不會(huì)發(fā)生任何數(shù)據(jù)改變,在MySQL進(jìn)行數(shù)據(jù)庫(kù)遷移時(shí),限定master主庫(kù)不能有任何數(shù)據(jù)變化,就可以通過(guò)這種方式來(lái)設(shè)定。
但同時(shí)由于加表鎖的命令對(duì)數(shù)據(jù)庫(kù)表限定非常嚴(yán)格,如果再slave從庫(kù)上執(zhí)行這個(gè)命令后,slave庫(kù)可以從master讀取binlog日志,但不能夠應(yīng)用日志,slave庫(kù)不能發(fā)生數(shù)據(jù)改變,當(dāng)然也不能夠?qū)崿F(xiàn)主從同步了,這時(shí)如果使用 "unlock tables;"解除全局的表讀鎖,slave就會(huì)應(yīng)用從master讀取到的binlog日志,繼續(xù)保證主從庫(kù)數(shù)據(jù)庫(kù)一致同步。
為了保證主從同步可以一直進(jìn)行,在slave庫(kù)上要保證具有super權(quán)限的root等用戶只能在本地登錄,不會(huì)發(fā)生數(shù)據(jù)變化,其他遠(yuǎn)程連接的應(yīng)用用戶只按需分配為select,insert,update,delete等權(quán)限,保證沒(méi)有super權(quán)限,則只需要將salve設(shè)定"read_only=1"模式,即可保證主從同步,又可以實(shí)現(xiàn)從庫(kù)只讀。相對(duì)的,設(shè)定"read_only=1"只讀模式開(kāi)啟的解鎖命令為設(shè)定"read_only=0";設(shè)定全局鎖"flush tables with read lock;",對(duì)應(yīng)的解鎖模式命令為:"unlock tables;".當(dāng)然設(shè)定了read_only=1后,所有的select查詢操作都是可以正常進(jìn)行的。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。