MySQL-DB参数、内存、I/O、安全等相关参数设置

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
日志服务 SLS,月写入数据量 50GB 1个月
简介: MySQL-DB参数、内存、I/O、安全等相关参数设置

20200129003012618.png

生猛干货

带你搞定MySQL实战,轻松对应海量业务处理及高并发需求,从容应对大场面试


官方文档

https://dev.mysql.com/doc/



20200131202811239.png

如果英文不好的话,可以参考 searchdoc 翻译的中文版本

http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/index.com.coder114.cn.html



20200131203226295.png


服务器参数介绍

MySQL获取信息配置领

1) 命令行

mysqld_safe --datadir=/xxx/xxxx


2) 配置文件

持久化的配置都要写到配置文件中.

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的优化,实在没有优化的空间了,再考虑这些。

优化的顺序

  1. 数据库结构设计和SQL语句,最容易看到成果
  2. 数据库存储引擎的选择和参数配置
  3. 系统优化
  4. 硬件升级

由上到下优化


搞定MySQL


https://artisan.blog.csdn.net/article/details/104116743?spm=1001.2014.3001.5502

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
14天前
|
缓存 监控 关系型数据库
如何根据监控结果调整 MySQL 数据库的参数以提高性能?
【10月更文挑战第28天】根据MySQL数据库的监控结果来调整参数以提高性能,需要综合考虑多个方面的因素
54 1
|
18天前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
64 3
|
18天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
60 2
|
1月前
|
关系型数据库 MySQL 数据库连接
MySQL 表整行数据唯一性设置
MySQL 表整行数据唯一性设置
51 2
|
1月前
|
关系型数据库 MySQL 数据库
使用Docker部署的MySQL数据库如何设置忽略表名大小写?
【10月更文挑战第1天】使用Docker部署的MySQL数据库如何设置忽略表名大小写?
136 1
|
1月前
|
druid 关系型数据库 MySQL
开发指南048-mysql设置
如果链接的是mysql设置,需要做如下配置
|
1月前
|
缓存 监控 关系型数据库
如何查看MySQL使用的内存
如何查看MySQL使用的内存
111 1
|
1月前
|
存储 缓存 监控
深入了解MySQL内存管理:如何查看MySQL使用的内存
深入了解MySQL内存管理:如何查看MySQL使用的内存
307 1
|
1月前
|
SQL 关系型数据库 MySQL
数据库:MYSQL参数max_allowed_packet 介绍
数据库:MYSQL参数max_allowed_packet 介绍
60 2
|
1月前
|
SQL 监控 关系型数据库
如何查看MySQL使用的内存
综合运用上述方法,您可以全方位地监控和管理MySQL的内存使用。从简单查看配置到深入分析实时内存占用,每种方法都有其适用场景和优势。定期检查和调整MySQL的内存配置,对于维持数据库性能和稳定性至关重要。
239 0