成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL設置數據庫為只讀,你會嗎?

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

[[439802]]

 前言:

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

1.關于 read_only 參數

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

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

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

read_only 和 super_read_only 是有關聯的,二者之間的關系如下:

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

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

下面我們具體來操作下,看下 read_only 參數的用法:

  1. # 查看 read_only 參數 
  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. # 動態修改 read_only 參數 (若想重啟生效 則需將 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 開啟的情況下 操作數據 
  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,再次使用超級權限用戶來操作數據 
  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 參數 
  45. mysql> set global read_only = 0; 
  46. Query OK, 0 rows affected (0.00 sec) 

2.flush tables with read lock 設置

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

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

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

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

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

總結:

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

 

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

2021-12-13 22:59:23

MySQL數據庫SQL

2024-03-13 10:40:00

性能探測工具SQL語句數據庫

2021-09-12 17:25:12

SQLite數據庫

2024-02-22 08:31:26

數據恢復工具MySQL回滾SQL

2025-01-10 09:15:57

2021-08-19 15:36:09

數據備份存儲備份策略

2025-01-03 08:42:59

數據庫三范式架構

2018-03-27 08:46:01

數據庫NoSQLredis

2019-04-08 14:58:36

數據庫SQL數據類型

2011-11-04 14:07:40

存儲

2017-01-18 18:28:54

大數據數據庫技術

2011-07-27 09:33:16

MySQL數據庫INNODB數據庫引擎

2021-01-06 10:52:02

MySQL數據庫安全

2025-05-07 04:45:00

AIOPS數據庫Oracle

2017-10-25 15:27:52

MySQL數據庫超時設置

2023-10-09 08:37:39

2020-03-27 16:05:49

數據庫數據MySQL

2021-09-15 09:51:36

數據庫架構技術

2024-07-31 08:21:53

2023-11-01 15:45:29

DBMPython
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品在欧美一区二区 | 国产日韩欧美在线观看 | 亚洲一区国产精品 | 国产精品久久国产精品久久 | 曰韩一二三区 | 国产精品美女久久久久久久久久久 | 一区二区三区免费 | 久久五月婷 | 国产精品日韩欧美一区二区三区 | 国产精品久久久久久久久久久久午夜片 | 亚洲精品国产一区 | 亚洲高清在线 | 欧美精品一区在线发布 | 精品国产一区二区三区在线观看 | 天天干在线播放 | 欧美黑人体内she精在线观看 | 国产精品视频在线免费观看 | 成人做爰69片免费观看 | 日韩久草| 久久精品小视频 | 国产专区视频 | 91久久久久久 | 91精品无人区卡一卡二卡三 | 国产美女h视频 | 日本精品视频在线 | 一区二区三区av | 欧美性生活免费 | 亚洲国产精品一区二区三区 | 99免费精品视频 | 精久久久| 久久精品中文 | 国产精品伦理一区 | 一级欧美视频 | 亚洲欧美国产精品久久 | 热久久免费视频 | 国产福利91精品一区二区三区 | 色综合一区二区三区 | 国产欧美日韩二区 | 亚洲精品一区久久久久久 | 欧美男人天堂 | 成人激情视频免费观看 |