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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
5月前
|
关系型数据库 MySQL 分布式数据库
安全可靠的PolarDB V2.0 (兼容MySQL)产品能力及应用场景
PolarDB分布式轻量版采用软件输出方式,能够部署在您的自主环境中。PolarDB分布式轻量版保留并承载了云原生数据库PolarDB分布式版技术团队深厚的内核优化成果,在保持高性能的同时,显著降低成本。
627 140
|
3月前
|
SQL 存储 关系型数据库
MySQL内存引擎:Memory存储引擎的适用场景
MySQL Memory存储引擎将数据存储在内存中,提供极速读写性能,适用于会话存储、临时数据处理、高速缓存和实时统计等场景。但其数据在服务器重启后会丢失,不适合持久化存储、大容量数据及高并发写入场景。本文深入解析其特性、原理、适用场景与限制,并提供性能优化技巧及替代方案比较,助你合理利用这一“内存闪电”。
|
3月前
|
存储 缓存 监控
MySQL服务器配置优化:my.cnf参数调优指南
本文深入解析了MySQL核心配置参数及性能优化技巧,涵盖内存结构、调优原则、存储引擎优化、查询性能优化等内容,通过实战案例帮助读者构建高性能MySQL服务器配置,解决常见的性能瓶颈问题。
|
4月前
|
NoSQL 关系型数据库 MySQL
在Visual Studio Code中设置MySQL源码调试环境
以上步骤涵盖了在VS Code中设置MySQL源码调试环境的主要过程,是一个相对高级的任务,旨在为希望建立强大开发和调试环境的开发者提供指引。遵循这些步骤,将可以利用VS Code强大的编辑和调试功能来深入理解和改进MySQL数据库的底层实现。
394 0
|
7月前
|
Java 关系型数据库 MySQL
在Linux操作系统上设置JDK、Tomcat、MySQL以及J2EE后端接口的部署步骤
让我们总结一下,给你的Linux操作系统装备上最强的军队,需要先后装备好JDK的弓箭,布置好Tomcat的阵地,再把MySQL的物资原料准备好,最后部署好J2EE攻城车,那就准备好进军吧,你的Linux军团,无人可挡!
173 18
|
9月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】崖山有哪些内存参数,Share Pool各个参数之间有什么关系
【YashanDB知识库】崖山有哪些内存参数,Share Pool各个参数之间有什么关系
【YashanDB知识库】崖山有哪些内存参数,Share Pool各个参数之间有什么关系
|
10月前
|
存储 IDE Java
java设置栈内存大小
在Java应用中合理设置栈内存大小是确保程序稳定性和性能的重要措施。通过JVM参数 `-Xss`,可以灵活调整栈内存大小,以适应不同的应用场景。本文介绍了设置栈内存大小的方法、应用场景和注意事项,希望能帮助开发者更好地管理Java应用的内存资源。
550 4
|
10月前
|
SQL Oracle 关系型数据库
【YashanDB 知识库】崖山有哪些内存参数,Share Pool 各个参数之间有什么关系
在使用YashanDB时,用户常对内存参数配置有疑问,尤其是23.2及以上版本中,如SQL_POOL_SIZE+DICTIONARY_CACHE_SIZE超100报错,影响跑批性能。主要内存参数包括SHARE_POOL_SIZE、SQL_POOL_SIZE、DICTIONARY_CACHE_SIZE等,需合理配置以优化性能。SHARE POOL内含多个POOL,可动态调整。具体配置方法及观察使用情况的方式详见官网文档。
|
运维 监控 Ubuntu
【运维】如何在Ubuntu中设置一个内存守护进程来确保内存不会溢出
通过设置内存守护进程,可以有效监控和管理系统内存使用情况,防止内存溢出带来的系统崩溃和服务中断。本文介绍了如何在Ubuntu中编写和配置内存守护脚本,并将其设置为systemd服务。通过这种方式,可以在内存使用超过设定阈值时自动采取措施,确保系统稳定运行。
450 4
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
1169 7

推荐镜像

更多