MySQL server options

news/2024/11/28 16:33:50/

介绍

MySQL安装部署时,经常会关注一些参数是否合理。其实这些参数分为两类型。环境中调整的绝大部分是引擎层方面的。服务层参数,就是mysqld服务启动时的参数,如:datadir,port,socket之类的的,这些是基本常用的服务参数。

正好之前碰到一个server层的事务提交问题,进一步更多了解服务层参数。除此之外,服务层参数还要分Windows,Linux系统。有些也可以设置在mysqld配置里。

目前服务层参数支持5种方面:

  • 影响安全性;
  • ssl相关选项;
  • Binary Log;
  • Replication相关;
  • 特定存储引擎的选项;

可通过verbose help 进行查看:

shell> mysqld --verbose --help

服务层参数

tc-heuristic-recover

如下错误说明是2阶段提交服务端出现问题,还没有到达引擎层。

[ERROR] Found 8 prepared transactions! It means that mysqld was not shut down properly last time 
and critical recovery information (last binlog or tc.log file) was manually deleted after a crash. 
You have to start mysqld with --tc-heuristic-recover 
switch to commit or rollback pending transactions.

代码实现上的备注信息:

ER_XA_NO_MULTI_2PC_HEURISTIC_RECOVEReng "--tc-heuristic-recover rollback strategy is not safe on systems with 
more than one 2-phase-commit-capable storage engine. Aborting crash recovery."

mysqld启动时添加
–tc-heuristic-recover=COMMIT或者–tc-heuristic-recover=ROLLBACK
执行完成后,去掉该参数再启动一次即可。

如:启动是还有问题,还可以配合innodb_force_recovery 进行修复操作。

memlock

将mysqld进程锁定在内存中,占有的内存,可以避免交换,但是也可能带来危险:如果没有足够的可锁定内存,mysql尝试分配更多内存时会崩溃。这也可能导致锁定的内存太多而没有足够的内存留给操作系统。所以必须要足够的内存分配给操作系统和MySQL服务。

如使用memlock参数,必须验证下是否支持mlockall(),应该命令的输出中看到如下内容:

shell# grep mlockall /usr/include/sys/mman.h
extern int mlockall (int __flags) __THROW;
  • 使用此选项可能需要以root身份运行服务器,出于安全原因,可以通过更改limits.conf文件来避免以root身份运行服务器;
  • memlock建议跟和large_pages 大页配合使用;
  • 不能在不支持mlockall()系统调用的系统上使用此选项;

upgrade

对于版本升级一般包含两个步骤。
Step 1: Data dictionary upgrade.
Step 2: Server upgrade.(按照数据量情况而定,因为数据要扫描,可能时间有点长)

MySQL8.0之后用新版本软件启动,就会自动升级。因为这个参数upgrade,默认值是AUTO。可以按照实际需求合理使用。

备注:从MySQL 8.0.16开始,no-dd-upgrade已弃用。它被——upgrade选项所取代。这也是
MySQL服务器启动过程中防止自动升级数据字典表。

core-file

如果mysqld突然宕机,普遍情况下都会写一个core核心文件。核心文件体现mysqld进程的状态和内存映像。在Linux中coredump功能是当应用程序异常时,内核默认的一种异常信号处理机制,内核会把异常信息与进程内存转储成coredump文件,程序员通过gdb工具可以离线分析应用程序异常时的情况。
当然需要配合innodb_buffer_pool_in_core_file使用,innodb引擎缓冲区信息输出。

 mysqld --core-file  --innodb-buffer-pool-in-core-file=ON


备注:
MADV_DONTDUMP是核心转储,指的是在进程发生错误时,将进程地址空及其一些特定状态数据保存到磁盘文件中,以供调试使用。

skip-grant-tables

跳过授权表会导致服务器不读取mysql系统模式中的授权表,从而启动时根本不使用特权系统。当忘记root密码的时候,是常用的最有效的手段。

虽然skip-grant-tables启动服务器会禁用身份验证检查,但应用用户还是可以正常访问,所以在这种情况下,还会通过skip_networking禁用远程连接,配合使用。

flush

在每个SQL语句之后将所有更改刷新(同步)到磁盘。比双1设置(sync_binlog和innodb_flush_log_at_trx_commit) 更严谨。

port-open-timeout

在某些系统上,当服务器停止时,TCP/IP端口可能不会立即变得可用。如果服务器随后快速重新启动,则重新打开端口的尝试可能会失败。此选项表示如果无法打开TCP/IP端口,服务器应该等待多长秒才能使其空闲。默认为不等待。

transaction-read-only

设置事务访问模式,有效的组织事务性引擎的写操作。可以一些特定情况下使用。跟账号级别的read_only模式效果相似。

validate-config

验证服务启动配置文件my.cnf . 如果没有发现错误,则服务器终止,退出码为0。如果发现错误,服务器将显示一条诊断消息,并以退出码1终止。
是验证配置文件有效的手段。

