Mysql 11配置项

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: <div class="markdown_views"><p>配置文件一般在/etc/my.cnf或者是/etc/mysql/my.cnf</p><p>语法:properties的语法,注意单词用-或_分割比如: <br>auto-increment-offset=5</p><p>分个类 <br>按照作用域,可以分为全局的也就是配置在配置文件中的,或者是会话的,就

配置文件一般在/etc/my.cnf或者是/etc/mysql/my.cnf

语法:properties的语法,注意单词用-或_分割比如:
auto-increment-offset=5

分个类
按照作用域,可以分为全局的也就是配置在配置文件中的,或者是会话的,就是连接中的
还可分为动态和静态的。 动态就是在运行期间可以改写的,这个要特别小心,因为有可能造成全局刷新和阻塞
语法:

SHOW variables like '%sort_buffer_size%';
//全局的:
SET GLOBAL sort_buffer_size = <value>;
SET @@global.sort_buffer_size := <value>;
// 会话的
SET @@sort_buffer_size := <value>;
SET @@ssession.sort_buffer_size := <value>;

对于value还有一个些其他的限制,比如
SET 不能用1M
配置文件不能用表达式。 这些需要注意。

innodb_buffer_pool_size

这个参数主要缓存innodb表的索引,数据,插入数据时的缓冲。
Mysql整体可用内存的70%-80%,太大了可能会占用操作系统内存,影响性能。
可以使用show engine innodb status;展示的

BUFFER POOL AND MEMORY

查看使用情况

事务日志

Created with Raphaël 2.1.0写事务日志日志缓冲区事务日志(循环连续写入)

数据被修改,先写日志缓冲区。 缓冲区满|每秒|事务提交, 缓冲区回写事务日志。
innodb_log_buffer_size 设置缓冲区大小。
设置原则:2-8M,一般满足一个小时的活动。活动大小:

show global status like '%Innodb_os_log_written%';

查看写入日志增量。 可以隔100计算,算两次差值。 单位为B。
最佳实践:3M

innodb_log_files_in_group 几个日志文件。默认2.一般不用改
innodb_log_file_size 日志文件大小。 又一个比较有用的参数。
官方建议 innodb_log_files_in_group * innodb_log_file_size = innodb_buffer_pool_size。
太大会使得恢复速度很慢
另外该值也没有要设置太大,跟checkpoint的频率有关(checkpoint是一个后台线程),会把事务日志中的数据写到数据文件中。
可以使用
show engine innodb status; 命令查看这部分:

LOG

Log sequence number 300 2512389215
Log flushed up to 300 2512389215
Last checkpoint at 300 2508134796
2512389215 - 2508134796 = 4m多。
有个官方推荐的公式(innodb_log_file_size*innodb_log_files_in_group(default 2))*0.75 = 4M
因为是测试环境所以没什么感觉,但实际上一般是几G才够用的。

innodb_flush_logs_at_trx_commit

0 缓冲写日志每秒一次
1 默认 最安全,每次提交写日志,且刷新(刷新到持久化存储)。
2 缓冲写日志每次提交时写,每秒一次刷新

上面缓冲写日志,实际上是从InnoDB的 缓存转移到操作系统的缓存
如果允许1秒的丢失的话,实际上是可以使用2的

并发配置

innodb_thread_concurrency 限制一次性可以有多少线程进入内核。
其值 = CPU数量 * 磁盘数量 * 2, 实际上小点效果会更好。

超过的线程会使用两阶段方式,先睡一定的微秒再尝试进入,如果还不能则进入队列。

一单进入内核那就有一定数量的tiket,下次可以直接进入内核。

innodb_commit_concurrency变量控制有多少个线程可以同一时间提交。

max_connection

防止攻击, 但是要设置足够大,免得正常业务被拒绝。

show variables like 'max_connections';
show global status like 'Max_used_connections';

观察Max_used__connections的值,能看到是否有时间点超过了最大值。

thread_cache_size

缓存线程的值,不用很大一般256就可以了

show global status like 'Threads_connected';
show global status like 'Threads_created';

如果Threads_created这个值很大或者一直增长,则需要增到配置了

table_cache_size

要足够大,避免需要重复解析打开表定义

show global status like 'Opened_tables';

这个值变化大,则需要增加

其他配置

read_only 在备库使用,强制备库不接受应用端来的变更请求
slave_net_timeout 备库连主库发现失败时间,默认一个小时,一般一分钟或更短。
innodb_autoinc_lock_mode 自增锁的模式

sort_buffer_size 8M
join_buffer_size 两个connection级别的参数,每次新的连接创建,太大可能占用太多内存,一般 2M

query_cache_size 查询缓存大小,因为会有锁,命中率等等问题。实际上用处并不是很大。一般32M

transaction_isolation 默认隔离级别。

key_buffer_size 索引缓冲区大小,可以大一点 512M

read_buffer_size查询操作缓冲区,排序时,会查一遍该缓冲区,避免磁盘读写,排序多的时候可以设置大一点, 一般4M

DBCP连接池的一些配置

  • initialSize 启动时创建的初始化连接数量
  • maxActive 连接池中可同时连接数据库的线程数。 默认8,一般20
  • maxIdle 最大空闲, 超过的会被回收。默认8,太小,可能造成回收创建太频繁
  • minIdle 最小空闲,少于会创建,默认0,可以稍微多一点,比如8
  • maxWait 没有可用连接时的阻塞时间,默认无现长,有可能无限挂起, 超时会抛异常。我们是30000
  • testOnBorrow=false 取得连接时是否验证,时间太长了有可能时效了如果不验证会为空
  • testWhileIdle=true 空闲时是否验证,这个要配合验证的sql.
  • timeBetweenEvictionRunsMillis=300000 多久启动过期清理线程
  • numTestsPerEvictionRun=10 每次清理几个
  • minEvictableIdleTimeMillis=300000 多久算是过期的
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
关系型数据库 MySQL Linux
学习MySQL系列:2. MySQL配置项和配置文件
学习MySQL系列:2. MySQL配置项和配置文件
275 1
|
存储 缓存 网络协议
安装MySQL后,需要调整的10个性能配置项
本文翻译自 Percona 官方博客,适用于 MySQL 5.6 及 5.7 版本。 作者:Stephane Combaudon 原文: https://www.percona.com/blog/2014/01/28/10-mysql-performance-tuning-settings-after-installation/
151 0
|
缓存 关系型数据库 Java
|
关系型数据库 MySQL 数据库
影响LIMIT子句使用的一个mysql配置项
select FOUND_ROWS()总是返回上一次select所返回的行数。它的结果受到上一次select中是否使用SQL_CALC_FOUND_ROWS的影响测试如下:1.运行语句:select SQL_CALC_FOUND_ROWS * from penalties where amount>=20 limit 2然后运行:select FOUND_ROWS();返回的行数是:42.
1051 0
|
23天前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
10天前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
81 42
|
1天前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
40 25
|
28天前
|
缓存 关系型数据库 MySQL
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
220 0
|
2月前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
72 3