深入探讨 MySQL 配置与优化:从零到生产环境的最佳实践20241112
深入探讨 MySQL 配置与优化:从零到生产环境的最佳实践
引言
MySQL 是全球最受欢迎的开源关系型数据库之一,其高性能、灵活性和广泛的社区支持使其成为无数开发者的首选。然而,部署一台高效、稳定的 MySQL 实例并非易事。本文将结合一个实际场景,深入探讨 MySQL 从安装到配置、优化的全过程,并分享可行的解决方案与最佳实践。
为什么关注 MySQL 配置?
MySQL 的性能很大程度上依赖于其配置文件(my.cnf)。正确配置 MySQL 能显著提高查询性能,降低硬件资源的消耗;而不当配置则可能导致性能瓶颈,甚至系统崩溃。通过优化 my.cnf 和相关参数,可以有效提升数据库的整体表现。
核心观点
- 精确配置是性能的基石:通过调整 my.cnf 参数,实现性能优化和稳定性增强。
- 监控和调优是必要的闭环:持续监控性能指标,并根据业务需求动态调整。
- 防火墙和权限管理是第一道防线:保障数据库的安全性同样重要。
配置文件的重要性:实例解析
以下是一个经过优化的 my.cnf 示例,包含了多种实用配置,并适配不同的生产环境需求。
完整的 my.cnf 配置
[client]
port = 13306
socket = /data/mysql/mysql.sock[mysqld]
port = 13306
bind-address = 0.0.0.0
socket = /data/mysql/mysql.sock
datadir = /data/mysql
default_storage_engine = InnoDB
log-error = /var/log/mysqld.logperformance_schema = ON
performance_schema_max_table_instances = 1000
performance_schema_instrument = 'statement/%=ON'
table_definition_cache = 400
skip-external-locking
key_buffer_size = 64M
max_allowed_packet = 64M
table_open_cache = 1024
sort_buffer_size = 4M
net_buffer_length = 8K
read_buffer_size = 4M
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 64M
thread_cache_size = 256
tmp_table_size = 256M
max_heap_table_size = 256M
default_authentication_plugin = mysql_native_password
lower_case_table_names = 1
sql_mode = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
explicit_defaults_for_timestamp = true
skip-name-resolve
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535log-bin = mysql-bin
binlog_format = ROW
binlog_expire_logs_seconds = 604800
slow_query_log = 1
slow-query-log-file = /data/mysql/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes = 1innodb_data_home_dir = /data/mysql
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /data/mysql
innodb_buffer_pool_size = 6G
innodb_redo_log_capacity = 1G
innodb_flush_log_at_trx_commit = 2
innodb_lock_wait_timeout = 50
innodb_max_dirty_pages_pct = 80
innodb_read_io_threads = 8
innodb_write_io_threads = 8[mysqldump]
quick
max_allowed_packet = 64M[mysql]
no-auto-rehash[myisamchk]
key_buffer_size = 64M
sort_buffer_size = 4M
read_buffer = 4M
write_buffer = 4M[mysqlhotcopy]
interactive-timeout
关键配置详解
1. 网络连接配置
port = 13306
bind-address = 0.0.0.0
- 非默认端口 13306 提升安全性,防止简单扫描攻击。
- bind-address = 0.0.0.0 允许所有主机访问,适用于需要远程连接的场景;但建议在生产环境中限制为特定 IP。
2. 日志管理
log-error = /var/log/mysqld.log
slow_query_log = 1
slow-query-log-file = /data/mysql/mysql-slow.log
- 错误日志帮助快速定位问题。
- 慢查询日志记录执行时间超过 2 秒的查询,为 SQL 优化提供依据。
3. 存储引擎优化
default_storage_engine = InnoDB
innodb_buffer_pool_size = 6G
innodb_flush_log_at_trx_commit = 2
- InnoDB 是首选存储引擎,具有事务支持和崩溃恢复能力。
- innodb_buffer_pool_size:设置为物理内存的 50%-70%,缓存数据和索引,减少磁盘 I/O。
- innodb_flush_log_at_trx_commit:设置为 2,在数据持久性和写入性能之间取得平衡。
4. 二进制日志
log-bin = mysql-bin
binlog_format = ROW
- 二进制日志记录所有写操作,支持数据恢复和主从复制。
- ROW 模式记录行级变更,更精确,但会消耗更多磁盘空间。
5. 连接与并发管理
max_connections = 500
thread_cache_size = 256
• 高并发场景下,max_connections 和 thread_cache_size 确保高效连接处理。
• 结合实际流量调整连接数,避免资源过度占用。
6. 性能模式
performance_schema = ON
- 开启 performance_schema 提供丰富的性能监控数据,适用于调优阶段。
7. 跳过 DNS 解析
skip-name-resolve
- 禁用 DNS 解析,加速连接建立,尤其适用于低延迟的高并发环境。
常见问题与解决方案
1. 日志文件为空
- 检查 log-error 参数路径。
- 确保日志文件权限正确:
sudo chown mysql:mysql /var/log/mysqld.log
sudo chmod 640 /var/log/mysqld.log
2. 远程连接失败
- 检查防火墙规则:
sudo firewall-cmd --permanent --add-port=13306/tcp
sudo firewall-cmd --reload
3. 用户权限问题
- 确保远程用户有权限访问:
GRANT ALL PRIVILEGES ON *.* TO 'mysqluser'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
结语
MySQL 的配置和优化是一门艺术,合理的配置可以最大化硬件资源的利用率,并确保数据库的稳定性与性能。在实际应用中,建议根据业务特点动态调整配置,并借助性能监控工具不断优化。
本文的内容为您提供了一个从入门到进阶的全面指导,希望能帮助您在工作中轻松驾驭 MySQL。如果您有任何问题或建议,欢迎留言讨论!
相关文章:
深入探讨 MySQL 配置与优化:从零到生产环境的最佳实践20241112
深入探讨 MySQL 配置与优化:从零到生产环境的最佳实践 引言 MySQL 是全球最受欢迎的开源关系型数据库之一,其高性能、灵活性和广泛的社区支持使其成为无数开发者的首选。然而,部署一台高效、稳定的 MySQL 实例并非易事。本文将结合一个实际…...
Java-Redisson分布式锁+自定义注解+AOP的方式来实现后台防止重复请求扩展
1. 添加依赖 首先,在项目的pom.xml文件中添加Redisson和Spring AOP的相关依赖: <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.16.8</version> </dependency> <dependency…...
Java 全栈知识体系
包含: Java 基础, Java 部分源码, JVM, Spring, Spring Boot, Spring Cloud, 数据库原理, MySQL, ElasticSearch, MongoDB, Docker, k8s, CI&CD, Linux, DevOps, 分布式, 中间件, 开发工具, Git, IDE, 源码阅读,读书笔记, 开源项目......
树状数组+概率论,ABC380G - Another Shuffle Window
目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 G - Another Shuffle Window 二、解题报告 1、思路分析 不难用树状数组计…...
机器学习day1-数据集
机器学习 一、机器学习 1.定义 让计算机在数据中学习规律并根据得到的规律对未来进行预测。 2.发展史 19世纪50年代:图灵测试提出、塞缪尔开发的西洋跳棋程序,标志着机器学习正式进入发展期 19世纪80年代:神经网络反向传播(…...
【Golang】——Gin 框架中的路由与请求处理
文章目录 1. 路由基础1.1 什么是路由?1.2 Gin 中的路由概述 2. 创建简单路由2.1 基本路由定义2.2 不同请求方法的路由 3. 路由参数3.1 路径参数3.2 查询参数 4. 路由分组4.1 为什么使用路由分组?4.2 路由分组示例 5. 请求处理与响应5.1 Gin 中的 Context…...
nuxt3添加wowjs动效
1、安装wowjs pnpm i wowjs1.1.32、node_modules复制wowjs代码 路径/node_modules/wowjs/dist/wow.js。不知道路径则查看node_modules/wowjs/package.json里面的main选项 2.1、在public文件夹创建wowjs.js文件 /public/wowjs.js export default (callthis) > { // !!// 这是…...
我们是如何实现 TiDB Cloud Serverless 的 - 成本篇
作者: shiyuhang0 原文来源: https://tidb.net/blog/fbedeea4 背景 Serverless 数据库是云原生时代的产物,它提供全托管,按需付费,自动弹性的云数据库服务,让客户免于繁重的数据库运维工作。关于 Serve…...
PCL算法汇总
参考 【2024最新版】PCL点云处理算法汇总(C长期更新版)_pcl点云聚类c-CSDN博客...
sql注入之二次注入(sqlilabs-less24)
二阶注入(Second-Order Injection)是一种特殊的 SQL 注入攻击,通常发生在用户输入的数据首先被存储在数据库中,然后在后续的操作中被使用时,触发了注入漏洞。与传统的 SQL 注入(直接注入)不同&a…...
Android compose 软键盘 遮挡对话框中TextField 输入框
在AlertDialog对话框中含有TextField输入框时,弹出软件盘会遮挡输入框 解决1: 在AndroidManifest.xml的 MainActivity中添加如下 android:windowSoftInputMode"adjustResize" 然后AlertDialog 中的modify. modify.windowInsetsP…...
spring-data-elasticsearch 3.2.4 实现桶bucket排序去重,实现指定字段的聚合搜索
一、背景 es索引有一个文档CourseIndex,下面是示意: creatorIdgradesubjectnameno1002270英语听力课程一N00232DS91004380数学口算课程N00209DK71003480物理竞赛课程N00642XS21002280英语听力课程二N00432WS31002290英语听力课程三N002312DP5 在搜索的时候&#…...
【项目开发】分析六种常用软件架构
未经许可,不得转载。 文章目录 软件架构核心内容设计原则分层架构常见层次划分优缺点应用场景事件驱动架构核心组件优缺点应用场景微核架构核心概念优缺点应用场景微服务架构核心组件设计与实施优缺点应用场景云架构云架构模式优缺点应用场景软件架构 软件架构是指一个软件系…...
算法和程序的区别
算法(Algorithm)和程序(Program)是计算机科学中两个密切相关但不同的概念。让我们通过以下几个方面来比较它们: ### 1. 设计 vs 实现 - **算法设计(Algorithm Design)**: - **定…...
用指针遍历数组
#include<stdio.h> int main() {//定义一个二维数组int arr[3][4] {{1,2,3,4},{2,3,4,5},{3,4,5,6},};//获取二维数组的指针int (*p)[4] arr;//二维数组里存的是一维数组int[4]for (int i 0; i < 3; i){//遍历一维数组for (int j 0; j <4; j){printf("%d &…...
《Probing the 3D Awareness of Visual Foundation Models》论文解析——多视图一致性
一、论文简介 论文讨论了大规模预训练产生的视觉基础模型在处理任意图像时的强大能力,这些模型不仅能够完成训练任务,其中间表示还对其他视觉任务(如检测和分割)有用。研究者们提出了一个问题:这些模型是否能够表示物体…...
使用pip安装esp32的擦除、写入固件的esptool库
esptool库可以为esp32的开发板烧录新的固件,但是如果为了烧录固件就要装esp-idf软件包,甚至需要用make编译安装很久,实在太费时费力了! 好消息就是,esp提供了python的esptool库,这样只要使用pip安装上这个…...
传奇996_23——杀怪掉落,自动捡取,捡取动画
一、杀怪掉落 前置: 添加地图地图刷怪怪物掉落(术语叫爆率,掉落叫爆率,而且文档上叫爆率) 刷怪步骤:在\MirServer\Mir200\Envir\MonItems文件夹中建立以怪物名字为文件名的txt文件写法案例: …...
【030】基于51单片机甲醛检测报警器【Proteus仿真+Keil程序+报告+原理图】
☆、设计硬件组成:51单片机最小系统 ZE08-CH2O甲醛传感器AT24C02存储芯片LCD1602液晶显示按键设置蜂鸣器报警。 1、本设计采用STC89C52、AT89C52、AT89S52作为主控芯片; 2、采用ZE08-CH2O甲醛传感器采集环境中的甲醛浓度值,LCD1602实时显示…...
微信小程序:vant组件库安装步骤
前言:在微信小程序中引用vant组件报错,提示路径不存在,这很有可能是因为没有安装构建vant组件库导致。下面是我整理的安装vant组件库的步骤: 第一步:安装node.js(执行完第一步请重启小程序) 具体步骤请看链接:node.js…...
FunASR Docker部署避坑大全:从SSL证书报错到热词不生效,一次解决所有常见问题
FunASR Docker实战排障指南:从证书配置到热词优化的深度解决方案 当你第一次尝试在Docker环境中部署FunASR语音识别服务时,那些看似简单的命令行参数背后可能藏着无数个"坑"。本文不会重复官方文档的基础操作,而是聚焦于五个最具代…...
初学Java之范型
范型包装类包装类的定义包装类的作用场景1:我想把数字放进列表里场景2:我想让方法返回"没有结果"场景3:我想用工具类处理数字场景4:泛型方法要求对象类型场景5:我想在同步代码块里用数字作为锁装箱与拆箱定义…...
半导体器件入门:金半接触的5个关键概念解析(附手稿能带图)
半导体器件入门:金半接触的5个关键概念解析(附手稿能带图) 第一次翻开半导体物理教材时,金半接触那一章总是让人既兴奋又困惑。那些弯曲的能带图、费米能级的移动、神秘的势垒高度,就像一道通往微电子世界的大门。本文…...
基于SpringBoot的CLAP音频分类服务开发实战
基于SpringBoot的CLAP音频分类服务开发实战 1. 项目背景与价值 音频分类在实际业务中有着广泛的应用场景,比如内容审核、智能家居、媒体分析等。传统的音频分类方案通常需要大量标注数据来训练专用模型,这在很多实际场景中成本高昂且不够灵活。 CLAP&…...
基于SpringBoot+Vue的月度员工绩效考核管理系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
摘要 现代企业管理中,绩效考核是提升员工工作效率、优化人力资源配置的重要手段。传统的绩效考核多依赖纸质记录或简单的电子表格,存在数据易丢失、统计效率低、反馈周期长等问题。随着信息化技术的发展,企业亟需一套高效、精准的绩效考核管理…...
3种革命性技术突破:解放城通网盘下载速度的终极方案
3种革命性技术突破:解放城通网盘下载速度的终极方案 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 你是否曾经面对城通网盘那令人绝望的下载速度而束手无策?当急需获取重要文件…...
Mojo嵌入Python项目的4种架构模式(含GIL绕过实测数据+内存安全验证报告)
第一章:Mojo嵌入Python项目的4种架构模式(含GIL绕过实测数据内存安全验证报告)Mojo 作为兼具 Python 兼容性与系统级性能的新兴语言,其嵌入 Python 项目的能力已通过多种生产就绪架构得到验证。以下四种主流集成模式均在 macOS Ve…...
共享图书借阅系统 Java 源码 + 数据库设计完整方案
以下是一个共享图书借阅系统的Java源码与数据库设计的完整方案,涵盖系统架构、核心功能实现、数据库设计以及安全防护措施等方面:一、系统架构技术栈:后端:Spring Boot 2.x MyBatis-Plus(简化数据库操作)前…...
卷积计算常见误区解析:为什么你的结果和理论值对不上?
卷积计算常见误区解析:为什么你的结果和理论值对不上? 在图像处理和深度学习领域,卷积操作是基础中的基础。但令人惊讶的是,即使是经验丰富的开发者,在实际编码时也常常遇到计算结果与预期不符的情况。这就像做菜时严格…...
Ostrakon-VL-8B效果展示:看AI如何从店铺图片中识别问题与机会
Ostrakon-VL-8B效果展示:看AI如何从店铺图片中识别问题与机会 1. 引言:当AI成为你的店铺巡检专家 想象一下这样的场景:你是一家连锁超市的运营经理,每天需要检查数十家门店的货架陈列、商品摆放和卫生状况。传统方法需要派遣大量…...