slow-start-timeout

(仅限Windows),此选项控制Windows服务控制管理器的服务启动超时。该值是服务控制管理器在启动期间试图终止windows服务之前等待的最大毫秒数(默认 15秒)。如果MySQL服务启动时间过长,可能需要增加这个值。值为0表示没有超时。

no-monitor

(仅限Windows)。该选项抑制了用于实现RESTART语句的fork: fork使一个进程充当另一个进程的监视器,而另一个进程充当服务器。对于使用此选项启动的服务器,RESTART只是退出而不重新启动。mysql8.0 简便命令RESTART,这个参数完全,可以应用于所有平台,防止一些误启动。

allow-suspicious-udfs

此选项控制是否可以加载主函数只有xxx符号的可加载函数。默认情况下,该选项处于关闭状态,只能加载具有至少一个辅助符号的可加载函数;这可以防止从包含合法函数的共享对象文件加载函数。
默认情况下,该选项处于禁用状态,以防止从共享库文件加载函数,而不是从包含合法可加载函数的共享库文件中加载函数。

属于安全参数。用户自定义函数就需要注意下。

defaults-extra-file

启动服务时,通过defaults-file可以指定my.cnf文件。extra是my.cnf之外,一些额外配置的配置内容。

mysqld  --defaults-file=/etc/my.cnf  --defaults-extra-file=/etc/my01.cnf --user=mysql &

除此之外 ,使使用–defaults文件,mysqld也会读取data目录下的mysqld-auto.cnf文件

external-locking

外部锁定是使用文件系统锁定来管理多个进程对MyISAM数据库表的争用。外部锁定用于不能假设MySQL服务器等单个进程是唯一需要访问表的进程的情况。如果在lockd无法完全工作的系统(如Linux)上使用此选项,则mysqld很容易死锁。

  • 环境下使用禁用外部锁定 --skip-external-locking。
  • 外部锁定仅影响MyISAM表访问。

总结

从mysqld help上还有诸多参数,可了解。有些在SHOW VARIABLES并不存在,只能在启动时配置。 在实际环境中这些参数使用率,还是比较低的。但以防万一,出现不可预测的问题,这些参数还是有一定的作用,解决问题。

参考

https://dev.mysql.com/doc/refman/8.0/en/server-options.html


http://www.ppmy.cn/news/19032.html

相关文章

Kotlin中标准库函数(apply、let、run、with、also、takeIf、takeUnless)的使用详解

博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家 👉点击跳转到教程 一、apply函数 apply apply函数可以看作是一个配置函数,你可以传入一个接收者,然后调用一系列函…

C++进阶 哈希表封装unordered_map和unordered_set

作者:小萌新 专栏:C进阶 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:使用哈希表封装unordered_map和unordered_set 哈希表源代码 我们下面会对一个 K V 模型的哈希表进行封装 使用之来模拟实现STL库中的…

Vue TypeScript 使用eval函数的坑

正常情况下,项目里不会用eval函数,但是万一要调用一个全局的js库,就需要用eval做些骚操作,这个时候编译会提示: is strongly discouraged as it poses security risks and may cause issues with minification. 警告是…

ARP渗透与攻防(三)之流量分析

ARP攻击-流量分析 ARP渗透与攻防(一)之ARP原理 ARP渗透与攻防(二)之断网攻击 系列文章 1.环境准备 1.kali作为攻击机 2.win10作为靶机 IP地址:192.168.110.11 3.网关 IP地址:192.168.110.1 2.kali数据包转发 出于安全考虑,Linux系统默…

Godot根据遮罩图移动粒子

前言 目前UI粒子特效unity引擎比较多,也好找资料,但是一般都是利用模型,使用3D粒子伪装2D效果。 Godot中也可以做到这一点,并且Godot有专门的2D粒子系统,可以通过一张遮罩图对粒子的位置进行设置。 godot粒子教程 …

深度学习网络---YOLO系列

深度学习网络—YOLO yolov1(仅适用一个卷积神经网络端到端地实现检测物体的目的) 首先将输入图片resize到448448,然后送入CNN网络,最后处理预测的结果得到检测的目标;yolov1的具体思想是将全图划分为SS的格子&#xf…

第五十三章 使用 ^SystemPerformance 监视性能 - InterSystems IRIS Linux 平台性能数据报告

文章目录第五十三章 使用 ^SystemPerformance 监视性能 - InterSystems IRIS Linux 平台性能数据报告第五十三章 使用 ^SystemPerformance 监视性能 - InterSystems IRIS Linux 平台性能数据报告 %SS - 使用 ALL^%SS 命令在运行过程中采集了四个样本。 Configuration * - 来自…

CSDN原创图片链接失效分析

过年花了5个小时,把我的所有BLOG(200多篇)检查了一遍,更正了几十处图片链接失效。 1. 现象 几个月来,由于在写书,不停地回翻自己以前的文章。结果,不断发现大量辛辛苦苦绘制的图片打不开了&am…