在8之前的版本中,對於全局變數的修改,其只會影響其記憶體值,而不會持久化到配置文件中。資料庫重啟,又會恢覆成修改前的值。從8開始,可通過SET PERSIST命令將全局變數的修改持久化到配置文件中。 試舉一例 全局變數的修改會保存在兩處, 1. 數據目錄下mysqld-auto.cnf文件, 註意,不 ...
在8之前的版本中,對於全局變數的修改,其只會影響其記憶體值,而不會持久化到配置文件中。資料庫重啟,又會恢覆成修改前的值。從8開始,可通過SET PERSIST命令將全局變數的修改持久化到配置文件中。
試舉一例
mysql> show variables like '%max_connections%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | max_connections | 151 | | mysqlx_max_connections | 100 | +------------------------+-------+ 2 rows in set (0.00 sec) mysql> set persist max_connections=200; Query OK, 0 rows affected (0.00 sec) mysql> show variables like '%max_connections%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | max_connections | 200 | | mysqlx_max_connections | 100 | +------------------------+-------+ 2 rows in set (0.00 sec)
全局變數的修改會保存在兩處, 1. 數據目錄下mysqld-auto.cnf文件, 註意,不是啟動時--defaults-file指定的配置文件。
[root@slowtech ~]# cat /var/lib/mysql/mysqld-auto.cnf { "Version" : 1 , "mysql_server" : { "max_connections" : { "Value" : "200" , "Metadata" : { "Timestamp" : 1525509217566258 , "User" : "root" , "Host" : "localhost" } } } }
持久化信息以json格式保存,其中,Metadata記錄了這次修改的用戶及時間信息。 在資料庫啟動時,會首先讀取其它配置文件,最後才讀取mysqld-auto.cnf文件。不建議手動修改該文件,其有可能導致資料庫在啟動過程中因解析錯誤而失敗。如果出現這種情況,可手動刪除mysqld-auto.cnf文件或將persisted_globals_load變數設置為off來避免該文件的載入。 2. performance_schema.persisted_variables
mysql> select * from performance_schema.persisted_variables; +-----------------+----------------+ | VARIABLE_NAME | VARIABLE_VALUE | +-----------------+----------------+ | max_connections | 200 | +-----------------+----------------+ 1 row in set (0.00 sec)
全局變數的持久化除了SET PERSIST外,還有SET PERSIST_ONLY,與前者相比,其只持久化全局變數,而不修改其記憶體值。同時,在許可權方面,前者只需要SYSTEM_VARIABLES_ADMIN,後者還需要PERSIST_RO_VARIABLES_ADMIN許可權。 對於已經持久化了變數,可通過RESET PERSIST命令清除掉,註意,其只是清空mysqld-auto.cnf和performance_schema.persisted_variables中的內容,對於已經修改了的變數的值,不會產生任何影響。 除此之外,還可以通過下述方式將全局變數持久化為預設值。註意,是預設值,而不是修改前的值。
mysql> set persist max_connections=default;這個命令同“set global max_connections=default”類似,都會將變數的值設置為預設值,只不過前者還會將預設值持久化到配置文件中。