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

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

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

前言

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

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

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

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

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

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

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

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

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 服務(wù)重啟,這個(gè)值就會(huì)恢復(fù)為 my.cnf 中的原始配置。

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

  • 先用 SET GLOBAL 立即生效;

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

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

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

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

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

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

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

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

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 會(huì)自動(dòng)在數(shù)據(jù)目錄(如 /var/lib/mysql/)下生成或更新一個(gè)名為 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ù)及修改后的值;另外也記錄了哪個(gè)用戶在哪臺主機(jī)上于何時(shí)修改的參數(shù),便于后期的審計(jì)

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

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

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

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

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

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

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

MySQL 啟動(dòng)時(shí)的配置加載順序是:

  • 內(nèi)置默認(rèn)值

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

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

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

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

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

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

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

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

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

此時(shí)就需要使用SET PERSIST_ONLY命令進(jìn)行操作,此命令只持久化到配置文件,不修改當(dāng)前內(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配置文件中,可以看到標(biāo)注的是靜態(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)控與審計(jì)

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

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

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

2. 審計(jì)

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

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é)語:小功能,大價(jià)值

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

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

你們在生產(chǎn)環(huán)境里調(diào)整參數(shù)時(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
  • 實(shí)例講解MySQL統(tǒng)計(jì)庫表大小

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

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

    mysql中取出json字段的小技巧

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

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

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

    MySQL模式 Strict Mode知識點(diǎn)詳解

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

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

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

    MySQL中order by的使用詳情

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

    解決Linux安裝mysql報(bào)錯(cuò):失敗的軟件包是:mysql-community-libs-8.0.37-1.el7.x

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

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

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

    MySQL修改時(shí)間添加時(shí)間自動(dòng)更新的兩種方法

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

最新評論

峨山| 新乡县| 永泰县| 馆陶县| 介休市| 波密县| 莒南县| 苗栗县| 云和县| 封开县| 五常市| 浦北县| 同德县| 汕头市| 普定县| 麻城市| 库车县| 高雄市| 博野县| 东海县| 崇左市| 山阳县| 离岛区| 柳河县| 普兰店市| 新建县| 洪湖市| 宜春市| 溆浦县| 滨州市| 句容市| 介休市| 红原县| 遂宁市| 庆元县| 临汾市| 榆林市| 芜湖市| 河东区| 双流县| 广宗县|