自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MySQL設置數(shù)據庫為只讀,你會嗎?

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

[[439802]]

 前言:

默認情況下,我們的 MySQL 實例是可讀寫的。但有些情況下,我們可以將整個實例設置為只讀狀態(tài),比如做遷移維護的時候或者將從庫設為只讀。本篇文章我們來看下 MySQL 設置只讀相關知識。

1.關于 read_only 參數(shù)

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

read_only 參數(shù)默認不開啟,開啟后會阻止沒有 super 權限的用戶執(zhí)行數(shù)據庫變更操作。開啟后,普通權限用戶執(zhí)行插入、更新、刪除等操作時,會提示 --read-only 錯誤。但具有 super 權限的用戶仍可執(zhí)行變更操作。

super_read_only 參數(shù)同樣默認關閉,開啟后不僅會阻止普通用戶,也會阻止具有 super 權限的用戶對數(shù)據庫進行變更操作。

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

  • 設置 super_read_only=on ,也就隱式地設置了 read_only=on。
  • 設置 read_only=off ,也就隱式地設置了 super_read_only=off。
  • 可以單獨開啟 read_only 而不開啟 super_read_only。

不過,從庫開啟 read_only 并不影響主從同步,即 salve 端仍然會讀取 master 上的日志,并且在 slave 實例中應用日志,保證主從數(shù)據庫同步一致。(經測試,從庫端開啟 super_read_only 仍不影響主從同步。)

下面我們具體來操作下,看下 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. # 動態(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 開啟的情況下 操作數(shù)據 
  25. # 使用超級權限用戶 
  26. mysql> create table tb_a (a int); 
  27. Query OK, 0 rows affected (0.05 sec) 
  28. # 使用普通權限用戶 
  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. # 開啟 super_read_only,再次使用超級權限用戶來操作數(shù)據 
  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. # 關閉 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 設置

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

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

  1. # 執(zhí)行FTWRL 
  2. mysql> flush tables with read lock; 
  3. Query OK, 0 rows affected (0.02 sec) 
  4.  
  5. # 進行數(shù)據變更操作 
  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) 

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

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

總結:

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

 

責任編輯:武曉燕 來源: MySQL技術
相關推薦

2021-12-13 22:59:23

MySQL數(shù)據庫SQL

2024-03-13 10:40:00

性能探測工具SQL語句數(shù)據庫

2021-09-12 17:25:12

SQLite數(shù)據庫

2024-02-22 08:31:26

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

2025-01-10 09:15:57

2021-08-19 15:36:09

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

2018-03-27 08:46:01

數(shù)據庫NoSQLredis

2025-01-03 08:42:59

數(shù)據庫三范式架構

2019-04-08 14:58:36

數(shù)據庫SQL數(shù)據類型

2011-11-04 14:07:40

存儲

2017-01-18 18:28:54

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

2011-07-27 09:33:16

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

2017-10-25 15:27:52

MySQL數(shù)據庫超時設置

2021-01-06 10:52:02

MySQL數(shù)據庫安全

2021-09-15 09:51:36

數(shù)據庫架構技術

2023-10-09 08:37:39

2020-03-27 16:05:49

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

2025-03-20 09:13:26

2022-04-14 13:48:33

MySQL數(shù)據庫并發(fā)量

2010-05-28 18:44:45

點贊
收藏

51CTO技術棧公眾號