MySQL-DB参数、内存、I/O、安全等相关参数设置
文章目錄
- 生猛干貨
- 官方文檔
- 服務器參數介紹
- MySQL獲取信息配置領
- MySQL配置參數的作用域
- 內存配置相關參數
- I/O相關配置參數
- Innodb I/O 相關的配置
- MyISAM I/O 相關的配置
- 安全相關配置參數
- 其它常用配置參數
- 小結
- 搞定MySQL
生猛干貨
帶你搞定MySQL實戰,輕松對應海量業務處理及高并發需求,從容應對大場面試
官方文檔
https://dev.mysql.com/doc/
如果英文不好的話,可以參考 searchdoc 翻譯的中文版本
http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/index.com.coder114.cn.html
服務器參數介紹
MySQL獲取信息配置領
1) 命令行
mysqld_safe --datadir=/xxx/xxxx2) 配置文件
持久化的配置都要寫到配置文件中.
MySQL讀取的配置文件可以通過如下命令來查看
[root@artisan mysql]# mysqld --help --verbose |grep -A 1 'Default options' Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf [root@artisan mysql]#首先從/etc/my.cnf 讀取,逐步往后找,后面的覆蓋前面的。
MySQL配置參數的作用域
-
全局參數
set global 參數名=參數值; set @@global.參數名 := 參數值; --- 兩種方式都可以需要在MySQL客戶端中執行
-
會話參數
set [session] 參數名=參數值;set @@session.參數名 := 參數值; --- 兩種方式都可以操作下看看
[root@artisan ~]# mysql -u root -p Enter password: .....mysql> # 這兩個參數要一起設置,否則會取大的那個為準。 mysql> show variables where variable_name = 'wait_timeout' or variable_name = 'interactive_timeout'; +---------------------+-------+ | Variable_name | Value | +---------------------+-------+ | interactive_timeout | 28800 | | wait_timeout | 28800 | +---------------------+-------+ 2 rows in set (0.00 sec)mysql> set global wait_timeout=3600; set interactive_timeout=3600; Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)mysql>設置了global 參數,有些已經登錄的會話,要退出重新登錄才生效。
內存配置相關參數
-
確定可以使用的內存的上限 ,不要超過服務器的內存
-
32位的操作系統,能使用的不足4G,這個也需要注意
-
確定MySQL每個連接使用的內存
sort_buffer_size: 舉個例子,如果配置的過大,比如100M, 這個時候如果有10個連接過來,那就要分配1G的內存。。。
join_buffer_size
read_buffer_size
read_rnd_buffer_size這4個參數都是給每個線程分配的
-
如何為緩存池分配內存
Innodb_buffer_pool_size : 確保分配足夠多的內存
key_buffer_size
需根據實際情況調整
I/O相關配置參數
這部分參數決定了MySQL如何同步緩沖池中的數據到緩存。
Innodb I/O 相關的配置
-
Innodb_log_file_size 單個事務文件的大
-
Innodb_log_files_in_group 事務日志文件的個數
-
Innodb_log_buffer_size 緩沖區的大小
事務日志中大小 Innodb_log_file_size * Innodb_Log_files_in_group , 循環使用。 先寫到緩沖區,Innodb_log_buffer_size 指定緩沖區的大小,不用設置太大(32M-128M就夠了),默認1秒刷一次,然后再寫到日志。
-
Innodb_flush_log_at_trx_commit : 刷日志的頻率
0: 每秒進行一次log寫入cache,并flush log到磁盤
1[默認]:在每次事務提交執行log寫入cache,并flush log到磁盤
2[建議]:在每次事務提交執行log寫入cache,每秒執行一次flush log到磁盤 -
Innodb_flush_method = O_DIRECT (建議值)
-
Innodb_file_per_table = 1 (啟用表空間)
-
Innodb_doublewrite = 1 (啟用雙寫緩存)
MyISAM I/O 相關的配置
MySQL的系統表,使用了MyISAM存儲引擎,所以也是需要了解的。
-
delay_key_write
OFF: 每次寫操作刷新鍵緩沖中的臟塊到磁盤
ON: 只對在鍵表時指定了delay_key_write選項的表時使用延遲刷新
ALL:對所有MyISAM表都使用延遲鍵寫入
安全相關配置參數
-
expire_logs_days : 指定自動清理binlog的天數,如果開啟了binlog,最好配置這個參數,防止磁盤被占滿
-
max_allowed_packet : 控制MySQL可以接手的包的大小 , 主從節點最好一致,否則容易同步失敗
-
skip_name_resolve: 禁用DNS查找
-
sysdate_is_now :確保sysdate()返回確定性日志
-
read_only: 禁止非super權限的用戶寫權限, 從節點建議開啟。
-
skip_slave_start : 禁用slave自動恢復。 從節點建議開啟
-
sql_mode :設置MySQL所使用的SQL模式
可選項: strict_trans_tables、 no_engine_subtitution、 no_zero_date 、no_zero_in_date、 only_full_group_by
其它常用配置參數
- sync_binlog :控制MySQL如何向磁盤刷新binlog , 默認為0 。 建議設置為1
- tmp_table_size 和 max_heap_table_size 控制內存臨時表的大小 ,建議這兩個值設置一樣大,超過最大內存后,將轉化為磁盤存儲
- max_connections : 控制允許的最大連接數,默認100, 建議2000 ,根據應用調整。
小結
說了這么多參數配置, 可不要指望修改一兩個參數,性能就能有質的提升。
首先應該聚焦于 數據結構 和 SQL的優化,實在沒有優化的空間了,再考慮這些。
優化的順序
由上到下優化
搞定MySQL
總結
以上是生活随笔為你收集整理的MySQL-DB参数、内存、I/O、安全等相关参数设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL-体系结构以及常用存储引擎My
- 下一篇: MySQL-日志二进制日志binlog初