深入探讨 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…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...