
核心内核my.iniLinux下常叫my.cnf是MySQL的主配置文件类比MySQL服务的启动配置清单。MySQL服务启动时会读取这个文件里的各项参数决定内存分配、连接数量、IO行为、字符集、日志、超时等全部运行规则修改参数后大多需要重启或动态生效参数配置直接影响数据库性能、稳定性与安全性。Windows系统默认命名my.iniLinux一般my.cnf二者语法、配置项完全一致。一、本源基础术语my.ini / my.cnfMySQL的静态配置文件文本格式。数据库服务启动阶段加载用来定义实例运行参数。Windows平台默认文件名my.iniLinux为my.cnf内容语法无差别。配置段section用[ ]包裹的分组用来区分不同程序模块。每一段下面写对应的配置参数。常见[mysqld]数据库服务主进程最重要、[client]客户端全局配置、[mysqld_safe]安全启动守护进程、[mysql]mysql命令行客户端。重点业务数据库核心配置全部写在 [mysqld] 段。配置项keyvalue配置文件最小单元格式参数名值。key是参数名称value是参数值等号两边空格可选。例port3306。注释以#或者;开头的行MySQL读取时直接忽略用来写说明、临时禁用某条配置。配置加载优先级MySQL会按固定顺序在多个路径寻找my.ini找到多个配置文件会叠加生效后面文件参数覆盖前面冲突参数。同参数命令行启动参数 my.ini配置 编译内置默认值。动态参数 / 静态参数动态参数运行中可以通过set global在线修改不用重启MySQL静态参数修改my.ini之后必须重启MySQL实例才能生效在线set修改无效。全局参数 / 会话参数全局作用整个MySQL实例所有新连接都生效会话仅当前数据库连接会话有效断开连接就失效。很多参数同时存在全局与会话版本。默认值当my.ini没有写该参数MySQL会使用编译内置的默认值。很多新手误区不写参数不等于关闭功能而是启用默认配置。二、基础连接与网络相关术语[mysqld]portMySQL监听端口默认3306。客户端通过IP端口建立TCP连接。一台机器多实例MySQL必须分配不同port。bind-address绑定监听IP。指定MySQL监听在哪块网卡。bind-address0.0.0.0监听本机所有网卡允许外部IP访问127.0.0.1仅本机客户端可连外网无法连接。安全加固常用。socketUnix套接字文件Linux本地客户端不走TCP直接文件通信性能更高。Windows无socket。max_connections实例最大并发连接数。MySQL能同时维持的客户端连接上限。超过这个数值新连接直接拒绝报“Too many connections”。wait_timeout连接空闲超时时间。连接建立后长时间没有任何SQL操作达到时间MySQL自动关闭这个空闲连接。PHP-FPM长连接、数据库连接池受这个参数影响。interactive_timeout交互式客户端空闲超时mysql命令行登录属于交互式业务程序是非交互式遵循wait_timeout。skip-name-resolve跳过域名反向解析。关闭DNS解析加快连接建立同时规避DNS解析卡顿导致数据库响应变慢。生产环境强烈开启。三、内存缓冲核心术语性能最关键innodb_buffer_pool_sizeInnoDB最重要参数缓冲池。把表数据、索引页缓存到内存。类似数据库的高速内存缓存。生产环境推荐服务器物理内存50%~70%。如果太小大量读请求走磁盘IO查询极慢。仅InnoDB引擎生效。key_buffer_sizeMyISAM引擎的索引缓存。现在生产大多用InnoDB该参数不需要调很大。sort_buffer_size单会话排序缓冲区。每条连接执行order by排序时单独分配一块内存。是会话级内存不是全局不能盲目调很大连接多的时候内存会爆炸。join_buffer_size单会话join连接缓冲区。没有索引的关联查询会使用这块内存做连接计算同样会话级别。read_buffer_size顺序扫描表的读缓冲区会话级。全表扫描的时候使用。read_rnd_buffer_size随机读取缓冲区排序之后读取行数据使用。会话级。tmp_table_size / max_heap_table_size内存临时表上限。group by、子查询会生成内存临时表超过大小临时表落地磁盘性能暴跌。两个参数建议保持相同值。四、InnoDB引擎核心术语default-storage-engine数据库默认存储引擎推荐InnoDB。InnoDB支持事务、行锁、崩溃安全MyISAM不支持事务、表锁崩溃容易损坏数据。innodb_file_per_table独立表空间。开启后每张InnoDB表单独生成.ibd文件存储数据和索引关闭则全部数据放在共享ibdata1文件。现代MySQL默认开启。innodb_log_file_sizeredo log重做日志单个文件大小。redo log是InnoDB崩溃恢复核心。日志文件越大刷盘IO越少性能更好但故障恢复时间变长。innodb_log_buffer_sizeredo log内存缓冲区事务日志先写内存缓冲区再刷到磁盘日志文件。innodb_flush_log_at_trx_commitredo log刷盘策略数据安全和性能的核心权衡参数1每次事务提交日志刷盘最高安全崩溃不丢数据性能偏低2事务提交写入操作系统缓存每秒刷盘0每秒刷盘性能最高崩溃可能丢失最多1秒事务。innodb_flush_methodInnoDB数据文件刷盘IO方式控制操作系统缓存行为Linux常用O_DIRECT绕过操作系统page cache避免buffer_pool和系统缓存重复占用内存。innodb_autoinc_lock_mode自增主键锁模式控制insert自增锁并发策略。transaction_isolation事务隔离级别。READ-COMMITTED / REPEATABLE-READMySQL默认等控制幻读、不可重复读。五、字符集、文件、日志术语character-set-server数据库服务默认字符集生产统一utf8mb4支持emoji表情原生utf8不支持4字节字符。datadirMySQL数据目录存放所有数据库、表文件。迁移数据库、备份、磁盘扩容重点关注这个目录。log_error错误日志文件路径记录启动崩溃、运行异常、报错信息排查故障第一优先查看日志。slow_query_log慢查询总开关开启后记录执行超过指定时间的SQL语句。long_query_time慢查询阈值单位秒。SQL执行耗时超过这个值就写入慢查询日志用来定位慢SQL优化。slow_query_log_file慢查询日志文件路径。general_log通用查询日志记录所有收到的SQL语句开销极大生产仅临时调试开启平时关闭。binlog二进制日志binlog日志记录所有修改数据的SQL用于主从复制、数据恢复。log_binbinlog日志开关binlog_format日志格式STATEMENT、ROW、MIXED生产推荐ROWexpire_logs_daysbinlog自动过期清理天数防止磁盘打满。六、IO、表、超时与安全术语table_open_cache表文件句柄缓存。缓存打开的表对象减少反复打开关闭表文件的系统开销。max_allowed_packet单个数据包最大上限。控制单次SQL、批量插入、大文本字段传输包大小。导入大SQL、存储大blob字段过小会报packet for query is too large。sql_modeSQL语法校验模式严格控制数据校验规则。例如NO_ENGINE_SUBSTITUTION、STRICT_TRANS_TABLES。旧版本默认宽松模式会自动截断脏数据严格模式拒绝非法数据写入业务开发推荐配置规范sql_mode。tmpdir临时文件目录存放磁盘临时表、排序临时文件。尽量放在高速磁盘。secure_file_priv控制load data infile导入导出文件的安全目录限制MySQL读写服务器本地文件防止文件读取漏洞。七、常见误区术语误区修改my.ini保存立刻生效纠正静态参数必须重启MySQL只有global动态参数支持set global在线修改而且新参数只对新建立连接生效已存在的连接继续使用旧参数。误区参数越大性能一定越好纠正内存类参数是全局资源约束sort_buffer_size、join_buffer_size是每个连接单独分配盲目放大并发连接上来会瞬间耗尽服务器内存直接OOM崩溃。误区my.ini写的参数一定会生效纠正检查配置加载顺序多配置文件覆盖、参数拼写错误、写错配置段写到[client]而不是[mysqld]都会导致参数不生效。验证命令show variables like xxx;。误区my.ini全部参数都必须手动写出来纠正只需要写需要修改的参数不需要全部配置项都罗列不写自动使用MySQL内置默认值。类比串联服务器配置类比my.ini MySQL实例的启动配置清单相当于Nginx的nginx.conf[mysqld]段 MySQL主服务核心配置区域innodb_buffer_pool_size 数据库高速内存缓存max_connections 接待访客最大数量上限binlog 数据变更操作流水日志用于备份和主从同步slow_query_log 慢操作审计日志找出耗时SQLinnodb_flush_log_at_trx_commit 数据落盘安全策略权衡安全与速度庖丁解牛一句话总结my.ini是MySQL实例的静态配置文件分段管理各类参数核心调优抓手是InnoDB缓冲池、redo log、连接上限、binlog、慢查询区分静态/动态参数、全局/会话内存参数内存参数不可盲目放大修改配置后需要验证是否真正生效配置本质是在硬件资源、查询性能、数据安全之间做取舍。