偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

MySQL設(shè)置數(shù)據(jù)庫(kù)為只讀,你會(huì)嗎?

數(shù)據(jù)庫(kù) MySQL
默認(rèn)情況下,我們的 MySQL 實(shí)例是可讀寫(xiě)的。但有些情況下,我們可以將整個(gè)實(shí)例設(shè)置為只讀狀態(tài),比如做遷移維護(hù)的時(shí)候或者將從庫(kù)設(shè)為只讀。本篇文章我們來(lái)看下 MySQL 設(shè)置只讀相關(guān)知識(shí)。

[[439802]]

 前言:

默認(rèn)情況下,我們的 MySQL 實(shí)例是可讀寫(xiě)的。但有些情況下,我們可以將整個(gè)實(shí)例設(shè)置為只讀狀態(tài),比如做遷移維護(hù)的時(shí)候或者將從庫(kù)設(shè)為只讀。本篇文章我們來(lái)看下 MySQL 設(shè)置只讀相關(guān)知識(shí)。

1.關(guān)于 read_only 參數(shù)

MySQL系統(tǒng)中,提供有 read_only 和 super_read_only 兩個(gè)只讀參數(shù),參考官方文檔,這里介紹下這兩個(gè)參數(shù)的作用:

read_only 參數(shù)默認(rèn)不開(kāi)啟,開(kāi)啟后會(huì)阻止沒(méi)有 super 權(quán)限的用戶執(zhí)行數(shù)據(jù)庫(kù)變更操作。開(kāi)啟后,普通權(quán)限用戶執(zhí)行插入、更新、刪除等操作時(shí),會(huì)提示 --read-only 錯(cuò)誤。但具有 super 權(quán)限的用戶仍可執(zhí)行變更操作。

super_read_only 參數(shù)同樣默認(rèn)關(guān)閉,開(kāi)啟后不僅會(huì)阻止普通用戶,也會(huì)阻止具有 super 權(quán)限的用戶對(duì)數(shù)據(jù)庫(kù)進(jìn)行變更操作。

read_only 和 super_read_only 是有關(guān)聯(lián)的,二者之間的關(guān)系如下:

  • 設(shè)置 super_read_only=on ,也就隱式地設(shè)置了 read_only=on。
  • 設(shè)置 read_only=off ,也就隱式地設(shè)置了 super_read_only=off。
  • 可以單獨(dú)開(kāi)啟 read_only 而不開(kāi)啟 super_read_only。

不過(guò),從庫(kù)開(kāi)啟 read_only 并不影響主從同步,即 salve 端仍然會(huì)讀取 master 上的日志,并且在 slave 實(shí)例中應(yīng)用日志,保證主從數(shù)據(jù)庫(kù)同步一致。(經(jīng)測(cè)試,從庫(kù)端開(kāi)啟 super_read_only 仍不影響主從同步。)

下面我們具體來(lái)操作下,看下 read_only 參數(shù)的用法:

  1. # 查看 read_only 參數(shù) 
  2. mysql> show global variables like '%read_only%'
  3. +-----------------------+-------+ 
  4. | Variable_name         | Value | 
  5. +-----------------------+-------+ 
  6. | innodb_read_only      | OFF   | 
  7. | read_only             | OFF   | 
  8. | super_read_only       | OFF   | 
  9. | transaction_read_only | OFF   | 
  10. | tx_read_only          | OFF   | 
  11. +-----------------------+-------+ 
  12.  
  13. # 動(dòng)態(tài)修改 read_only 參數(shù) (若想重啟生效 則需將 read_only = 1 加入配置文件中) 
  14. mysql> set global read_only = 1; 
  15. Query OK, 0 rows affected (0.00 sec) 
  16.  
  17. mysql> show global variables like 'read_only'
  18. +---------------+-------+ 
  19. | Variable_name | Value | 
  20. +---------------+-------+ 
  21. | read_only     | ON    | 
  22. +---------------+-------+ 
  23.  
  24. # read_only 開(kāi)啟的情況下 操作數(shù)據(jù) 
  25. # 使用超級(jí)權(quán)限用戶 
  26. mysql> create table tb_a (a int); 
  27. Query OK, 0 rows affected (0.05 sec) 
  28. # 使用普通權(quán)限用戶 
  29. mysql> create table tb_b (b int);  
  30. ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement 
  31.  
  32. # 開(kāi)啟 super_read_only,再次使用超級(jí)權(quán)限用戶來(lái)操作數(shù)據(jù) 
  33. mysql> set global super_read_only = 1; 
  34. Query OK, 0 rows affected (0.00 sec) 
  35. mysql> show global variables like 'super_read_only'
  36. +-----------------+-------+ 
  37. | Variable_name   | Value | 
  38. +-----------------+-------+ 
  39. | super_read_only | ON    | 
  40. +-----------------+-------+ 
  41. mysql> create table tb_c (c int);   
  42. ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement 
  43.  
  44. # 關(guān)閉 read_only 參數(shù) 
  45. mysql> set global read_only = 0; 
  46. Query OK, 0 rows affected (0.00 sec) 

