MySQL server options
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
介绍
MySQL安装部署时经常会关注一些参数是否合理。其实这些参数分为两类型。环境中调整的绝大部分是引擎层方面的。服务层参数就是mysqld服务启动时的参数如datadirportsocket之类的的这些是基本常用的服务参数。
正好之前碰到一个server层的事务提交问题进一步更多了解服务层参数。除此之外服务层参数还要分WindowsLinux系统。有些也可以设置在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_RECOVER
eng "--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