最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL8.0數(shù)據(jù)庫參數(shù)修改后重啟不再失效的步驟及踩坑

 更新時間:2026年05月12日 11:03:23   作者:數(shù)據(jù)庫干貨鋪  
這篇文章主要介紹了MySQL8.0數(shù)據(jù)庫參數(shù)修改后重啟不再失效的步驟及踩坑,該功能可以讓數(shù)據(jù)庫在重啟后依然保持動態(tài)修改的參數(shù)設(shè)置,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

前言

在日常的 MySQL 運維中,你有沒有遇到過這樣的尷尬場景:

調(diào)優(yōu)了一個關(guān)鍵參數(shù),比如 innodb_buffer_pool_size,重啟數(shù)據(jù)庫后卻發(fā)現(xiàn)配置又變回去了?

或者線上緊急修改了 max_connections,結(jié)果半夜服務器自動重啟,連接數(shù)限制又打回原形?

如果你經(jīng)歷過這些,那恭喜你——你正站在 MySQL8.0+帶來的“參數(shù)持久化”新世界門口。

從 MySQL8.0開始,官方引入了一項看似低調(diào)、實則革命性的功能:動態(tài)參數(shù)持久化(SET PERSIST)。它讓數(shù)據(jù)庫擁有了“記憶能力”——你改過的配置,即使重啟也不會丟失。

今天,我們就來聊聊這個被很多人忽略、卻能極大提升運維效率的功能,以及使用它時必須注意的幾個坑。

一、以前的做法:靠手改配置文件

在 MySQL8.0之前,動態(tài)修改參數(shù)只能通過SET GLOBAL臨時生效。比如:

mysql> show global variables like 'max_connections';+-----------------+-------+| Variable_name   | Value |+-----------------+-------+| max_connections | 1000  |+-----------------+-------+1 row in set (0.02 sec)
mysql> set global max_connections =5000;Query OK, 0 rows affected (0.00 sec)
mysql> show global variables like 'max_connections';+-----------------+-------+| Variable_name   | Value |+-----------------+-------+| max_connections | 5000  |+-----------------+-------+1 row in set (0.00 sec)

但一旦 MySQL 服務重啟,這個值就會恢復為 my.cnf 中的原始配置。

所以,DBA們在線調(diào)整完動態(tài)參數(shù)后通常要進行如下的“雙線操作”:

  • 先用 SET GLOBAL 立即生效;

  • 再手動編輯 my.cnf 文件,確保重啟后不丟配置。

這不僅繁瑣,還容易出錯——比如忘記改配置文件,或者改錯了路徑、拼寫錯誤,甚至在多實例環(huán)境下改混了配置。

更麻煩的是,在容器化、云原生時代,很多 MySQL 實例根本沒有持久化的配置文件掛載,每次重啟都是“干凈”的狀態(tài)。這時候,傳統(tǒng)方式幾乎失效。

二、MySQL8.0+的新解法:SET PERSIST

從MySQL8.0版本開始引入了兩個新語法:

  • SET PERSIST:修改參數(shù)并寫入數(shù)據(jù)目錄下的 mysqld-auto.cnf 文件,重啟后依然有效。

  • SET PERSIST_ONLY:只寫入文件,不立即生效(適用于不能動態(tài)修改的參數(shù))。

例如之前的修改連接數(shù)的操作就可以按照如下方式進行:

mysql> show global variables like 'max_connections';+-----------------+-------+| Variable_name   | Value |+-----------------+-------+| max_connections | 1000  |+-----------------+-------+1 row in set (0.01 sec)
mysql> SET PERSIST max_connections = 5000;Query OK, 0 rows affected (0.02 sec)
mysql> show global variables like 'max_connections';+-----------------+-------+| Variable_name   | Value |+-----------------+-------+| max_connections | 5000  |+-----------------+-------+1 row in set (0.00 sec)

執(zhí)行后,MySQL 會自動在數(shù)據(jù)目錄(如 /var/lib/mysql/)下生成或更新一個名為 mysqld-auto.cnf 的 JSON 格式文件的配置文件

內(nèi)容如下:

{"Version": 2, "mysql_dynamic_parse_early_variables": {"max_connections": {"Value": "5000", "Metadata": {"Host": "localhost", "User": "root", "Timestamp": 1769343323669674}}}}

記錄了修改的參數(shù)及修改后的值;另外也記錄了哪個用戶在哪臺主機上于何時修改的參數(shù),便于后期的審計

下次啟動時,MySQL 會先讀取 my.cnf,再疊加 mysqld-auto.cnf 中的設(shè)置(后者優(yōu)先級更高),從而實現(xiàn)“動態(tài)+持久”的統(tǒng)一。

三、這功能真香,但也有“雷區(qū)”

雖然參數(shù)持久化極大簡化了運維,但如果不了解其機制,反而可能引發(fā)問題。

1. 雷區(qū)1:權(quán)限控制

