代码编织梦想

介绍

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_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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dreamyuzhou/article/details/128711859

解决lost connection to mysql server during query错误方法_benben0729的博客-爱代码爱编程

  昨天使用Navicat for MySQL导入MySQL数据库的时候,出现了一个严重的错误,Lost connection to MySQL server during query,字面意思就是在查询过程中丢失连接到MySQL服务器。 [Msg] Decompressing... [Msg] Table Created: wp_wiki_copy

mysql server has gone away_遇星的博客-爱代码爱编程

通常遇到MySQL server has gone away,是因为会话长时间空闲,MySQL主动将会话关闭了 mysql> show databases; ERROR 2006 (HY000): MySQL ser

windows手动安装mysql server 8.0.16_hongbing1998的博客-爱代码爱编程

Windows安装MySQL Server 8.0.16 一、说明二、下载压缩包三、将压缩包解压,并创建需要的文件四、执行安装过程五、修改root密码 一、说明 不推荐使用msi进行安装,安装过程会出错,坑很

mysql错误码:2006-MySQL server has gone away详解-爱代码爱编程

mysql错误码:2006-MySQL server has gone away详解 1.背景 代码测试过程中发现程序运行一段时间之后mysql数据库就报2006的错误码,程序重启之后恢复正常。 2.产生原因与解决方案一(mysql长连接) 2.1.mysql_ping与mysql长连接(此方案适用于解决代码开发中遇到的mysql错误码:2006—

MySQL Server v5.7正式版安装和环境搭建-爱代码爱编程

MySQL Server v5.7 对MySQL Server的认识 MySQL Server是一个开放源码的关系数据库管理系统,开发者为瑞典MySQL AB公司,现为Sun公司的一部分。2009年Oracle宣布收购Sun公司,因此MySQL可能成为Oracle旗下产品。MySQL由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,被广泛的应用

怎么把MySQL改成sqlserver_Mysql转换成SqlServer数据库,以及SqlServer转换成Mysql数据库...-爱代码爱编程

Windows XP sp2 MS SQL Server 2OOO sp1 MySql 5.0.41 1:MSSQLServer数据库导入到MySql数据库 步骤: 1.安装mysql数据库的ODBC驱动,mysql-connector-odbc-3.51.23-win32.msi,下载并安装。 2.在Mysql中创建数据库实例。 3.打

mysql server 5.7_MySQL Server更方便下载|MySQL Server v5.7 正式版 下载 - 巴士下载站-爱代码爱编程

MySQL Server正式版是一款非常专业的开放源码数据库,它拥有非常丰富的Unicode字符集,而且还加入新RESTORE语句进行备份操作。所以有需要的赶紧来WWW.11684.COM 下载吧! 软件特色 1.加入非常强大的存储引擎。 2.对于SCHEMA数据库进行优化改进还加了不少新列。 3.针对子查询也做了优化方便用户去批量访问。

sqlserver mysql 7303_SQLServer2012连接mysql5.5-爱代码爱编程

网站由于历史原因,使用了sqlserver和mysql两种数据库,数据库版本是SQLServer2012和MySql5.5,两库间交换数据以前都是走的接口,太麻烦。一下子把mysql迁移到sqlserver也不太合适,于是就想通过数据库连接的形式让sqlserver侧可以直接访问mysql的数据。 从网上东拼西凑,一步步搞通了,整理如下: 一、从m

mysql can't connect to the server_Getting error: Can't connect to MySQL server on 'SERVER_IP' (99)-爱代码爱编程

I'm using PHP5 and MySQL, everything is fine until more than 9,000 petitions are send to MySQL server. For example, I'm trying to do 10,000 insert from a CSV file with 10,000 r

mysql server options,mysql_options()提供了不受支持的选项-爱代码爱编程

I have installed mysql-server and mysql-workbench on my local machine having Ubuntu 16.04 as OS. I am able to connect to mysql-server through CLI, but not through mysql-workbe

MySQL中 server_uuid 简介-爱代码爱编程

从MySQL 5.7开始有一个 server_uuid 的概念, MySQL启动的时候会尝试从 data_dir/auto.cnf中读取该变量,如果 data_dir/auto.cnf 不存在,那么MySQL会自动产生一个,并存放至该文件中。 示例: JCFW1PJD:/mysqldatadir/data # cat auto.cnf  [auto] s