MySQL 配置基礎

MySQL做爲一種常見的數據庫管理系統(DBMS),其自身的各類配置項極大的影響了其性能。因此有必要進行了解和學習。html

配置學習資源途徑

我最近在看《高性能Mysql》,其中第8章講解了關於配置的不少事項,都值得了解和學習。固然,官網也是最新信息查閱的重要渠道。mysql

官網【可在5.1 TheMySQL Server找到配置解釋。可在5.4找到BinLog相關內容。 】

MySQL配置

配置文件位置:

通常來講,MySQL服務端配置文件的默認位置是:/etc/my.cnf 或者 /etc/mysql/my.cnf
【也能夠經過mysqld --verbose --help|grep -A 1 'Default option'確認配置文件的位置】nginx

和nginx相似,也能夠選擇分目錄進行include,便於管理總體配置結構。 (好比 !includedir /etc/my.cnf.d 而後在 my.conf.d目錄裏對不一樣的配置項分文件。

配置修改基礎:

一、mysql配置文件是分段的,要注意配置項放在了正確的段裏(好比服務器主要用 [mysqld] 這一段git

一、反作用: 一些配置項會產生反作用,臨時修改配置須要很是當心。(好比變動 query\_cache\_size當即刪除全部查詢的緩存,從新構建。
二、變量的值:變量不是越大越好,可能會致使內存交換或者超出地址空間。須要跟進狀況設定。

二、配置項有不一樣的做用域,有的是全局,有的是會話。其次,還有動態變量,可在運行時修改。【也就是說,大部分非動態變量須要重啓才能生效】
三、全局變量:修改後對當前會話及已存在的會話均不生效。可經過SHOW GLOBAL VARIABLES確認。
四、變量的單位:配置時要注意單位,命令行或者配置文件,可使用後綴指定單位(好比1M等,但要注意,使用SQL的SET指令時就不能使用單位
五、配置文件管理:最好使用git來進行版本管理,加上充足的註釋。能夠避免很多問題。sql

如何建立一個靠譜的MySQL配置?

一、一個好的配置,不是從學習配置項開始,也不是詢問怎麼設置或者怎麼修改,更不是觀察服務器行爲和詢問哪一個配置能夠提高性能。
【應該是從理解MySQL內核和行爲開始
二、保證基礎配置都正確(好比日誌路徑,緩存配置,端口號,數據庫存儲位置等。如非必要,儘可能使用默認配置。(默認配置經受過的測試是最多的。
三、優先進行語句優化等其餘優化,最後考慮修改配置項shell

一個最小配置示例

通常來講,選擇儘可能少的配置(或者說最小配置),如無必要,不用聲明(不聲明使用默認值)。數據庫

固然一些很是重要的配置項,即便使用默認配置,也最好聲明出來。(好比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

配置文件解釋:
一、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.多線程

    也可參考官網: https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html

二、MySQL配置項:

  • 線程緩存(thread_cache_size):
    [參數]thread_cache_size:能夠保持在緩存中的線程數。
    當關閉一個鏈接時,會將這個鏈接的線程放入緩存(若是緩存有空間)。下次能夠直接讀緩存,而非從新創建鏈接。
    [狀態]thread_cached:當前已經緩存了的線程數。
    [狀態]threads_created:每秒建立的新線程數,(若是每秒要建立不少線程,那須要考慮增長緩存大小
    [狀態]threads_connectd:當前正在鏈接中的線程數。
    線程緩存的配置和上述3個狀態高度相關。根據實際狀況判斷緩存應該配置多少。

    PS:靈活利用 SHOW STATUSSHOW VARIABLES 查看配置的值,查看當前狀態。
  • 表緩存:
    [參數]table_open_cache:若是[狀態]opened_tables很大,或者一直在增加。考慮增長這個參數。
    [參數]table_definition_cache:一般均可以配置的比較高,最好能夠緩存下全部表的定義。【除非有上萬張表】

配置修改後的生效與確認

瞭解了基礎配置,修改了配置文件。還須要關注配置的生效問題。
有的動態配置修改以後就立刻生效。有的全局配置須要重啓才能生效。systemctl restart mysqld
重啓後,還須要獲取變量值進行確認,是否配置變量符合預期。

如何確認MySQL的配置/狀態?

一、SHOW GLOBAL STATUSSHOW STATUS
查看數據庫當前的狀態參數。(確認當前運行狀況)
二、SHOW VARIABLES
查看數據庫的配置參數。(也可直接進行過濾搜索,確認默認配置值)
【PS:1和2均可經過WHERE等語句進行篩選過濾。好比:show variables where variable_name like 'inno%pool%size%';
【或者說SHOW語句本質也是在查數據庫。只不過是描述數據庫自己的數據

三、[shell]mysqladmin extended-status -ri60
每60秒查看狀態變量的增值
具體可參考:https://blog.csdn.net/demonson/article/details/80103204
四、STATUS
查看MySQL基礎信息,包括版本,字符集,socket,線程數等。

本身在學習過程當中,遇到的其餘問題

0、yum安裝mysql的步驟
首先是獲取rpm包,經過以下兩個鏈接都可。文件名相似這樣mysql57-community-release-el7-3.noarch.rpm
https://dev.mysql.com/downloads/repo/yum/
https://repo.mysql.com/
隨後rpm -ivh xxx.rpm導入包,yum makecache生成緩存。最後yum install -y mysql-community-{client,libs,common,server}.x86_64便可完成安裝。(通常來講,這4個組件就足夠了。)

一、yum安裝mysql後,初次登陸和密碼問題
首先確認/etc/my.cnf配置,確認err-log的配置。(通常默認是/var/log/mysqld.log)而後查看錯誤日誌,便可發現臨時密碼。再使用sudo mysql -uroot -p'tmp_passwd'便可登陸。
參考:https://www.cnblogs.com/array...
其次,臨時密碼不可用於長期登陸,必須修改後纔可進行更多操做。若是嘗試使用臨時密碼登錄後操做,會出現以下提示:You must reset your password using ALTER USER statement before executing this statement. 能夠根據mysql版本採起對應的語句進行密碼修改。

  • 5.7.6以前:SET PASSWORD = PASSWORD('Newpasswd');
  • 5.7.6以後:ALTER USER USER() IDENTIFIED BY 'Newpasswd';

參考:http://www.javashuo.com/article/p-khfpsuvt-nb.html

二、[小結]如何修改配置?修改以後什麼時候生效?如何確認修改後的值是否正確?

  • 修改配置:經過SHOW VARIABLES WHERE xxx 確認變量當前數值,確認修改變量是不是動態生效。修改MySQL配置文件並保存(通常是/etc/my.cnf
  • 什麼時候生效?:動態變量即時生效,全局變量重啓生效[對以前的會話和當前會話都不生效],會話變量不肯定(?待確認)
  • 如何確認?:也可經過SHOW VARIABLESSHOW STATUS加上WHERE等語句進行篩選(前者爲配置變量,後者爲當前的狀態),確認配置變量是否符合預期。(好比SHOW variables WHERE Variable_name = 'innodb_buffer_pool_size';

參考:https://blog.csdn.net/demonson/article/details/80103204

三、MySQL內部的help
鏈接上MySQL命令行以後,能夠方便的使用help查找不肯定的命令。好比help create查看能夠建立什麼,help create database確認怎麼建立新庫的語法。
建立數據庫表的方法也不難:

CREATE TABLE test (
列名  數據類型  限制,
id INTEGER PRIMARY KEY,
);

help相關參考:https://blog.csdn.net/woqutechteam/article/details/81115892

四、其餘小問題

小結

本文主要講述了MySQL配置的基礎知識,包括配置文件的位置、配置項的分段([mysqld])、做用域、還有配置變量的查詢及當前狀態變量確認。
並且對少許配置變量進行了解釋。
更多配置項的解釋均可經過官網確認。https://dev.mysql.com/doc/refman/5.7/en/

相關文章
相關標籤/搜索