對(duì)Mysql中的read_only只讀屬性做簡(jiǎn)要說(shuō)明

對(duì)于MySQL單實(shí)例數(shù)據(jù)庫(kù)和master庫(kù),如果需要設(shè)置為只讀狀態(tài),需要進(jìn)行如下操作和設(shè)置:

將MySQL設(shè)置為只讀狀態(tài)的命令:

創(chuàng)新互聯(lián)是少有的網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、營(yíng)銷(xiāo)型企業(yè)網(wǎng)站、重慶小程序開(kāi)發(fā)、手機(jī)APP,開(kāi)發(fā)、制作、設(shè)計(jì)、買(mǎi)友情鏈接、推廣優(yōu)化一站式服務(wù)網(wǎng)絡(luò)公司,從2013年創(chuàng)立,堅(jiān)持透明化,價(jià)格低,無(wú)套路經(jīng)營(yíng)理念。讓網(wǎng)頁(yè)驚喜每一位訪客多年來(lái)深受用戶(hù)好評(píng)

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è)置為讀寫(xiě)狀態(tài)的命令:

mysql> unlock tables;
mysql> set global read_only=0;
對(duì)于需要保證master-slave主從同步的salve庫(kù)

將slave從庫(kù)設(shè)置為只讀狀態(tài),需要執(zhí)行的命令為:

mysql> set global read_only=1;

將salve庫(kù)從只讀狀態(tài)變?yōu)樽x寫(xiě)狀態(tài),需要執(zhí)行的命令是:

mysql> set global read_only=0;

對(duì)于Mysql數(shù)據(jù)庫(kù)讀寫(xiě)狀態(tài),主要靠"read_only"全局參數(shù)來(lái)設(shè)定;默認(rèn)情況下, 數(shù)據(jù)庫(kù)是用于讀寫(xiě)操作的,所以read_only參數(shù)也是0或faluse狀態(tài),這時(shí)候不論是本地用戶(hù)還是遠(yuǎn)程訪問(wèn)數(shù)據(jù)庫(kù)的用戶(hù),都可以進(jìn)行讀寫(xiě)操作;

如需設(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只讀模式,可以限定普通用戶(hù)進(jìn)行數(shù)據(jù)修改的操作,但不會(huì)限定具有super權(quán)限的用戶(hù)的數(shù)據(jù)修改操作;在MySQL中設(shè)置read_only=1后,普通的應(yīng)用用戶(hù)進(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)限的用戶(hù),例如在本地或遠(yuǎn)程通過(guò)root用戶(hù)登錄到數(shù)據(jù)庫(kù),還是可以進(jìn)行數(shù)據(jù)變化的DML操作;

鎖表操作

為了確保所有用戶(hù),包括具有super權(quán)限的用戶(hù)也不能進(jìn)行讀寫(xiě)操作,就需要執(zhí)行給所有的表加讀鎖的命令 "flush tables with read lock;",這樣使用具有super權(quán)限的用戶(hù)登錄數(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等用戶(hù)只能在本地登錄,不會(huì)發(fā)生數(shù)據(jù)變化,其他遠(yuǎn)程連接的應(yīng)用用戶(hù)只按需分配為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查詢(xún)操作都是可以正常進(jìn)行的。

網(wǎng)站題目:對(duì)Mysql中的read_only只讀屬性做簡(jiǎn)要說(shuō)明
轉(zhuǎn)載源于:http://www.muchs.cn/article0/ihejio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、ChatGPT、云服務(wù)器、微信公眾號(hào)、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)