2.flush tables with read lock 設(shè)置

除了 read_only 參數(shù)外,執(zhí)行 flush tables with read lock 也可將數(shù)據(jù)庫(kù)設(shè)置為只讀狀態(tài),那么二者有什么區(qū)別呢?我們先來(lái)了解下 flush tables with read lock 的作用。

執(zhí)行此命令會(huì)給數(shù)據(jù)庫(kù)加全局讀鎖,使得數(shù)據(jù)庫(kù)處于只讀狀態(tài),以下語(yǔ)句會(huì)被阻塞:數(shù)據(jù)更新語(yǔ)句(增刪改)、數(shù)據(jù)定義語(yǔ)句(建表、修改表結(jié)構(gòu)等)和更新類(lèi)事務(wù)的提交語(yǔ)句。下面我們來(lái)具體實(shí)驗(yàn)下:

  1. # 執(zhí)行FTWRL 
  2. mysql> flush tables with read lock; 
  3. Query OK, 0 rows affected (0.02 sec) 
  4.  
  5. # 進(jìn)行數(shù)據(jù)變更操作 
  6. mysql> insert into tb_a values (1); 
  7. ERROR 1223 (HY000): Can't execute the query because you have a conflicting read lock 
  8.  
  9. # 解鎖 
  10. mysql> unlock tables; 
  11. Query OK, 0 rows affected (0.00 sec) 
  12. mysql> insert into tb_a values (1); 
  13. Query OK, 1 row affected (0.01 sec) 

值得注意的是,從庫(kù)端執(zhí)行 flush tables with read lock 會(huì)導(dǎo)致 SQL 線程卡住,主備延遲。與開(kāi)啟 read_only 參數(shù)不同的是,執(zhí)行 flush tables with read lock 后,其余客戶端執(zhí)行數(shù)據(jù)變更操作會(huì)持續(xù)等待而不是立即報(bào)錯(cuò),極其容易引起數(shù)據(jù)庫(kù) hang 住,執(zhí)行這個(gè)命令還是要小心的。

以個(gè)人數(shù)據(jù)庫(kù)運(yùn)維經(jīng)驗(yàn)來(lái)講,一般只有從庫(kù)需要設(shè)置只讀狀態(tài),從庫(kù)端建議開(kāi)啟 read_only 或 super_read_only,避免人為寫(xiě)入。flush tables with read lock 適用于進(jìn)行數(shù)據(jù)遷移時(shí),可以保證數(shù)據(jù)庫(kù)不發(fā)生數(shù)據(jù)改變,不過(guò)要注意及時(shí)解鎖。

總結(jié):

本篇文章主要介紹了 MySQL 只讀狀態(tài)相關(guān)知識(shí),其實(shí)除了從庫(kù)外,其余實(shí)例很少設(shè)置全局只讀,只是遇到某種需求的情況下需要將數(shù)據(jù)庫(kù)設(shè)為只讀狀態(tài),寫(xiě)本篇文章的目的也是遇到此類(lèi)需求時(shí),可以有個(gè)參考。

 

責(zé)任編輯:武曉燕 來(lái)源: MySQL技術(shù)
相關(guān)推薦

2021-12-13 22:59:23

MySQL數(shù)據(jù)庫(kù)SQL

2024-03-13 10:40:00

性能探測(cè)工具SQL語(yǔ)句數(shù)據(jù)庫(kù)

2021-09-12 17:25:12

SQLite數(shù)據(jù)庫(kù)

2024-02-22 08:31:26

數(shù)據(jù)恢復(fù)工具MySQL回滾SQL

2025-01-10 09:15:57

2021-08-19 15:36:09

數(shù)據(jù)備份存儲(chǔ)備份策略

2025-01-03 08:42:59

數(shù)據(jù)庫(kù)三范式架構(gòu)

2018-03-27 08:46:01

數(shù)據(jù)庫(kù)NoSQLredis

2019-04-08 14:58:36

數(shù)據(jù)庫(kù)SQL數(shù)據(jù)類(lèi)型

2011-11-04 14:07:40

存儲(chǔ)

2017-01-18 18:28:54

大數(shù)據(jù)數(shù)據(jù)庫(kù)技術(shù)

2021-01-06 10:52:02

MySQL數(shù)據(jù)庫(kù)安全

2025-05-07 04:45:00

AIOPS數(shù)據(jù)庫(kù)Oracle

2011-07-27 09:33:16

MySQL數(shù)據(jù)庫(kù)INNODB數(shù)據(jù)庫(kù)引擎

2017-10-25 15:27:52

MySQL數(shù)據(jù)庫(kù)超時(shí)設(shè)置

2020-03-27 16:05:49

數(shù)據(jù)庫(kù)數(shù)據(jù)MySQL

2024-07-31 08:21:53

2021-09-15 09:51:36

數(shù)據(jù)庫(kù)架構(gòu)技術(shù)

2023-10-09 08:37:39

2022-01-06 07:59:05

Linux 防火墻進(jìn)程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)