只有擁有 SYSTEM_VARIABLES_ADMIN(MySQL 8.0.12 之后)或 SUPER 權(quán)限的用戶才能使用 SET PERSIST。普通業(yè)務賬號無法操作,這是安全設(shè)計,但也意味著你要提前規(guī)劃好運維賬號權(quán)限。

當然這個不算是雷區(qū),本就應該有權(quán)限的用戶才可以修改數(shù)據(jù)庫參數(shù)。但也要控制好用戶修改配置文件的權(quán)限。

2. 雷區(qū)2:配置優(yōu)先級混亂

MySQL 啟動時的配置加載順序是:

  • 內(nèi)置默認值

  • my.cnf(或 --defaults-file 指定的文件)

  • mysqld-auto.cnf(由 SET PERSIST 生成)

注意:第3步的優(yōu)先級最高!

這意味著,即使你在my.cnf里寫了 innodb_buffer_pool_size=2G,但如果之前用SET PERSIST設(shè)成了4G,那實際生效的還是4G。

這在團隊協(xié)作中容易造成“配置漂移”——你以為改了配置文件就生效了,其實被auto.cnf覆蓋了。

建議:定期檢查mysqld-auto.cnf內(nèi)容,或使用 RESET PERSIST 清理不再需要的持久化設(shè)置。

當然,直接刪除mysqld-auto.cnf文件也可以達到清除持久化配置的效果。

3. 雷區(qū)3:不能持久化所有參數(shù)

并非所有參數(shù)都支持 PERSIST。比如某些只讀變量(如 version)、或必須在啟動時確定的參數(shù)(如 datadir),就不能用 SET PERSIST 修改。

此時就需要使用SET PERSIST_ONLY命令進行操作,此命令只持久化到配置文件,不修改當前內(nèi)存值。主要用于只讀變量(需要重啟才能生效的參數(shù))。

例如,對于只讀變量innodb_log_file_size我們必須使用PERSIST_ONLY

mysql> show global variables like 'innodb_log_file_size';+----------------------+------------+| Variable_name        | Value      |+----------------------+------------+| innodb_log_file_size | 1073741824 |+----------------------+------------+1 row in set (0.00 sec)
mysql> set global innodb_log_file_size=2*1073741824;ERROR 1238 (HY000): Variable 'innodb_log_file_size' is a read only variablemysql>  set persist_only innodb_log_file_size=2*1073741824;Query OK, 0 rows affected (0.01 sec)
mysql> show global variables like 'innodb_log_file_size';+----------------------+------------+| Variable_name        | Value      |+----------------------+------------+| innodb_log_file_size | 1073741824 |+----------------------+------------+1 row in set (0.00 sec)

可以看出,修改后并沒有立即生效。此參數(shù)需要重啟后生效,例如:

mysql> restart;Query OK, 0 rows affected (0.00 sec)
mysql> Restarting mysqld...2026-01-25T12:32:29.556858Z mysqld_safe Number of processes running now: 02026-01-25T12:32:29.571048Z mysqld_safe mysqld restarted
mysql> show global variables like 'innodb_log_file_size';ERROR 2013 (HY000): Lost connection to MySQL server during queryNo connection. Trying to reconnect...Connection id:    8Current database: *** NONE ***
+----------------------+------------+| Variable_name        | Value      |+----------------------+------------+| innodb_log_file_size | 2147483648 |+----------------------+------------+1 row in set (0.03 sec)

修改的參數(shù)也保存在 mysqld-auto.cnf配置文件中,可以看到標注的是靜態(tài)參數(shù)mysql_static_variables列表中:

{"Version": 3, "mysql_static_variables": {"innodb_log_file_size": {"Value": "2147483648", "Metadata": {"Host": "localhost", "User": "root", "Timestamp": 1769344313812486}}}}

四、 監(jiān)控與審計

1.  參數(shù)配置查看

在MySQL8.0版本之前想確定MySQL是用哪個配置文件啟動的這個問題,確定起來還是要費一點時間的,但是MySQL8.0將每個參數(shù)的配置來源記錄在了performance_schema.variables_info表中,且引入了SET PERSIST此特性后,可以查看每個命令是通過什么方式修改的。

mysql> SELECT VARIABLE_NAME, VARIABLE_SOURCE, VARIABLE_PATH  FROM performance_schema.variables_info limit 100;

2. 審計

利用performance_schema.variables_info表可以查看變量的來源、修改用戶及時間等,便于追溯變量的修改

mysql> SELECT *   FROM performance_schema.variables_info  WHERE VARIABLE_SOURCE = 'PERSISTED';+----------------------+-----------------+--------------------------------------------+-----------+----------------------+----------------------------+----------+-----------+| VARIABLE_NAME        | VARIABLE_SOURCE | VARIABLE_PATH                              | MIN_VALUE | MAX_VALUE            | SET_TIME                   | SET_USER | SET_HOST  |+----------------------+-----------------+--------------------------------------------+-----------+----------------------+----------------------------+----------+-----------+| innodb_log_file_size | PERSISTED       | /data/mysql/mysql3307/data/mysqld-auto.cnf | 4194304   | 18446744073709551615 | 2026-01-25 07:31:53.812486 | root     | localhost |+----------------------+-----------------+--------------------------------------------+-----------+----------------------+----------------------------+----------+-----------+1 row in set (0.00 sec)

