mysql8在生產環境中的配置


一,配置文件的位置

[root@yjweb ~]# ll /etc/my.cnf
-rw-r--r-- 1 root root 935 Mar 11 16:52 /etc/my.cnf

說明:通常我們都會使用/etc/my.cnf這個文件

 

說明:劉宏締的架構森林是一個專注架構的博客,地址:https://www.cnblogs.com/architectforest

         對應的源碼可以訪問這里獲取: https://github.com/liuhongdi/

 說明:作者:劉宏締 郵箱: 371125307@qq.com

 

二,my.cnf中的配置項:慢查詢日志 

#把未使用到索引的sql記錄到慢查詢日志

log_queries_not_using_indexes  = 1

 

#是否打開慢查詢sql日志

slow_query_log                 = 1

 

#慢查詢sql日志的文件地址

slow_query_log_file            = /data/mysql/log/mysql-slow.log

 

#慢查詢執行的秒數,超過這個值則會被記錄到慢查詢日志

long_query_time = 1

 

三,my.cnf中的配置項:運行實例相關

#Mysql服務實例的唯一編號 每個mysql服務實例Id需唯一

server-id = 1

 

#服務端口號 默認3306

port = 3306

 

#socket文件的路徑

socket=/data/mysql/var/mysql.sock

 

#pid文件的路徑

pid-file=/data/mysql/var/mysqld.pid

 

四,my.cnf中的配置項:目錄

#mysql安裝根目錄

basedir=/usr/local/soft/mysql

 

#mysql數據文件所在目錄

datadir=/data/mysql/data

 

五,my.cnf中的配置項:字符集

#數據庫默認字符集,注意不要再用utf8了

character-set-server = utf8mb4

 

#數據庫字符集對應一些排序規則,要屬於character-set-server對應值的集合內

collation-server = utf8mb4_general_ci

 

#設置client連接mysql時的字符集,防止亂碼

init_connect='SET NAMES utf8mb4'

 

六,my.cnf中的配置項:二進制日志

#二進制日志文件

log-bin = /data/mysql/binlog/mysql-bin

 

#mysql binlog日志文件保存的過期時間,過期后自動刪除

#默認值是0,不限制,這樣會占用空間太多

expire_logs_days = 365

 

#限制單個文件大小,默認大小:1,073,741,824,即1G,太大了

max_binlog_size = 100M

 

七,my.cnf中的配置項:錯誤日志

#數據庫錯誤日志文件

log_error=/data/mysql/log/mysqld.log

 

八,my.cnf中的配置項:操作用戶

user=mysql

 

九,my.cnf中的配置項:超時

#MySQL連接閑置超過一定時間后(單位:秒)將會被強行關閉  MySQL默認的wait_timeout 值為8個小時,

interactive_timeout參數需要同時配置才能生效

interactive_timeout = 1800
wait_timeout = 1800

 

十,my.cnf中的配置項:禁用域名的解析

skip_name_resolve = 1

說明:dns慢的情況下會影響性能

 

十一,my.cnf中的配置項:innodb是否為每個表使用獨立的表空間文件

innodb_file_per_table = 1

 

說明:這個參數在5.6以后已經默認開啟了

開啟該參數的時候,Innodb將每個新創建的表的數據及索引存儲在一個獨立的.ibd文件里,

而不是系統的表空間。

 

十二,my.cnf中的配置項:innodb緩沖池的大小設置

1,innodb_buffer_pool_size的默認大小是:128M

   innodb_buffer_pool_chunk_size   定義了buffer中每個chunk的大小,
   innodb_buffer_pool_instances    定義了buffer中chunk的數量

 

2,緩沖池大小必須始終等於或者是innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances的倍數

    否則mysql會自動調整為相應的倍數

 

3,計算緩沖池大小的公式:

Performance = innodb_buffer_pool_reads / innodb_buffer_pool_read_requests * 100

 

這個結果是指從磁盤上讀取數據的百分比

說明:  innodb_buffer_pool_reads  是InnoDB 進行邏輯讀取時無法從緩沖池中獲取而執行單頁讀取的次數

          innodb_buffer_pool_read_requests  是 InnoDB 完成的邏輯讀請求數

 

4,查看兩個值:innodb_buffer_pool_reads/innodb_buffer_pool_read_requests 的大小的sql:

show status like 'innodb_buffer_pool_read%'

5,計算buffer pool的命中率: 

InnoDB buffer pool 命中率 = innodb_buffer_pool_read_requests / (innodb_buffer_pool_read_requests + innodb_buffer_pool_reads ) * 100

 

如果低於99%,可以增加innodb_buffer_pool_size

6,innodb_buffer_pool_size這個值的大小不要超過物理內存的50%

 

十三, my.cnf中的配置項:連接限制之最大並發連接數

1,參數設置

max_connections = 1024

 

