MYSQL資料庫的引數檔案

2021-09-20 14:49:58 字數 2500 閱讀 1060

引數檔案:告訴mysql例項啟動時在**可以找到資料庫檔案,並且指定某些初始化引數,這些引數定義了某種記憶體結構的大小等設定,還會介紹各種引數的型別。

當mysql例項啟動時,mysql會先去讀乙個配置引數檔案,用來尋找資料庫的各種檔案所在位置以及指定某些初始化引數,這些引數通常定義了某種記憶體結構有多大等設定。預設情況下,mysql例項會按照一定的次序去取,你只需通過命令mysql --help|grep my.cnf來尋找即可。

mysql引數檔案的作用和oracle的引數檔案極其類似;不同的是,oracle例項啟動時若找不到引數檔案,是不能進行裝載(mount)操作的。mysql稍微有所不同,mysql例項可以不需要引數檔案,這時所有的引數值取決於編譯mysql時指定的預設值和源**中指定引數的預設值。但是,如果mysql在預設的資料庫目錄下找不到mysql架構,則啟動同樣會失敗,你可能在錯誤日誌檔案中找到如下內容:

090922 16:25:52mysqld started

090922 16:25:53 innodb:started;log sequence number 8 2801063211innodb:!innodb_force_recovery is set to 1!

090922 16:25:53[error]fatal error:can't open and lock privilege tables:table'mysql.host'doesn't exist

090922 16:25:53 mysqld ended

mysql中的mysql架構中記錄了訪問該例項的許可權,當找不到這個架構時,mysql例項不會成功啟動。

和oracle引數檔案不同的是,oracle的引數檔案分為二進位制的引數檔案(spfile)和文字型別的引數檔案(init.ora),而mysql的引數檔案僅是文字的,方便的是,你可以通過一些常用的編輯軟體(如vi和emacs)進行引數的編輯。

可以把資料庫引數看成乙個鍵/值對。可以通過show variables檢視所有的引數,或通過like來過濾引數名。

從mysql 5.1版本開始,可以通過information_schema架構下的global_variables檢視來進行查詢,如下所示:

select * from global_variables where variable_name like 'innodb_buffer%'\g;

show variables like 'innodb_buffer%'\g

oracle的引數有所謂的隱藏引數(undocumented parameter),以供oracle「內部人士」使用,sql server也有類似的引數。有些dba曾問我,mysql中是否也有這類引數。我的回答是:沒有,也不需要(其實是有)。即使oracle和sql server中都有些所謂的隱藏引數,在絕大多數情況下,這些資料庫廠商也不建議你在生產環境中對其進行很大的調整。

mysql引數檔案中的引數可以分為兩類:動態(dynamic)引數和靜態(static)引數。動態引數意味著你可以在mysql例項執行中進行更改;靜態引數說明在整個例項生命週期內都不得進行更改,就好像是唯讀(read only)的。

可以通過set命令對動態的引數值進行修改,set的語法如下:

set 

| [global|session] system_var_name=expr 

| [@@global.|@@session.|@@] system_var_name=expr

這裡可以看到global和session關鍵字,它們表明該引數的修改是基於當前會話還是整個例項的生命週期。

有些動態引數只能在會話中進行修改,如autocommit;

有些引數修改完後,在整個例項生命週期中都會生效,如binlog_cache_size;

而有些引數既可以在會話又可以在整個例項的生命週期內生效,如read_buffer_size。

舉例如下:

set read_buffer_size=524288;

select @@session.read_buffer_size\g;

select @@global.read_buffer_size\g;

將read_buffer_size的會話值從2mb調整為了512kb,可以看到全域性的read_buffer_size的值仍然是2mb,也就是說,如果有另乙個會話登入到mysql例項,它的read_buffer_size的值是2mb,而不是512kb。這裡使用了set global|session來改變動態變數的值。

使用set @@global|@@session來更改

set @@global.read_buffer_size=1048576;

select @@session.read_buffer_size\g;

select @@global.read_buffer_size\g;

對於靜態變數,如果對其進行修改,會得到類似如下的錯誤

set global datadir='/db/mysql';

error 1238(hy000):variable'datadir'is a read only variable

mysql資料庫引數詳解 MySQL資料庫基礎講解

資料庫安裝教程 mysql資料庫安裝語句 1.sudo apt get install mysql server 2.sudo apt get install mysql client 3.sudo apt get install libmysqlclient dev 查詢mysql是否安裝成功 s...

MySQL資料庫引數

資料庫引數 mysql資料庫的引數配置一般在my.ini配置檔案中修改 新增 部分引數也可以用set global 引數名 值 做臨時調整,重啟後失效 配置完後需要重啟資料庫才生效。引數1 innodb buffer pool size gb mb 說明 此引數類似於oracle的sga配置,當主機...

MySQL資料庫 引數優化

資料庫屬於 io 密集型的應用程式,其主要職責就是資料的管理及儲存工作。而我們知道,從記憶體中讀取乙個資料庫的時間是微秒級別,而從一塊普通硬碟上讀取乙個io是在毫秒級別,二者相差3個數量級。所以,要優化資料庫,首先第一步需要優化的就是 io,盡可能將磁碟io轉化為記憶體io。本文先從 mysql 資...