mysql作為一種常見的資料庫管理系統(dbms),其自身的各種配置項極大的影響了其效能。所以有必要進行了解和學習。
配置學習資源途徑
mysql配置
配置檔案位置:
一般來說,mysql服務端配置檔案的預設位置是:/etc/my.cnf 或者 /etc/mysql/my.cnf
【也可以通過mysqld --verbose --help|grep -a 1 'default option'確認配置檔案的位置】和nginx類似,也可以選擇分目錄進行include,便於管理整體配置結構。 (比如 !includedir /etc/my.cnf.d 然後在my.conf.d目錄裡對不同的配置項分檔案。
配置修改基礎:
2、配置項有不同的作用域,有的是全域性,有的是會話。其次,還有動態變數,可在執行時修改。【也就是說,大部分非動態變數需要重啟才能生效】
3、全域性變數:修改後對當前會話及已存在的會話均不生效。可通過show global variables確認。
4、變數的單位:配置時要注意單位,命令列或者配置檔案,可以使用字尾指定單位(比如1m等,但要注意,使用sql的set指令時就不能使用單位。
5、配置檔案管理:最好使用git來進行版本管理,加上充足的注釋。可以避免不少問題。
如何建立乙個靠譜的mysql配置?
1、乙個好的配置,不是從學習配置項開始,也不是詢問怎麼設定或者怎麼修改,更不是觀察伺服器行為和詢問哪個配置可以提公升效能。
【應該是從理解mysql核心和行為開始】
2、保證基礎配置都正確(比如日誌路徑,快取配置,埠號,資料庫儲存位置等。如非必要,盡量使用預設配置。(預設配置經受過的測試是最多的。
3、優先進行語句優化等其他優化,最後考慮修改配置項。
乙個最小配置示例
一般來說,選擇盡量少的配置(或者說最小配置),如無必要,不用宣告(不宣告使用預設值)。當然一些非常重要的配置項,即使使用預設配置,也最好宣告出來。(比如default_storage_engine)[mysqld]
#general
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
pid-file = /var/lib/mysql/mysqld.pid
user = mysql
port = 3306
default_storage_engine = innodb
#innodb
innodb_buffer_pool_size = 256m #核心配置,需要根據實際情況調整
innodb_log_file_size = 50m #需要根據實際情況調整
innodb_file_per_table = 1 #需要根據實際情況調整
innodb_flush_method = o_direct #這裡是字母o,不是數字0
#logging
log-error = /var/log/mysql-error.log
slow_query_log = /var/log/mysql-slow.log
#other
tmp_table_size = 32m #需要根據實際情況調整
max_heap_table_size = 32m #需要根據實際情況調整
#query_cache_type = 0 #mysql 8.0有變動,引數名不是這個
#query_cache_size = 0 #mysql 8.0有變動,引數名不是這個
max_connections = 100 #需要根據實際情況調整
thread_cache_size = 50 #根據其餘引數調整執行緒快取
table_open_cache = 10 #根據 opened_tables 調整
open_files_limit = 65535 #盡量調大,配合核心引數
[client]
socket = /var/lib/mysql/mysql.sock
port = 3306
配置檔案解釋:
1、innodb的配置項:innodb_buffer_pool_size 【最核心配置,innodb嚴重依賴緩衝池。索引、行資料快取、雜湊索引,插入快取、鎖等。必須為innodb配置足夠的緩衝池。 一般為記憶體的75%-80%,建議配置的稍低,根據情況增加比例。[ 《高效能mysql》p343
innodb任意時刻可以保持開啟.idb檔案的數量是有限的,由如下兩個引數控制:
innodb_file_per_table:when innodb_file_per_table is enabled, tables are created in file-per-table tablespaces by default.
innodb_open_files:it specifies the maximum number of .ibd files that mysql can keep open at one time.
2、mysql配置項:執行緒快取(thread_cache_size):
[引數]thread_cache_size:可以保持在快取中的執行緒數。
當關閉乙個連線時,會將這個連線的執行緒放入快取(如果快取有空間)。下次可以直接讀快取,而非重新建立連線。
[狀態]thread_cached:當前已經快取了的執行緒數。
[狀態]threads_created:每秒建立的新執行緒數,(如果每秒要建立很多執行緒,那需要考慮增加快取大小
[狀態]threads_connectd:當前正在連線中的執行緒數。
表快取:
[引數]table_open_cache:如果[狀態]opened_tables很大,或者一直在增長。考慮增加這個引數。
[引數]table_definition_cache:通常都可以配置的比較高,最好可以快取下所有表的定義。【除非有上萬張表】
配置修改後的生效與確認
了解了基礎配置,修改了配置檔案。還需要關注配置的生效問題。
有的動態配置修改之後就馬上生效。有的全域性配置需要重啟才能生效。systemctl restart mysqld
重啟後,還需要獲取變數值進行確認,是否配置變數符合預期。
如何確認mysql的配置/狀態?
1、show global status 及 show status
檢視資料庫當前的狀態引數。(確認當前運**況)
2、show variables
檢視資料庫的配置引數。(也可直接進行過濾搜尋,確認預設配置值)
【ps:1和2都可通過where等語句進行篩選過濾。比如:show variables where variable_name like 'inno%pool%size%';
【或者說show語句本質也是在查資料庫。只不過是描述資料庫本身的資料
3、[shell]mysqladmin extended-status -ri60
每60秒檢視狀態變數的增值
具體可參考:
4、status
檢視mysql基礎資訊,包括版本,字符集,socket,執行緒數等。
自己在學習過程中,遇到的其他問題
0、yum安裝mysql的步驟
首先是獲取rpm包,通過如下兩個連線均可。檔名類似這樣mysql57-community-release-el7-3.noarch.rpm。
隨後rpm -ivh ***.rpm匯入包,yum makecache生成快取。最後yum install -y mysql-community-.x86_64即可完成安裝。(一般來說,這4個元件就足夠了。)
1、yum安裝mysql後,初次登入和密碼問題
首先確認/etc/my.cnf配置,確認err-log的配置。(一般預設是/var/log/mysqld.log)然後檢視錯誤日誌,即可發現臨時密碼。再使用sudo mysql -uroot -p'tmp_passwd'即可登入。
參考:5.7.6之後:alter user user() identified by 'newpasswd';
2、[小結]如何修改配置?修改之後何時生效?如何確認修改後的值是否正確?修改配置:通過show variables where *** 確認變數當前數值,確認修改變數是否是動態生效。修改mysql配置檔案並儲存(一般是/etc/my.cnf)
何時生效?:動態變數即時生效,全域性變數重啟生效[對之前的會話和當前會話都不生效],會話變數不確定(?待確認)
如何確認?:也可通過show variables和show status加上where等語句進行篩選(前者為配置變數,後者為當前的狀態),確認配置變數是否符合預期。(比如show variables where variable_name = 'innodb_buffer_pool_size';)
3、mysql內部的help
連線上mysql命令列之後,可以方便的使用help查詢不確定的命令。比如help create檢視可以建立什麼,help create database確認怎麼建立新庫的語法。
建立資料庫表的方法也不難:create table test (
列名 資料型別 限制,
id integer primary key,
4、其他小問題可以通過select database();和status;來確認,自己當前在哪個資料庫。
innodb_flush_method = o_direct這裡是字母o不是數字0
小結本文主要講述了mysql配置的基礎知識,包括配置檔案的位置、配置項的分段([mysqld])、作用域、還有配置變數的查詢及當前狀態變數確認。
而且對少量配置變數進行了解釋。
更多配置項的解釋都可通過官網確認。
mysql簡單配置檔案 MySQL配置檔案
mysql配置檔案 在windows下是my.ini,而在linux下是my.cnf。基本引數 port 3306 埠號 server id 1 basedir c program files mysql mysql server 5.5 基準路徑,其他路徑都相對於這個路徑 datadir c pr...
mysql 配置檔案
max connections 針對所有的賬號所有的客戶端並行連線到mysql辦事的最大並行連線數。簡單說是指mysql辦事可以或許同時接管的最大並行連線數。1 1.25mb記憶體 max user connections 針對某乙個賬號的所有客戶端並行連線到mysql辦事的最大並行連線數。簡單說是...
Mysql 配置檔案
mysql安裝使用 initialize 初始化資料庫,如果想通過配置檔案修改引數,而未通過使用 defaults file filepath 指定配置檔案,則配置檔名一定要為 my.ini windows 或 my.cnf linux mysql缺省會讀取my.ini配置檔案 修改字元編碼為utf...