五、結(jié)語:小功能,大價值

參數(shù)持久化看似只是一個語法糖,但它背后體現(xiàn)的是MySQL向“自動化運維”邁出的關(guān)鍵一步。在 DevOps 和云原生盛行的今天,這種“運行時可配置 + 自動持久”的能力,正是現(xiàn)代數(shù)據(jù)庫該有的樣子。

下次當你再調(diào)整 MySQL 參數(shù)時,不妨試試 SET PERSIST——但記得,用得好是利器,用不好就是隱患。畢竟,數(shù)據(jù)庫不會說話,但它會記住你做的一切。

你們在生產(chǎn)環(huán)境里調(diào)整參數(shù)時,有沒有遇到過奇怪的問題?比如調(diào)整后性能反而下降?

到此這篇關(guān)于MySQL8.0數(shù)據(jù)庫參數(shù)修改后重啟不再失效的步驟及踩坑的文章就介紹到這了,更多相關(guān)MySQL參數(shù)修改后重啟不失效內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何解決mysql重裝失敗方法介紹

    如何解決mysql重裝失敗方法介紹

    相信大家使用MySQL都有過重裝的經(jīng)歷,要是重裝MySQL基本都是在最后一步通不過,除非重裝操作系統(tǒng),究其原因就是系統(tǒng)里的注冊表沒有刪除干凈
    2012-11-11
  • 實例講解MySQL統(tǒng)計庫表大小

    實例講解MySQL統(tǒng)計庫表大小

    這篇文章主要介紹了MySQL統(tǒng)計庫表大小的相關(guān)資料,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • mysql中取出json字段的小技巧

    mysql中取出json字段的小技巧

    這篇文章主要介紹了mysql中取出json字段的小技巧,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • mysql 5.7.17 安裝配置方法圖文教程(windows10)

    mysql 5.7.17 安裝配置方法圖文教程(windows10)

    這篇文章主要為大家分享了mysql 5.7.17 安裝配置方法圖文教程,具有一定的參考價值,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • MySQL模式 Strict Mode知識點詳解

    MySQL模式 Strict Mode知識點詳解

    在本篇文章里小編給各位整理的是一篇關(guān)于MySQL模式 Strict Mode知識點詳解內(nèi)容,需要的朋友們參考下。
    2020-03-03
  • Windows環(huán)境下MySQL 8.0 的安裝、配置與卸載

    Windows環(huán)境下MySQL 8.0 的安裝、配置與卸載

    這篇文章主要介紹了Windows環(huán)境下MySQL 8.0 的安裝、配置與卸載步驟,本文分步驟給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • MySQL中order by的使用詳情

    MySQL中order by的使用詳情

    在使用select語句時可以結(jié)合order by對查詢的數(shù)據(jù)進行排序。如果不使用order by默認情況下MySQL返回的數(shù)據(jù)集,與它在底層表中的順序相同,可能與你添加數(shù)據(jù)到表中的順序一致,也可能不一致,如果希望得到的數(shù)據(jù)有順序,就該明確排序方式,下面詳細內(nèi)容需要的朋友可以參考一下
    2021-11-11
  • 解決Linux安裝mysql報錯:失敗的軟件包是:mysql-community-libs-8.0.37-1.el7.x86_64?GPG

    解決Linux安裝mysql報錯:失敗的軟件包是:mysql-community-libs-8.0.37-1.el7.x

    mysql是一款常用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),常常被用于各類web應用中,這篇文章主要給大家介紹了關(guān)于如何解決Linux安裝mysql報錯:失敗的軟件包是:mysql-community-libs-8.0.37-1.el7.x86_64?GPG的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • 如何用workbench導出mysql數(shù)據(jù)庫關(guān)系圖

    如何用workbench導出mysql數(shù)據(jù)庫關(guān)系圖

    用workbench導出mysql數(shù)據(jù)庫關(guān)系圖的解決方法,需要的朋友請往下閱讀
    2013-03-03
  • MySQL修改時間添加時間自動更新的兩種方法

    MySQL修改時間添加時間自動更新的兩種方法

    這篇文章主要介紹了MySQL修改時間添加時間自動更新的兩種方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09

最新評論

海口市| 高淳县| 枣庄市| 镇宁| 福建省| 洱源县| 玉树县| 东港市| 开封市| 禄丰县| 利川市| 庆城县| 陇南市| SHOW| 长子县| 阜平县| 镇安县| 昌黎县| 且末县| 梅州市| 通海县| 修水县| 宣化县| 凤山县| 鄂州市| 汝南县| 宁海县| 万荣县| 当雄县| 柘荣县| 土默特右旗| 康定县| 乐亭县| 白玉县| 南开区| 那坡县| 确山县| 湖州市| 腾冲县| 嘉荫县| 涿州市|