說明:根據自己的運行情況設置,

      過小會影響連接的數量,報Too many connections錯誤,

      過大會導致服務資源用完無響應

 

2,查看當前的max_connections設置值

mysql> SHOW VARIABLES LIKE '%max_connections%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| extra_max_connections | 1     |
| max_connections       | 1000  |
+-----------------------+-------+
2 rows in set (0.00 sec)

 

3,查看Max_used_connections狀態值

mysql> SHOW GLOBAL STATUS LIKE 'Max_used_connections';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| Max_used_connections | 243   |
+----------------------+-------+
1 row in set (0.00 sec)

 

說明:Max_used_connections 是從這次mysql服務啟動到現在,同一時刻並行連接數的最大值,可以參考這個值去配置max_connections,

通常可大於等於Max_used_connections的值

 

4,官方文檔地址:

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_max_connections

可以看到最大值不能超過100000 

 

十四,連接限制之每用戶最大並發連接數  max_user_connections

1,查看當前的設置值 

mysql> SHOW VARIABLES LIKE '%max_user_connections%';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| max_user_connections | 1990  |
+----------------------+-------+
1 row in set (0.00 sec)

 

2,max_user_connections表示的是每個用戶的最大連接數,

   注意此處的用戶是以“用戶名+主機名”為單位進行區分

3,如何設置:

如果有3個用戶,max_connections=1000
建議值:     max_connections/3 * 2  約等於 700

 

十五,連接限制之最大錯誤連接數max_connect_errors

1,查看當前的設置值

mysql> SHOW VARIABLES LIKE '%max_connect_errors%';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_connect_errors | 1000000 |
+--------------------+---------+
1 row in set (0.00 sec)

 

2,說明:如果錯誤連接達到該變量設置值, MySQL會阻止連接,直到

             使用 FLUSH HOSTS命令或者 mysqladmin flush-hosts,MySQL才會解除阻止操作

 

3,什么是錯誤連接?

MySQL有個參數connect_timeout,該變量默認是10秒,它是MySQL服務端進程mysqld等待連接建立完成的時間,單位為秒

MySQL客戶端與數據庫建立連接需要發起三次握手協議,正常情況下,這個時間非常短,

但是一旦網絡異常,網絡超時等因素出現,就會導致這個握手協議無法完成。

如果超過connect_timeout時間,仍然無法完成協議握手,MySQL客戶端會收到異常,

異常消息類似於: Lost connection to MySQL server at 'XXX', system error: errno.

 

 

4,  如何把被關閉連接的host釋放出來?

Mysql> FLUSH HOSTS;

 

5,設置:如果業務服務器和數據庫服務器之間網絡不穩定,經常出現連接超時之類的情況,則此值可以加大,

            如果只是在局域網中,網絡情況良好,此值可以采用默認值100,或增加到1000

 

6,這個統計的錯誤數量記錄在哪里可查看?

mysql> use performance_schema;
mysql> select * from host_cache;

 

SUM_CONNECT_ERRORS   這個字段記錄的就是連接錯誤的數量

 

7,官方文檔地址:

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_max_connect_errors

 

十六,my.cnf中的配置項:最大允許的包 max_allowed_packet

max_allowed_packet            = 16M

 

說明:這個默認值是64M,即67108864

但生產環境中很少會這么大的包,建議16M或更低一些

說明:導入數據時,如果sql文件大於這個值,會報過小的提示,

         Packet for query is too large
或     Packet bigger than max_allowed_packet

          可以臨時調整這個值,使用如下兩條sql

set global max_allowed_packet = 2*1024*10*10;
show global variables like 'max_allowed_packet';

 

說明: 命令行修改時,max_allowed_packet的單位為字節,不能用M、G,

            只能這算成字節數設置。

           配置文件修改才允許設置M、G單位

 

十七,my.cnf中的配置項:數據安全:innodb_flush_log_at_trx_commit 

innodb_flush_log_at_trx_commit = 1

1,innodb_flush_log_at_trx_commit的三個取值:

0,   每秒寫一次log,並flush到磁盤

1,   每次事務提交時,寫log,同時flush到磁盤

2,   每次事務提交時寫log,每秒flush一次到磁盤

 

2,說明:

1最安全,速度最慢

0,2速度較快,但有一定丟失數據的風險

mysql給出的默認值也是1

 

十八,my.cnf中的配置項:客戶端

[client]

#服務端口號 默認3306

port = 3306

#socket連接文件

socket = /data/mysql/var/mysql.sock 

 

十九,說明

1,general log   這個配置項是查詢日志,默認值是off,

     這個不建議在生產環境中打開

2,慢查詢在生產環境中打開時,

     應當注意檢查其內容,

     對查詢過慢的sql處理

二十,查看當前的mysql版本

[root@yjweb mysql]# /usr/local/soft/mysql/bin/mysqld -V
/usr/local/soft/mysql/bin/mysqld  Ver 8.0.19 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM