Chapter 5 MySQL Server Administration

5.1 The MySQL Server

mysqld 是MySQL server,下面讨论这些MySQL服务器的配置问题:

1.mysqld 支持的启动选项, 你可以指定那些选项在命令行,通过配置文件

2.这些变量反映了启动选项的当前状态和值,其中一些可以在服务器运行时修改。

3.服务器状态变量。这些变量包含有关运行时操作的计数器和统计数据

4.如何设置服务器的SQL模式。这个设置修改SQL的语法和语义的某些方面,例如与其他数据库系统代码的兼容性,或控制误差为特殊情况的处理。

5.服务器关机进程。有性能和可靠性的考虑,这取决于表的类型(事务性或非事务性)以及是否使用复制。

5.1.1 Server Option and Variable Reference

下表列出所有的命令行选项,服务器和状态变量适用于mysqld。

表列出了命令行选项(Cmd-line),选择有效的配置文件(选项文件),服务器系统变量(System Var),和状态变量(Status var)在一个统计的清单,

通知每个选项/变量是有效的,如果在命令行设置的server 选项或者在一个选项文件里 和相应的server system 或者status variable 不相同,

variable 变量相应的选项立即被注意到,对于状态变量,该变量的范围(范围)显示为全局,会话,或两者都是。请在设置和使用选项和变量上看到相应的部分。在适当的情况下,直接链接到该项目的进一步信息。

5.1.2 Server Configuration Defaults

5.1.2.1 Changes to Server Defaults
5.1.2.2 Using a Sample Default Server Configuration File

MySQL服务器有许多操作参数,您可以更改在服务器启动命令行选项或配置文件(选择文件)。它也可以在运行时更改许多参数。在参数设置在启动或运行时一般说明,见第,“服务器命令选项”,和第5.1.4,服务器“系统变量”。

5.1.2.1 Changes to Server Defaults

MySQL 5.6.6开始,几个MySQL 服务器参数默认值不同于以前版本的设置,这些变量的动机是提供更好的性能,并减少需要为数据库管理员的手动设置

在某些情况下, 参数不同的固定的默认值。在其他情况下,服务器autosizes 一个参数使用基于其他相关的参数或者server host 配置的公式,

而不是使用一个固定值。 比如,back_log 的设置以前默认是50,调整后的值于 max_connections值成正比。

5.1.2.2 Using a Sample Default Server Configuration File

MySQL 5.6.8, 在Unix 平台上,mysql_install_db 创建一个默认的选项文件 叫做my.cnf 在安装的base目录下。

这个文件是从模板创建的 包括了发行包命名的my-default.cnf,你可以从base 安装目录找到。 当使用mysqld_safe启动时,

server 默认使用my.cnf 文件。如果my.cnf 存在,mysql_install_db 假设它是在使用和写了一个新的文件叫做my-new.cnf.

除了一个例外, 默认的选项文件中设置注释,而且没有任何效果。区别是 文件改变了sql_mode 系统变量从默认的no_engine_substitution也包括strict_trans_tables:

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

这些设置产生了一个server 配置,这个会导致一个错误 相比错误的操作修改了事务表

5.1.3 Server Command Options

当你启用mysqld server,你可以指定程序选项使用Section 4.2.3, “Specifying Program Options”. 描述的任何方法

最常用的方法是提供选项文件或者在命令行提供选项 。

然而,在大多数情况下,它是可取的,以确保服务器使用相同的选项,每次运行。最好的方法是在一个选项文件中列出它们。见第4.2.6,使用选项文件”。这一节还介绍了选项文件格式和语法。

mysqld 从[mysqld] 和 [server] 读取选项,mysqld_safe 从[mysqld],[server],[mysqld_safe],和[safe_mysqld]组读取选项。

mysql.server 从[mysqld]和[mysql.server]组 读取选项。

mysqld 接收很多命令选项,一个简短的总结,执行mysqld——帮助

下面的列表显示了一些最常见的服务器选项。其他部分的附加选项:

1.选项影响安全的

2.SSL-related 选项

3.Binary log control options

4.Replication-related options:

5.Options for loading plugins such as pluggable storage engines

一些选项控制buffer 或者cache 的大小,对于一个给定的buffer,服务器可能需要分配内部数据结构。

这些结构通常是从总的内存分配到buffer,空间的总量可能和平台相关。

这意味着 当你给一个控制buffer 大小的选项分配值时,

这意味着当您将一个值分配给一个控制缓冲区大小的选项时,实际可用的空间大小可能与分配的值有所不同。在某些情况下,可能会小于分配的值。服务器也有可能调整一个值向上。例如,如果您将一个值赋值为0,其中最小的值为1024,服务器将设置值为1024。

缓冲区大小、长度和堆栈大小的值以字节为单位,除非另有说明

一些选项取文件值, 除非另有说明,默认文件位置是数据目录,如果只是相对路径名字。

要明确的指定位置, 使用绝对路径。 假设你的数据目录是/var/mysql/data, 如果文件值的选项是给出一个相对路径,

它将被放置在/var/mysql/data下, 如果文件是绝对路径名, 它的位置是给定的路径名。

你还可以设置server 的system vatiables 在启动的使用

设置一个变量的值 使用格式为
–var_name=value. For example, –key_buffer_size=32M sets the key_buffer_size variable to a value of 32MB.

当你为一个变量赋值,MySQL会自动修正值保持在一定范围内,或调整值最接近的允许值,如果只允许一定的价值。

如果你想限制的最大值,一个变量可以在运行时设置的设置,您可以定义通过使用命令行选项——maximum-var_name = value。

你可以通过SET语句改变运行server 的系统变量的值.

–allow-suspicious-udfs

这个选项控制是否用户定义函数只有一个xxx符号用于主函数加载。默认,该选项是关闭并且只具有至少一个辅助符号的UDFs才可以加载。这可以防止尝试从共享对象文件而没有包含合法的 UDFs加载函数。

tion 22.3.2.6, “User-Defined Function Security Precautions”
–ansi
使用标准(ANSI)SQL语法代替MySQL语法。为更精确的控制服务器的SQL模式,使用 –sql-mode选项代替。见Section 1.8.3, “Running MySQL in ANSI Mode”和Section 5.1.7, “Server SQL Modes”。
–basedir=path, -b path
MySQL安装目录,所有路径相对于这个目录
–big-tables
使大结果集通过保存所有临时集到文件。这个选项可以防止大多数“table full” 错误,但也会减缓对内存中的表的查询。自从MySQL 3.23.2,服务器能够处理大结果集自动通过使用内存存储小的临时表和在必要时转为硬盘表。
–bind-address=addr
MySQL服务对于TCP/IP连接仅监听单个网络套接字。这个套接字绑定单个地址。但对单个地址可能映射到多个网络接口。为了指定一个地址,在服务启动使用–bind-address=addr,addr可以是IPv4,或IPv6地址或主机名。如果是主机名,服务解析该主机名车IP地址,然后绑定IP地址。
如果addr 为,服务能接受支持IPv6的主机的所有IPv6和IPv4接口的TCP/IP连接,否则接受IPv4的TCP/IP连接。使用该值允许所有服务接口的IPv4和IPv6的连接。自从MySQL5.6.6,该选项默认为
如果add 为0.0.0.0,服务接受所有主机IPv4接口的TCP/IP连接。在MySQL5.6.6之前,该值为默认值。
如果add 为::,服务接受所有IPv4和IPv6接口的TCP/IP连接。
如果地址为IPv4映射地址,服务仅接受该地址的TCP/IP连接。可以以IPv4或IPv6格式。例如,如果服务绑定为::ffff:127.0.0.1,客户可以使用–host=127.0.0.1 或 –host=::ffff:127.0.0.1连接。
如果地址是正规IPV4或IPv6地址(例如127.0.0.1 或 ::1),仅接受来自IPv4或IPv6地址。
–binlog-format={ROW|STATEMENT|MIXED}
指定使用复制格式row-based,statement-based, 或mixed。在MySQL5.6默认是statement-based
在某些条件下,在运行时修改变量不怎么可能,或引起复制失败。更多信息见Section 5.2.4.2, “Setting The Binary Log Format”。
–bootstrap
mysql_install_db 脚本使用该选项来创建MySQL权限表没有必要开启MySQL服务。在MySQL5.6.6版本或之后版本,当使用该选项,复制和全局事务ID会自动不可用。
–character-sets-dir=path
字符集安装目录
–character-set-client-handshake
不忽略客户端发送的字符集信息。忽略客户端信息和使用默认服务的字符集。使用–skip-character-set-client-handshake。这使得MySQL行为像 MySQL 4.0。
–character-set-filesystem=charset_name
文件系统字符集。这选项设置系统变量 character_set_filesystem
–character-set-server=charset_name, -C charset_name
使用charset_name作为默认服务字符集。见 Section 10.5, “Character Set Configuration”。如果使用该选项指定一个非默认字符集。你应该也使用 –collation-server指定校验规则。
–chroot=path, -r path
在启动期间,通过使用系统调用 chroot(),把 mysqld 服务放进一个封闭环境。这是推荐的一个安全措施,
使用这个选项有些限制 LOAD DATA INFILE和 SELECT … INTO OUTFILE。
–collation-server=collation_name
使用 collation_name作为默认检验规则。
–console
(仅用于Windows)写错误信息到 stderr 和 stdou。如果使用该选项, mysqld不关闭控制台窗口。
–core-file
如果 mysqld死掉,写一个内核文件。内核文件的名称和位置依赖于系统。在linux,一个名为core.pid内核文件被当前进程的工作目录。对于 mysqld是数据目录。pid代表服务进程ID。在Mac OS X,一个名为 core.pid 文件被写到/cores目录。在 Solaris,使用 coreadm 命令指定内核文件被写到位置和命什么名。 对于一些系统,获得内核文件也必须给 mysqld_safe指定 –core-file-size 见 Section 4.3.2, “mysqld_safe — MySQL Server Startup Script”。在一些系统,如 Solaris,如果你使用 –user选项,你不能获得内核文件
可能会有额外的约束或限制。如在服务启动之前,需要执行 ulimit -c unlimited。详细请参照系统说明
–datadir=path, -h path
数据目录
–debug[=debug_options], -# [debug_options]
如果MySQL使用 -DWITH_DEBUG=1来编译。使用该选项来获取跟踪 mysqld正做什么。一个经典 debug_options字符是 ‘d:t:o,file_name’。默认是 ‘d:t:i:o,mysqld.trace’见 MySQL Internals: Porting to Other Systems。使用 -DWITH_DEBUG=1 编译 MySQL,支持启用调试,你可以在服务启动时使用–debug=”d,parser_debug” 选项,这引起 Bison 解析器,用于处理SQL语句来转储一个解析跟踪到服务的标准错误输出。通常,这个输出写入错误日志。此选项可以使用多次。值从 + 开始添加或-从以前值减去。例如 –debug=T –debug=+P设置值P:T。
–debug-sync-timeout[=N]
控制测试和调试是否启用调试同步设备。使用调试同步要求编译MySQL时使用 -DENABLE_DEBUG_SYNC=1选项(Section 2.9.4, “MySQL Source-Configuration Options”)。如果调试同步不被编译,该选项不可用。选项值是超时秒数。默认值是0,表示禁用调试同步。启用它,指定一个大于0的值,对个体同步点这个值也会成为默认的超时。如果选项没有指定值,超时设置为300秒。    
调试同步设备的描述和如何使用同步点,见 MySQL Internals: Test Synchronization。
–default-authentication-plugin=plugin_name
默认身份认证插件。可接受的值 mysql_native_password(使用MySQL本地密码)和sha256_password(用SHA-256 密码)关于这些插件见Section 6.3.7.1, “The Native Authentication Plugins”,和 Section 6.3.7.2, “The SHA-256 Authentication Plugin”。这个选项在MySQL5.6.6新增。
该选项的值影响服务操作的几个方面:1)对于没有明确指名插件,决定哪个插件分配到新用户。2)在启动时设置系统变量 old_passwords 的值和默认插件所需的密码散列格式发生冲突。这结果影响 PASSWORD() 函数使用的密码散列方法。3)下面任何创建新账号的语句,服务器将使用默认验证插关联帐户和分配指定的密码给帐户,该哈希值是old_passwords的值。CREATE USER … IDENTIFIED BY ‘cleartext password’;
GRANT … IDENTIFIED BY ‘cleartext password’;
4)下面任何创建新账号的语句,如果没有加密的密码哈希值用于要求hash 格式的默认身份认证插件,该语句执行将失败。CREATE USER … IDENTIFIED BY ‘encrypted password’; GRANT … IDENTIFIED BY ‘encrypted password’;
注意:如果你使用该选项修改默认身份认证方法而不是mysql_native_password,MySQL5.6.6之前版本的客户端不能连接。因为它们不明白身份认证协议的改变。
–default-storage-engine=type
表设置默认存储引擎,自从MySQL5.6.3,该选项仅为永久的表设置为默认存储引擎。为了临时表设置存储引擎,设置系统变量default_tmp_storage_engine。
–default-time-zone=timezone
设置服务默认的时区, 这选项设置全局系统变量 time_zone,如果该选项没有指定,默认时区和系统时区(系统变量system_time_zone指定的值)是一样的。
–delay-key-write[={OFF|ON|ALL}]
指定如何使用延迟键的写入,键延迟写引起键缓存在对MyISAM表写入期间不能冲洗。OFF禁用延迟键写入。ON 能够对表创建时指定了 DELAY_KEY_WRITE选项 可以使用延迟键写。ALL对所有MyISAM表延迟键写。见Section 8.11.2, “Tuning Server Parameters” 和 Section 14.3.1, “MyISAM Startup Options”
–des-key-file=file_name
从这儿文件读默认DES密钥。这些密钥是使用 DES_ENCRYPT() 和 DES_DECRYPT() 函数。
–enable-named-pipe
支持命名管道。该选项只用在Windows。
–engine-condition-pushdown={ON|OFF}
以前,这个选项设置系统变量engine_condition_pushdown;该选项和变量从MySQL5.6.1移除。更多信息,见Section 8.13.3, “Engine Condition Pushdown Optimization”.
–event-scheduler[=value]
启用或禁用 事件调度器。详细信息,见The –event-scheduler Option.
–exit-info[=flags]
这是不同标示的位屏蔽,你可以用于调试 mysqld服务。不要使用这个选项,除非你知道它究竟是什么了!
–external-locking
启用外部锁(操作系统锁),MySQL4.0默认禁用它。请注意,如果你在系统不完全lockd工作(比如Linux)使用这个选项,很容易使mysqld死锁。外部锁只影响MyISAM表访问。要了解更多信息,包括在什么条件下,它可以和不能使用见 Section 8.10.5, “External Locking”。
–flush
在每个SQL语句之后,冲洗(同步)所有更改到磁盘。通常,MySQL把所有变化写入到磁盘是通过操作系统处理同步到磁盘。
–gdb
为信号情报(SIGINT)安装中断处理(需要用^C停止 mysqld 来设置断点)和禁用堆栈跟踪和核心文件处理。见 MySQL Internals: Porting to Other Systems
–general-log[={0|1}]
指定初始化通用日志的状态。没有值或1表示启用 –general-log。默认是禁用的
–ignore-db-dir=dir_name
这个选项告诉服务器忽略 SHOW DATABASES 或 INFORMATION_SCHEMA 表的给定目录名称。
例如,如果一个MySQL编译数据目录在unix的根目录,系统也许创建一个 lost+found目录,服务应该忽略这个目录,在服务启动使用 –ignore-db-dir=lost+found 可以忽略把lost+found当做数据目录。如果指定多个目录,使用该选项多次。如果指定空值,重置该列表为空。该选项在MySQL5.6.3新增
–init-file=file_name
在启动时从这个文件读取SQL语句。每个语句必须在一行,不包括注释。
–innodb-xxx
为Innodb存储引擎设置选项。Innodb选项列表见 Section 14.2.6, “InnoDB Startup Options and System Variables”.
–install [service_name]
(仅用于Windows)安装MySQL做windows 服务。在windows启动,服务自动启动。默认名称为MySQL
–install-manual [service_name]
(仅用于windows)安装MySQL作为Windows服务,但必须手动启动,在windows启动时,它不能自动启动。如果没有指定服务名称,默认是MySQL。更多信息,见 Section 2.3.4.8, “Starting MySQL as a Windows Service”.
–language=lang_name, -L lang_name
用于错误信息的语言,lang_name可以是语言的名称,也可以是语言文件安装的全路径名。该选项在MySQL5.6.1被弃用了,在MySQL5.6, 使用–lc-messages-dir 和 –lc-messages代替 –language 见Section 10.2, “Setting the Error Message Language”.
–large-pages
一些硬件/图形化操作系统支持内存页大于默认值(4KB)。这种支持的实际生效取决于底层硬件和操作系统。,执行大量的内存访问的应用程序可能通过使用大页面获得性能改进,由于减少了翻译后备缓冲区(TLB)失效。
MySQL 5.6支持Linux实现的大页(这被称为Linux中HugeTLB)见Section 8.11.4.2, “Enabling Large Page Support”。对于Solaris支持的大页见 –super-large-pages的选项的描述。–large-pages默认被禁用
–lc-messages=locale_name
用于错误信息的位置,服务器转换参数成为语言名称并且和–lc-messages-dir的值结合产生错误信息文件的位置。见Section 10.2, “Setting the Error Message Language”.
–lc-messages-dir=path
错误信息位于的目录。这个值是和–lc-messages一起使用为错误信息文件产生位置。
–log[=file_name], -l [file_name]
该选项从MySQL5.6.1移除(系统变量log也被移除),用–general_log选项来启用通用日志,和用 –general_log_file=file_name选项设置通用日志名称
–log-error[=file_name]
记录错误和启动信息到这个文件,默认使用host_name.err
–log-isam[=file_name]
记录所有MyISAM改变到这个文件(仅用调试)
–log-output=value,…
这个选项决定了一般查询日志和慢速查询日志输出的方向。选项值可以给定 TABLE, FILE, 或 NONE的其中一个或多个。TABLE选择记录到mysql数据库 中general_log和slow_log 表。 FILE 选择记录到一个文件中。NONE禁用日志记录。如果NONE出现在选项值,它优先于任何其他的值。 TABLE 和 FILE都可以给,选择使用两种方法。这个选项选择日志输出的方向,但不决定日志输出。为此,可以使用 –general_log_file和 –slow_query_log选项。
–log-queries-not-using-indexes
如果使用该选项启动慢日志,预计将检索所有行的查询被记录慢日志。这个选项并不意味着没有使用索引。例如,一个查询,它使用全索引扫描但会记录慢日志,因为该索引不会限制行数。
–log-raw
自从MySQL 5.6.3,包含密码的某些语句被服务不按照原句重写到通用日志,慢日志,二进制日志。如果服务启动使用该选项,密码重写可能被一般查询日志阻止。这个选项可以用于诊断,看到服务器接收的确切的文本的语句,但是出于安全原因不适合生产使用。在MySQL5.6.3,语句中的密码不重写和一般的查询日志应该受到保护。这个选项在 MySQL 5.6.3新增。
–log-short-format
记录少量信息到二进制日志和慢速查询日志,如果他们已经被激活。
–log-slow-admin-statements
慢的管理语句写入慢查询日志,管理语句包括ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATE INDEX,DROP INDEX, OPTIMIZE TABLE, 和 REPAIR TABLE.
–log-tc=file_name
内存映射的事务协调日志文件名(当二进制日志被禁用,XA事务影响多个存储引擎)。默认的名字是 tc.log。这个文件是在数据目录下创建如果没有给出一个完整的路径名。目前,这个选项是未使用的。
–log-tc-size=size
内存映射的事务协日志的大小(字节),默认是24kB
–log-warnings[=level], -W [level]
打印如 Aborted connection… 警告信息到错误日志。推荐启用该选项。例如,如果使用复制(你得到更多的信息关于正在发生的事情,如网络故障和重连接信息)。这个选项是默认启用的(1),如果省略默认级别值是1。
禁用此选项,使用 –log-warnings=0。如果该值大于1,连接中断被写入错误日志,和为新连接尝试拒绝访问错误也写入错误日志。
如果一个从服务器启动时启用 –log-warnings,从服务打印消息到错误日志,提供有关其状态,如它开始工作的,它被切换到另一个中继日志,断开后它重新连接的二进制日志和中继日志坐标,等等。服务器记录基于语句日志却不安全的语句信息,只有启用 –log-warnings。
–low-priority-updates
指定表更新操作 (INSERT, REPLACE, DELETE, UPDATE)的权限小于所有查询操作,这也可以使用 {INSERT | REPLACE | DELETE | UPDATE} LOW_PRIORITY …的权限仅小于一个查询。或通过 SET LOW_PRIORITY_UPDATES=1在一个线程改变权限。这仅影响于只是用表级锁的引擎。见 Section 8.10.2, “Table Locking Issues”.
–min-examined-row-limit=number
当此选项设置、查询检查的行数少于number行的慢查询不写入慢查询日志。缺省值是0
–memlock
锁定mysqld的进程在内存。如果你有一个问题,操作系统导致mysqld交换到磁盘,这个选项可以防止被交换磁盘。
–myisam-block-size=N
用于MyISAM索引页的块大小
–myisam-recover-options[=option[,option]…]]
设置MyISAM存储引擎恢复模式,这选项的值可以为 OFF, DEFAULT, BACKUP, FORCE, 或 QUICK任意组合,如果你指定多个值,之间用逗号分开。指定选项没有参数和指定默认是一样的,用 “” 指定该选项,不启用恢复(和值为OFF一样)。如果启动恢复, mysqld 每次打开MyISAM 表,它检查表是否标记为崩溃或没有正常关闭。(quick只在运行时禁用外部锁才有效。)如果是这种情况,mysqld运行检查表。如果表被损坏,mysqld试图修复它。
OFF:不恢复,DEFAULT:没有backup,forcing,或quick checking进行恢复,BACKUP:在恢复过程中,数据文件被修改,保存table.MYD的一份备份为 tbl_name-datetime.BAK。FORCE:尽管从.MYD有数据丢失,还可以运行恢复。QUICK:如果没有任何删除块,不检查表中的行。
在服务自动修复表之前,它写一条有关修复的提示到错误日志。如果你希望能够恢复大多数问题无需用户干预,你应该使用 BACKUP,FORCE的选项。尽管有些行将被删除,会强制对表恢复。但它保留旧的数据文件作为备份,以便以后检查发生了什么事。 见Section 14.3.1, “MyISAM Startup Options”。
–old-alter-table
当这个选项被指定,服务器不使用已优化的方法来处理 ALTER TABLE 操作,它恢复使用临时表,复制数据,然后重命名临时表为原来的表名。使用MySQL 5.0和更早。 ALTER TABLE的更多信息见 Section 13.1.6, “ALTER TABLE Syntax”.
–old-style-user-limits
启用旧式用户限制。(在MySQL5.0.3,用户资源限制是分别计算每台主机的用户连接而不是user表的每个账户的行。)
–one-thread
该选项从MySQL 5.6.1移除了,使用 –thread_handling=no-threads 代替。
–open-files-limit=count
可用于mysqld修改文件句柄数,如果mysqld给出错误:Too many open files。你应该增大该变量的值。mysqld使用选项值通过setrlimit() 预订文件句柄数。如果所请求的文件句柄数量不能被分配,mysqld写一个警告到错误日志。 mysqld可能试图分配超过请求的数量的句柄数(如果他们是可用的),使用max_connections 和 table_open_cache值估计是否需要更多的句柄数。在unix,该值不能少于ulimit -n
–partition[=value]
在MySQL支持启用或不启用用户自定义的分区
–pid-file=path
进程ID文件的路径。
–plugin-xxx
指定一个属于服务插件的选项,例如,许多存储引擎可用插件来构建,并且这样的引擎,该插件的选项可以用 –plugin 前缀指定。如为Innodb指定的选项–innodb_file_per_table ,可以用 –plugin-innodb_file_per_table来指定。对选项为布尔型的,可以使用, –skip-plugin-innodb_file_per_table禁用innodb_file_per_table。
–plugin-load=plugin_list
这个选项告诉服务器在启动时,加载指定的插件。这选项的值是用分号分隔的name=plugin_library对的列表。每个name 就是插件的名称。例如:hell> mysqld –plugin-load=”myplug1=myplug1.so;myplug2=myplug2.so”。如果有多行 –plugin-load 选项,只有最后一个有效,另外使用 –plugin-load-add选项指定的插件可以被加载。在正常启动,服务决定哪些插件被加载,通过读系统表mysql.plugins 。如果服务指定 –skip-grant-tables选项启动,它不请教mysql.plugins表和不加载插件,指定 –plugin-load 选项在指定–skip-grant-tables下可以加载插件。
–plugin-load-add=plugin_list
这个选项补充 –plugin-load 选项 –plugin-load-add添加插件和一组插件在启动时加载。参数格式和 –plugin-load是一样 –plugin-load-add可以用来避免指定一组很多的插件作为 –plugin-load 单个参数。这个选项被添加在MySQL 5.6.3。–plugin-load-add 可以出现在没有 –plugin-load,但任何–plugin-load-add出现在 –plugin-load的实例没有生效,因为 –plugin-load重置一组插件被加载。换句话说,这些选项: –plugin-load=x –plugin-load-add=y 是等效于–plugin-load=”x;y”。但–plugin-load-add=y –plugin-load=x 只等效于–plugin-load=x。有关插件加载更多信息 见 Section 5.1.8.1, “Installing and Uninstalling Plugins”.
–port=port_num, -P port_num
当监听TCP/IP连接的端口,端口必须大于1024,除非服务是以系统用户root启动。
–port-open-timeout=num
在一些系统中,服务器停止时,TCP /IP端口可能不会立即变得可用。如果服务器之后迅速重启,其试图重新打开端口可能会失败。这个选项显示服务器应该等待TCP/ IP端口成为免费的时间(秒),如果它不打开。默认是不等待。
–remove [service_name]
(仅Windows)删除一个MySQL Windows服务。如果没有指定服务名称,服务默认的名字是MySQL。有关更多信息,见Section 2.3.4.8, “Starting MySQL as a Windows Service”。
–safe-mode
跳过一些优化阶段。这个选项从MySQL 5.6.6被移除了。
–safe-user-create
如果该选项被启用,你不能使用 GRANT语句创建新的MySQL用户,除非该用户对mysql.user表和这个表任何列都有 INSERT权限。如果你想要一个用户有能力创建新用户,这用户有正确权限可以授予其他用户,你应该授予用户的以下权限:GRANT INSERT(user) ON mysql.user TO ‘user_name’@’host_name’; 这可以确保用户无法直接改变列的任何特权,但必须使用GRANT语句给其他用户授权。
–secure-auth
这选项引起服务阻塞那些密码是以旧格式(4.1之前)存储的用户的连接。使用它来阻止所有采用旧格式的密码(因网络的不安全通信)。在MySQL5.6.5之前,该选项默认禁用,自从MySQL5.6.5,默认启用。可以用 –skip-secure-auth禁用。
–secure-file-priv=path
这个选项限制了 LOAD_FILE() 函数的效果,并且 LOAD DATA和 SELECT … INTO OUTFILE语句仅在文件存在该指定的目录下才有效。
–shared-memory
本地连接启用共享内存连接。这个选项只在Windows可用。
–shared-memory-base-name=name
对于共享内存连接的共享内存名称。这个选项只在Windows可用。默认的名字是MYSQL。名字是大小写敏感的。
–skip-concurrent-insert
关闭在MyISAM表同时查询和插入的操作。(这选项只使用在如果你认为你在这个特性已经找到了一个错误)见Section 8.10.3, “Concurrent Inserts”.
–skip-external-locking
不使用外部锁(系统锁)。这影响MyISAM表的访问。更多信息,包含在什么条件,它不可用,见Section 8.10.5, “External Locking”.
–skip-event-scheduler
关闭事件调度器,这和禁用事件调度器是不同的。那需要设置–event-scheduler=DISABLED 详细信息见 The –event-scheduler Option
–skip-grant-tables
这个选项会导致服务器启动不使用特权系统,这允许任何人访问服务,不受限制访问所有数据库。你可以通过从系统命名行执行 mysqladmin flush-privileges或 mysqladmin reload命令导致一个正运行的服务再次开始使用权限表,或连接到服务器通过发行一个MySQL的 FLUSH PRIVILEGES语句。这个选项也会抑制加载那些使用INSTALL PLUGIN 语句安装的插件,,用户定义函数(udf),和事件调度器。为了要加载插件,使用 –plugin-load选项。注意, 在启动后,通过执行其他操作,FLUSH PRIVILEGES 可能被隐式。例如, mysql_upgrade在升级过程中刷新权限表。
–skip-host-cache
为加快主机名到IP解析禁用使用内部主机缓存。在这种情况,每次客户连接,服务器执行DNS查找。见 Section 8.11.5.2, “DNS Lookup Optimization and the Host Cache”。使用 –skip-host-cache类似设置系统变量host_cache_size的值为0,但host_cache_size更加灵活,因为在运行时它也可以调整大小、启用或禁用主机缓存,不只是在服务器启动事。如果使用 –skip-host-cache启动服务,它不能阻止host_cache_size的改变,但这些改变不生效和缓存是不可用,尽管host_cache_size设置大于0。
–skip-innodb
禁用Innodb存储引擎。在这情况,由于默认引擎是Innodb,服务将不能启动除非你也使用 –default-storage-engine和 –default-tmp-storage-engine为永久表和临时表设置默认的存储引擎。
–skip-name-resolve
当检测客户端连接,不解析主机名,仅使用IP地址,如果你使用此选项,在授权表所有host列必须是IP地址或localhost.见 Section 8.11.5.2, “DNS Lookup Optimization and the Host Cache”
–skip-networking
不监听TCP/IP连接,所有与 mysqld交互必须使用命名管道或共享存储区(在windows)或unix 套接文件(在unix)。这个选项是高度推荐当只允许本地客户连接。见 Section 8.11.5.2, “DNS Lookup Optimization and the Host Cache”
–skip-partition
禁止用户自定义的分区。已分区表可以使用 SHOW TABLES或查询INFORMATION_SCHEMA.TABLES表查看,但不能被创建或更改,在那表的数据也不能被访问。所有分区指定的列在 INFORMATION_SCHEMA.PARTITIONS显示为NULL。既然DROP TABLE移除表的定义(.frm)文件,当这语句操作已分区表(使用该选项不能再分区),在这种情况下,该语句不能删除与分区表相关的.par文件。由此原因,为避免删除分区表,可以使用此选项。
–ssl*
以ssl开头的选项指定是否允许客户端使用ssl连接和显示ssl密钥和证书在哪 见 Section 6.3.9.4, “SSL Command Options”。
–standalone
仅在windows可用,指示MySQL服务器不作为一个服务来运行
–super-large-pages
在MySQL标准使用大页面试图使用支持最大尺寸为4 MB。在Solaris上,一个“超级大页面”功能允许使用256 MB的页面。这个功能可用于最近SPARC平台。它可以启用或禁用通过使用 –super-large-pages 或 –skip-super-large-pages选项。
–symbolic-links, –skip-symbolic-links
启用和禁止符号链接。在windows和unix有不同的影响。在windows,启用符号链接可以让你通过创建 包含数据库实际路径的db_name.sym文件建立一个符号链接。见 Section 8.11.3.1.3, “Using Symbolic Links for Databases on Windows”.在unix,启用符号链接意味着:你可以使用 CREATE TABLE语句的INDEX DIRECTORYor DATA DIRECTORY的选项链接一个MyISAM 索引文件或数据文件到另一个目录。如果你删除或重命名表,其符号链接指向的文件也会被删除或重命名。见Section 8.11.3.1.2, “Using Symbolic Links for MyISAM Tables on Unix”
–skip-show-database
该选项设置系统变量 skip_show_database来控制是否允许使用 SHOW DATABASES 语句。见 Section 5.1.4, “Server System Variables”.
–skip-stack-trace
不写堆栈跟踪。这个选项是有用的,当你在一个调试下运行mysqld。在某些系统上,您也必须使用这个选项来获得一个核心文件。见 MySQL Internals: Porting to Other Systems.
–skip-thread-priority
为更快的响应时间禁用使用线程优先级。这个选项是未使用的和在MySQL 5.6.1被移除了。
–slow-query-log[={0|1}]
指定慢速查询日志的初始状态。没有参数或参数为1 –slow-query-log 选项允许日志。如果省略或指定该参数为0,则选项禁用日志。
–slow-start-timeout=timeout
这个选项控制了Windows服务控制管理器的服务启动超时。这个值是服务控制管理器在启动windows服务期间试图杀死windows服务等待最大的毫秒数。默认值为15000(15秒)。如果MySQL服务启动花费的时间太长,您可能需要增加这个值。值0表示没有超时。
–socket=path
在Unix上,这个选项指定了Unix socket文件被用于监听本地连接。默认值为/tmp/ mysql.sock。如果这个选项被指定,服务器在数据目录创建文件,除非指定的绝对路径名称是一个不同的目录。在Windows上,这个选项指定管道的名字用于监听本地连接,使用一个命名管道。默认值是MySQL(不区分大小写)。
–sql-mode=value[,value[,value…]]
设置SQL模式,在MySQL5.6.6之前,默认是”(空字符串);从MySQL5.6.6开始,默认是NO_ENGINE_SUBSTITUTION。见 Section 5.1.7, “Server SQL Modes”.
–sysdate-is-now
SYSDATE()默认返回它执行的时间,而不是该语句发生开始执行的时间。它不同于NOW()的行为。该选项使SYSDATE()成为NOW()的别名。对于二进制日志记录和复制的影响的信息,参照 Section 12.7, “Date and Time Functions”中 SYSDATE()的描述,和在 Section 5.1.4, “Server System Variables”对 SET TIMESTAMP 的设置。
–tc-heuristic-recover={COMMIT|ROLLBACK}
在启发式恢复过程决定使用的类型。目前,这个选项是未使用的。
–temp-pool
这个选项会使服务器创建的大多数临时文件使用一个小组名称,而不是每个新文件使用一个唯一的名称。这个克服在Linux内核处理创造许多不同名称的新文件一个问题。对旧的行为,Linux似乎“泄漏”内存,因为它是被分配给目录条目缓存而不是磁盘缓存。忽略该选项除了Linux。
–transaction-isolation=level
设置默认事务隔离级别。在运行时,可以使用 SET TRANSACTION 或系统变量 tx_isolation 设置隔离级别
–transaction-read-only
设置默认事务访问模式 ,默认情况,read-only模式是禁用,所以这个模式是读或写。在运行时,设置默认事务访问模式,使用 set transaction 语句或设置系统变量tx_read_only 。这选项在MySQL5.6.5新增的。
–tmpdir=path, -t path
用于创建临时文件的目录路径
–user={user_name|user_id}, -u {user_name|user_id}
–verbose, -v
详细信息
–version -V
显示版本信息并退出。

performace schema Command Options

[MyISAM]
–myisam-recover-options=mode
设置崩溃的MyISAM表自动恢复模式,详细见上面。
–delay-key-write=ALL
在对任何MyISAM表期间,不冲洗键缓存。详细见上面。
bulk_insert_buffer_size
用于批量插入优化的缓存大小(每个线程)。
myisam_max_sort_file_size
当创建MyISAM索引(REPAIR TABLE, ALTER TABLE, or LOAD DATA INFILE期间),MySQL允许临时文件最大值。如果文件大小大于这个值,创建索引的使用键缓存代替,这是较慢的。单位字节。
myisam_sort_buffer_size
用于恢复表的缓存大小。如果使用 –myisam-recover-options选项启动mysqld,那激活自动恢复。在这种情况下,当服务器打开一个MyISAM表,它检查表是否被标记为崩溃或是否为表打开计数器,变量不是0,您正在运行的服务器禁用外部锁。若这些条件其中之一是正确的,就会发生以下情况:1)检查表错误。2)如果发现错误,尝试做一个快速表修复(整理但没有重建数据文件)3)因数据文件有错误,修复失败(如,一个重复主键错误),这次服务重建数据文件。4)如果修复失败,服务器尝试再一次用旧的修复选项的方法(逐行写入,不用整理)。这个方法应该能修理任何类型的错误和需要少量磁盘空间。如果从先前完全表不能全表恢复并且在 –myisam-recover-options 选项没有指定FORCE,自动修复中止并在错误日志生产一条错误消息:Error: Couldn’t repair table: test.g00pages。

Performance Schema Command Options

–performance-schema-consumer-consumer_name=value
配置一个性能模式的消费者。消费者的名字在setup_consumers 表使用下划线,但对于消费者在启动时设置,破折号,破折号,和下划线是等价的。
–performance-schema-instrument=instrument_name=value
配置一个性能模式仪器。该名称可以是作为一个模式来匹配配置仪器。
[Innodb]

options

–ignore-builtin-innodb
在MySQL5.1,该选项引起服务的行为好像内置Innodb不存在。它启用Innodb Plugin 代替。在MySQL5.6,InnoDB是默认存储引擎并且InnoDB Plugin不被使用,所以该选项没作用,自从MySQL5.6.5,它被忽略。
–innodb[=value]
控制是否加载Innodb引擎。如果服务编译支持InnoDB引擎,那么该选项有三种值 OFF, ON, 或 FORCE 见Section 5.1.8.1, “Installing and Uninstalling Plugins”。 禁用Innodb 使用 –innodb=OFF 或 –skip-innodb。在这种情况,Innodb为默认引擎,这样服务不能启动除非使用 –default-storage-engine和tmp-storage-engine 来设置默认的持久和临时表的引擎。
–innodb-status-file={OFF|ON}
控制Innodb是否在数据目录创建一个名为 innodb_status.pid文件。如果启用,InnoDB优先把 SHOW ENGINE INNODB STATUS 的结果写到这个文件。默认情况,不创建这个文件,如果要创建,可用–innodb-status-file=1启动 mysqld。这个文件在服务被关闭时被删除。
–skip-innodb
禁用InnoDB引擎。

system variables

daemon_memcached_enable_binlog
该变量详细用法见Section 14.2.9, “InnoDB Integration with memcached”,在MySQL5.6.6新增的。
daemon_memcached_engine_lib_name
指定实现InnoDB memcached 插件的共享库。该变量详细用法见Section 14.2.9, “InnoDB Integration with memcached”,在MySQL5.6.6新增的。
daemon_memcached_engine_lib_path
包含实现InnoDB memcached 插件的共享库的目录路径,该变量详细用法见Section 14.2.9, “InnoDB Integration with memcached”。
daemon_memcached_option
在初始化,用空格分隔的选项被传到底层 memcached守护进程。
daemon_memcached_r_batch_size
在执行COMMIT来开启新的事务之前,指定多少次memcached 读操作(get)。该值默认为1,所以任何通过SQL语句更改表对memcached操作来说是立即可见的。你可能会增加该值来减少只通过memcached接口访问系统底层表的频繁提交的开销。如果您设置的值太大,大量undo或redo数据可以增加一些存储开销,与长运行的事务有关。该变量详细用法见Section 14.2.9, “InnoDB Integration with memcached”,在MySQL5.6.6新增的。
daemon_memcached_w_batch_size
在执行COMMIT来开启新的事务之前,指定多少次memcached 写操作,如 add, set, 或 incr。和daemon_memcached_r_batch_size对应。 该值默认为1,假设任何数据存储是需要重要保护以防停机并且应立即提交;当存储是非关键数据,您可能会增加这个值来减少频繁提交的开销;然后在出现崩溃时,最后的N-1未提交的写操作可能会丢失。
innodb_adaptive_flushing
指定是否基于工作负载动态调整涮洗InnoDB中 buffer pool的脏页比例。动态调整涮洗比例是为了避免爆发性的I/O活动。默认情况下启用的。
innodb_adaptive_flushing_lwm
在 adaptive flushing启用时,低水平标志代表redo log 容量的百分比。这个变量默认10,范围0…70,在5.6.6新增的。
innodb_adaptive_hash_index
是否启用Innodb的自适应哈希索引。自适应哈希索引功能对于某些工作负载是有用的,也对其他有不好的。启用和禁用来对实际的工作负载进行基准。默认是启用的。在服务启动时可用–skip-innodb_adaptive_hash_index来禁用。
innodb_adaptive_max_sleep_delay
按照工作负载,允许Innodb自动调整 innodb_thread_sleep_delay 启动和关闭的值。任何非零值能够自动化,动态调整innodb_thread_sleep_delay 值。该值小于innodb_adaptive_max_sleep_delay选项指定的最大值。这值为微秒数。在繁忙,大于16Innodb线程的系统下,该选项非常有用。(实际上,它是最有价值的是在MySQL系统有上千个并发连接时。)该变量在5.6.3新增。
innodb_additional_mem_pool_size
Innodb 用于存储数据字典信息和其他内部数据结构的内存池大小。在应用中表越多,分配内存就越多。如果该内存用完,它开始从操作系统分配内存并写警告信息到错误日志。默认是8M。
自从MySQL 5.6.3, innodb_additional_mem_pool_size被弃用,在之后系列应该会删除。
innodb_api_bk_commit_interval
指定使用InnoDB memcached接口多少次自动提交空闲的连接。该项在5.6.7新增,用法请见Section 14.2.9, “InnoDB Integration with memcached”
innodb_api_disable_rowlock
对于这个选项详细用法见:Section 14.2.9, “InnoDB Integration with memcached”
innodb_api_enable_binlog
使用Innodb memcached plugin时,可以使用 binary log。对这个选项详细用法见 Section 14.2.9, “InnoDB Integration with memcached”
innodb_api_enable_mdl
Innodb memcached 插件锁表时,不能通过SQL接口删除表和使用DDL更新表。
innodb_api_trx_level
控制通过memcached 接口处理查询的事务隔离级别。对于这个选项的常量对应到熟悉名称有0 = READ UNCOMMITTED,1 = READ COMMITTED,2 = REPEATABLE READ,3 = SERIALIZABLE。
innodb_autoextend_increment
当自动扩展系统表空间文件满了,自动扩展的大小(MB),自从MySQL5.6.6的值默认是64,之前都是8M。这个变量不影响每个表空间文件的大小,如果你使用 innodb_file_per_table=1。这些文件自动扩展不考虑innodb_autoextend_increment的值。最初扩展是少量的,之后以4MB扩展。
innodb_autoinc_lock_mode
用于自动生成 auto-increment锁模式。允许的值是 0, 1, 或 2,对应着锁模式 “traditional”,“consecutive”,或“interleaved”。 对这些模式详细描述见 Section 5.4.4, “AUTO_INCREMENT Handling in InnoDB”。
innodb_buffer_pool_dump_at_shutdown
当MySQL 服务被关闭,是否记录下在buffer pool中的缓存页。用于下次启动时减少热身时间。典型的结合innodb_buffer_pool_load_at_startup一起使用。
innodb_buffer_pool_dump_now
启用该选项,立即记录下buffer pool中的缓存页。经典结合innodb_buffer_pool_load_now一起使用。在5.6.3新增的。
innodb_buffer_pool_filename
指定文件存储innodb_buffer_pool_dump_at_shutdown 或 innodb_buffer_pool_dump_now产生页码列表。
innodb_buffer_pool_instances
InnoDB的buffer pool被分成多个区段,对系统有多个G范围,将缓冲池分到单独的实例来提高并发性。通过减少不同的线程读取和写入到缓存页面的争用。被存储到buffer pool或从buffer pool读取的每个页使用哈希函数随机分配给其中一个缓冲池实例。每个缓存池实例管理它的空闲页列表, flush lists, LRUs,和其他连接到缓存池的数据结构。通过各自buffer pool mutex来保护。当你设置 innodb_buffer_pool_size大于1G,该选项才有效,把总大小分配给所有缓存池。更有效的,指定innodb_buffer_pool_size 和 innodb_buffer_pool_size一个组合,以便每个缓冲池实例至少1GB。在MySQL5.6.6之前版本,默认为1,自从MySQL5.6.6 默认是8。除了在windows 32位系统上,默认值取决于 innodb_buffer_pool_size的值。如果 innodb_buffer_pool_size大于1.3GB,默认 innodb_buffer_pool_instances的默认值是innodb_buffer_pool_size/128MB。否则,默认是1.
innodb_buffer_pool_load_abort
由于 innodb_buffer_pool_load_at_startup 或 innodb_buffer_pool_load_now的触发,中止处理修复Innodb buffer pool的内容。
innodb_buffer_pool_load_at_startup
指定这个,在服务启动时,
sync_binlog。通过加载在关闭时buffer pool中的页来给buffer pool 热身。经典的是结合innodb_buffer_pool_dump_at_shutdown一起使用。
innodb_buffer_pool_load_now
通过加载一组数据页立即buffer pool 热身,不需等待服务重启。在基准测试期间,或在运行查询报告或维护之后准备恢复MySQL服务器为正常工作负载,通过把缓存恢复到已知状态是非常有效的。
innodb_buffer_pool_size
buffer pool的大小,如果大于1G,设置 innodb_buffer_pool_instances大于1的值,改善繁忙的服务的可伸缩性。
innodb_change_buffer_max_size
Innodb change buffer的最大的大小。是整个buffer pool大小的百分比。对于高插入、更新和删除活动的服务,应该增大该值。对于普通I/O调优建议,见 Section 8.5.7, “Optimizing InnoDB Disk I/O”。该变量在MySQL5.6.2新增
innodb_change_buffering
Innodb是否执行 change buffering,这是一种优化,通过对二级索引延迟写以便 I/O操作可以顺序地执行。允许值有inserts (缓存插入操作),deletes(缓存删除操作;严格说,这个写是给索引记录作标志,为在清洗期间做删除操作), changes(缓存插入和标志为删除的操作),purges(缓存 purge 操作,当被删除索引条目已经删除到垃圾收集才写),all(缓存插入,删除,purge 操作)和none(不缓存任何操作)。默认是ALL。详细见Section 14.2.4.2.13, “Controlling InnoDB Change Buffering”。
innodb_checksum_algorithm
指定对每个InnoDB表空间的存储每个磁盘块如何生成和验证校验码。取代了 innodb_checksums选项。这个值为innodb,对MySQL所有版本向后兼容。crc32计算更改块校验和为每个磁盘读取检查校验和是最快一种算法。none是在校验和域写一个常量,而不是基于块数据计算一个值。在表空间的块可能用一个混合的值,有旧的,新的,和没有检验和,随数据修改逐渐更新该值;在一个表空间一旦任何被修改块使用crc32算法,早期版本的MySQL不能读关联的表的检验和。该选项在MySQL5.6.6的默认值从innodb改为crc32。但为改善InnoDB数据文件在MySQL早期版本兼容性,在5.6.7切换回innodb。值为strict_*格式的原理和innodb,crc32,和none是一样的。除了在相同的表空间中碰到一个混合的校验和值,InnoDB停止之外。,你使用这些值仅在全新的实例,对所有表首次设置这个选项。设置strinct_*多少会更快点。因为在磁盘读取期间,不需要计算新的,旧的校验和值,因为它们新旧值都可以接受。对用法信息见 Section 14.2.4.2.7, “Fast CRC32 Checksum Algorithm”。
innodb_checksums
InnoDB可以用 检验和检验从磁盘读取表空间所有页,确保发生在硬件故障或损坏的数据文件的额外错误。这个验证是默认启用。在某些特殊情况下(如在运行基准测试)这种额外的安全功能可以用 –skip-innodb-checksums来禁用。你可以用innodb_checksum_algorithm选项指定计算检验和方法。自从MySQL5.6.3该选项被弃用了。
innodb_cmp_per_index_enabled
在 INFORMATION_SCHEMA.INNODB_CMP_PER_INDEX表启用每个索引压缩相关统计信息。由于这些信息收集花销很大,在涉及对InnoDB压缩表性能调优期间,该选项仅在开发,测试,从服务实例启用。
innodb_commit_concurrency
可以同时提交 线程数。默认是0,允许任意数量的事务同时提交。在运行时,该值不能从0修改成非0值,反之也一样。但非0值之间修改是可以的。
innodb_compression_failure_threshold_pct
MySQL开始在 compressed页内添加填充设置分界点来避免昂贵的压缩失败。 值为0禁用监控压缩效率和动态调整填充量的机制。
innodb_compression_level
给InnoDB 压缩表和索引指定zlib 压缩的等级。
innodb_compression_pad_pct_max
在每个压缩页,预留最大百分比作为空闲的空间。当一个压缩的表或索引更新和数据可能被重新压缩,在页面内使用该空间重组数据和修改日志。当 innodb_compression_failure_threshold_pct设置非0,和压缩失败率超过分界点,才运用该选项。
innodb_concurrency_tickets
决定进入InnoDB并发的线程数。如果线程的数量已经达到了并发限制,当它试图进入InnoDB内核,线程被放置在一个队列中。自从MySQL5.6.6,默认值为 5000,之前版本是500。
innodb_data_file_path
InnoDB 的数据文件的路径和大小。每个数据文件全路径连接 innodb_data_home_dir指定目录路径。
innodb_data_home_dir
在系统表空间,所有InnoDB 数据文件部分通用路径。这个选项不影响file_per_table的文件位置,默认是MySQL 数据目录,但你可以给innodb_data_file_path指定绝对路径。
innodb_disable_sort_file_cache
如果启用,该变量对合并排序临时文件禁用操作系统文件系统缓存。这个效果和打开这些文件用O_DIRECT等效的。此变量在MySQL5.6.4添加的。
innodb_doublewrite
如果这个变量启用(默认启用),InnoDB存储所有数据 两次,首先写到 doublewrite buffer,然后到实际数据文件。对基准或需要高性能而不关心数据完整性或可能的失败可以使用 –skip-innodb_doublewrite关闭。
innodb_fast_shutdown
InnoDB关闭模式。如果该值为0,InnoDB缓慢关闭,在关闭之前,做一个完整的清洗和插入缓冲合并。如果该值为1(默认),InnoDB在关闭时跳过这些操作,这一过程称为快速关闭。如果该值为2,InnoDB冲洗日志和冷关闭,好像MySQL发生崩溃;提交事务不会丢失,但是崩溃恢复操作使下一次启动需要更长的时间。    
缓慢关闭可能花几分钟,甚至在极端情况下几小时,大量的数据仍然被缓冲。在MySQL主版本之间升级或降级之前使用慢关闭技术,这样所有的数据文件做充分的准备,以防升级过程更新文件格式。    
在紧急或故障情况下,数据冒着被破坏风险,使用 innodb_fast_shutdown=2,获得绝对最快关闭。
innodb_file_format
Innodb表使用文件格式,目前,支持 Antelope和Barracuda,这个仅适用于表各自有自己表空间。所以要该选项有效,那么一定使用 innodb_file_per_table。Barracuda 文件格式对Innodb某些特性如压缩表是必须的。
innodb_file_format_check
该变量可以设置1和0,对应着服务在启动时,Innodb是否检查系统表空间的文件格式标志位(如: Antelope 或 Barracuda)。如果该标志被检查,并且比当前Innodb支持的值更高。会产生一个错误,并且Innodb 不能启动。如果不高,innodb会设置 innodb_file_format_max 的值到文件标志位。注意:尽管默认值有时被显示为ON或OFF,在您的配置文件或命令行总是用数值1或0将打开或关闭此选项。innodb_file_format_max
在服务启动时,Innodb把这个变量的值设置给系统表空间的文件格式标志(如 Antelope 或 Barracuda)。如果服务用一个“higher”文件格式创建或打开一个表,把 innodb_file_format_max的值设置为表的标志
innodb_file_per_table
当启用该innodb_file_per_table(在MySQL5.6.6和更高版本默认启用该选项),InnoDB为每个新创建的表存储在独立 .ibd 文件,而不是系统表空间。当这样的表被删除或清除,存储对这些InnoDB表回收。此设置允许其他几个InnoDB的特性,如表压缩。这样的功能的详细细节见 Section 5.4.1, “Managing InnoDB Tablespaces”。
当 innodb_file_per_table禁用,InnoDB把所有表和索引存储到系统表空间ibdata文件。这个设置可能减少文件系统操作的性能,比如 DROP TABLE 或 TRUNCATE TABLE。它是最适合服务器环境中所有存储设备用于MySQL数据。因为系统表空间从未缩小,所有数据库共享在一个实例,当innodb_file_per_table=OFF避免加载大量的临时数据到空间受限制系统。在这种情况下,建立一个单独的实,您可以删除整个实例来回收空间。  自从MySQL 5.6.6默认情况下启用innodb_file_per_table,之前版本是禁用的。如果与MySQL 5.5或5.1保持兼容性,禁用它是一个值得考虑的问题。这将防止ALTER TABLE 把InnoDB 表从系统表空间表移到.ibd文件。
innodb_flush_log_at_timeout
每N秒写和冲洗事务日志,这个选项仅当设置innodb_flush_log_at_trx_commit 为2才有效,该变量在MySQL5.6.6新增。
innodb_flush_log_at_trx_commit
该选项控制事务提交严格 ACID 顺序性和当提交的相关I/O操作被重新安排和分批次完成来获取可能更高的性能之间一个平衡。你可以取得更好的性能,通过改变缺省值,但在崩溃时,你可以失去一秒的事务。
默认值1,要求ACID完全顺序性,在每个事务提交时,log buffer 被写到log file和在日志文件执行冲洗到硬盘操作。
值0,任何 mysqld进程崩溃,丢失最后一秒的事务。每秒日志从buffer 写到日志文件,并刷新到磁盘上。事务提交不会做任何事。
值2,只有操作系统崩溃或停电可丢失最后一秒的事务。每提交事务,日志缓冲区被写入文件,但不刷新到磁盘操作。在MySQL 5.6.6之前版本,每秒一次刷新日志文件。注意,每秒一次冲洗不是100%保证每秒钟发生,由于进程调度问题。在MySQL 5.6.6,刷新频率由 innodb_flush_log_at_timeout代替。InnoDB的崩溃恢复工作不考虑该变量的值,事务要么完整应用要么完整删除。在复制中使用Innodb,为最大可能持久性和一致性,在master 的配置文件设置innodb_flush_log_at_trx_commit=1 和 sync_binlog=1
innodb_flush_method
控制调用系统刷洗数据到InnoDB 数据文件和日志文件 的方法,它影响I/O吞吐量。这个变量只与Linux或Unix系统有关,WINDOWS系统中,刷新方法使用 async_unbuffered,不能改变。
默认情况,InnnoDB 使用fsync()刷新数据和日志文件。如果 innodb_flush_method选项设置为 O_DSYNC,Innodb 使用O_SYNC来打开和刷新日志文件,并且用fsync()刷新数据文件。如果指定O_DIRECT(在一些GNU/Linux 版本, FreeBSD, 和Solaris是可用的)InnoDB使用 O_DIRECT(在 Solaris使用 directio())来打开数据文件,和使用fsync()刷新数据和日志文件。
innodb_flush_neighbors
指定从Innodb buffer pool 刷新一页是否也涮洗在相同的段区的其他脏页。当表数据被存储在传统的HDD存储设备,在一个操作刷新那些相邻的页面 相比于不同时间刷新各自页可以减少I/O开销(主要磁盘寻道操作)。对数据存储在SSD,寻道时间不是一个重要的因素,你可以将此设置OFF,来扩展写操作。
innodb_flushing_avg_loops
迭代次数用于InnoDB保持冲洗状态前计算的快照,控制如何快速响应工作负载不断变化的自适应冲洗。增加该值使冲洗操作的频率平稳变化,随着工作量的变化逐渐改变。减少该值使得适应性冲洗(adaptive flushing)随工作负载变化调整迅速,如果工作负载突然增加和减少,这可能会在涮洗操作导致峰值。这个变量在MySQL5.6.6新增。
innodb_force_load_corrupted
在启动时让InnoDB加载那些标记为损坏的表。只在排除故障期间用于恢复数据,否则无法访问。当故障检修完成后,将此设置OFF并重新启动服务。此选项在5.6.3新增的。
innodb_force_recovery
这个崩溃恢复模式,通常只有在严重的故障排除的情况下改变。可能的值从0到6.
innodb_ft_aux_table
给Innodb 包含全文索引的表指定合格名称,你设置这个变量的名称格式为 db_name/table_name,然而INFORMATION_SCHEMA中的表 INNODB_FT_INDEX_TABLE, INNODB_FT_INDEX_CACHE, INNODB_FT_CONFIG,INNODB_FT_DELETED,和 INNODB_FT_BEING_DELETED 反映对指定表的索引搜索信息。该变量在MySQL5.6.4新增的。
innodb_ft_cache_size
当创建一个InnoDB全文索引,用于存储解析文档在内存的缓存的大小。
innodb_ft_enable_stopword
在创建索引的时,指定一组与InnoDB全文索引相关禁用词(stopwords)。如果innodb_ft_user_stopword_table 选项被设置,暂停词来自那张表。另外,如果innodb_ft_server_stopword_table选项被设置,暂停词来自那张表。否则,使用一个内置默认的暂停词组。
innodb_ft_max_token_size
存储在InnoDB全文索引的最大字长。设定这个值的上限,可以减少索引的大小,通过忽略长关键词或任意字符的集合,不是真正的单词和不是搜索条件,可以加快查询速度。
innodb_ft_min_token_size
存储在Innodb 全文索引的最少字长。增加这个值可以减少索引的大小,从而加快查询,通过省略常见词,在一个搜索上下文不太重要的词,如英语单词“a”和“to”。内容使用CJK(中国、日本、韩国)字符,指定一个值为1
innodb_ft_num_word_optimize
在执行 OPTIMIZE TABLE操作时,对一个Innodb 全文索引处理字数。因为对一个表中包含一个全文搜索索引一个批量插入或更新操作,将所有的变化可能需要大量的索引维护,你可能会做一系列OPTIMIZE TABLE,每次做上次剩下,没有的优化 。
innodb_ft_server_stopword_table
当创建一个InnoDB全文索引,包含一系列将被忽略的词的表名。命名格式为db_name/table_name。注意禁用词表必须是Innodb表,包含一个varchar列和值。在配置选项值指定表名之前,该禁用词表必须存在。
innodb_ft_sort_pll_degree
当对一个大表构建搜索索引,在一个Innodb 全文索引上并行处理索引和标记文本的线程数。
innodb_ft_user_stopword_table
当创建全文索引,包含一系列被忽略词的表名。格式db_name/table_name。注意注意禁用词表必须是Innodb表,包含一个varchar列和值。在配置选项值指定表名之前,该禁用词表必须存在。
innodb_io_capacity
innodb_io_capacity 参数设置每个缓冲池的实例在I/O执行InnoDB后台的任务活动的上限能力,如冲从缓冲池洗页面和从插入缓冲器合并数据。默认值是200。对于有更高I/O率能力的繁忙的系统,在服务器启动,你可以设置一个更大的值,帮助服务器处理相关高速率行变化的后台维护工作。注意在服务启动时为 innodb_io_capacity指定值将使得innodb_io_capacity_max不可用。
对于5400RPM或7200PRM转速的系统,你可能要调小先前默认为100.这个参数应该大约设置为系统可以每秒执行I/O操作数。理想情况下,保持这个设置低于实用的,但不能太低,以防这些后台活动落后太多。如果该值过高,数据从缓冲池和插入缓冲被删除太快而不能显著受益于缓存。该值代表I/O操作(每秒IOPS)的比例,老一代磁盘驱动器执行约100 IOPS。当前默认200反映了现代存储设备有更高的I/O能力。
innodb_io_capacity_max
限制InnoDB的 innodb_io_capacity 的最大值,每个缓冲池的实例,在紧急情况下。它的默认值是innodb_io_capacity默认值的两倍,最小值为2000。如果在服务器启动时设置innodb_io_capacity,它就不起作用的。这变量在MySQL5.6.6新增。
innodb_large_prefix
对使用 DYNAMIC和COMPRESSED 行格式的InnoDB表,启用这个选项允许前缀索引 长度可以长于767字节(最大为3072字节).(创建这些表也需要这些选项innodb_file_format=barracuda 和innodb_file_per_table=true.)在不同变量设置下,对应前缀索引的最大值见 Section 14.2.7, “Limits on InnoDB Tables” 。对使用REDUNDANT 和 COMPACT 行格式的表,这个选项不影响索引前缀所允许的长度。当这个选项被设置,当对REDUNDANT或COMPACT尝试创建一个索引大于3072,发生一个ER_INDEX_COLUMN_TOO_LONG (1727)错误。
innodb_lock_wait_timeout
Innodb 放弃事务之前等待时间秒数。默认是50秒。一个事务访问被其他事务锁住的行,将在发起下列错误之前,等待的时间。
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
当等待锁超时,当前语句被回滚 (不是整个事务),要回滚整个事务,服务要开启 –innodb_rollback_on_timeout选项。另见Section 14.2.3.14, “InnoDB Error Handling”。对于高交互应用或OLTP系统,你可以减少这个值。显示用户的反馈迅速或把更新到一个队列以变接下来处理。innodb_lock_wait_timeout仅用于Innodb 行级锁。MySQL 表锁不会发生在Innodb 内部,超时也不适用表锁。锁超时的值不用于死锁,由于Innodb立即检测死锁,并且回滚一个死锁的事务。
innodb_locks_unsafe_for_binlog
这个变量影响Innodb 对索引扫描如何使用间隙锁 。从 MySQL5.6.3该选项被弃用,在将来版本会被删除。
innodb_log_buffer_size
日志缓冲区大小。默认是8M。日志缓冲越大,就可以写入更大事务而不用在提交之前把日志写入到日志文件。如果你有许多行更新,插入,删除的事务。使日志缓冲更大点,可以保护磁盘I/O。
innodb_log_compressed_pages (5.6.11)
指定重压缩页的位图是否存储到Innodb redo logs。这个变量在MySQL5.6.11新增的。
innodb_log_file_size
在一个日志组中每一个日志文件大小。日志文件合并后的大小((innodb_log_file_size *innodb_log_files_in_group)可以到达512G。默认是48M。值明智范围从1MB到缓冲池的大小的1/n,N是日志文件组中文件数。值越大,在缓冲池执行checkpoint 刷新活动次数越小,节省磁盘I/O。日志文件越大,崩溃恢复越慢。尽管在MySQL5.5改善了恢复的性能和使日志文件更少考虑。
innodb_log_files_in_group
在日志组的日志文件数。
innodb_log_files_in_group
Innodb 的redo 日志文件的目录路径。
innodb_lru_scan_depth(5.6.3)
该参数影响对InnoDB缓冲池的冲洗操作的算法和启发式。对性能主要作用调整I/O密集型工作负载。它指定在每个缓冲池实例中,查找将要扫描脏页, page_cleaner线程扫描buffer pool LRU列表的深度。这是一个后台操作一秒执行一次。如果在一个典型的负载下,你有多余的I/O容量,可以增加这个值。如果写密集负载下,饱和了你I/O容量,减少这个值。尤其有一个更大缓冲池。
innodb_max_dirty_pages_pct
Innodb 从buffer pool尝试涮洗数据,以便脏页数据不会超出这个值。这个值范围从0-99的整数。
innodb_max_dirty_pages_pct_lwm
低水位标志代表脏页的比例,启用preflushing控制脏页比率。默认为0完全禁用preflushing行为。
innodb_max_purge_lag
该变量控制 purge 操作滞后多长,才延迟INSERT,UPDATE和DELETE 操作。默认是0(不延迟)。
InnoDB 事务系统维护一个事务列表。它记录被UPDATE 和DELETE 操作标志为删除的记录。这个列表的长度
代表 purge_lag值。当purge_lag超过innodb_max_purge_lag,每个 INSERT, UPDATE, 和 DELETE 操作被延迟。延迟的数量是 ((purge_lag/innodb_max_purge_lag)*10)-5 毫秒。在极端情况下 purge_lag 巨大,以防止过度延迟。你可以设置一个延迟的时间上限通过 innodb_max_purge_lag_delay 配置选项,延迟是从开始清洗批次计算,每十秒。如果由于旧一致性读 读到要清除的行,不能运行清除,则操作不能延迟。
滞后的值显示在InnoDB监控输出的事务部分中的 history list length。例如,如果输出包括以下行,滞后值是20:History list length 20
innodb_max_purge_lag_delay
指定最大延迟时间毫秒。任何非零值表示一个基于innodb_max_purge_lag值计算延迟时间的上限。默认为零意味着没有强制延迟间隔的上限。
innodb_monitor_disable
关闭 INFORMATION_SCHEMA.INNODB_METRICS 表中一个或更多计数器。用法见Section 19.30.17, “TheINFORMATION_SCHEMA INNODB_METRICS Table”。
innodb_monitor_enable
打开 INFORMATION_SCHEMA.INNODB_METRICS 表中一个或更多计数器。用法见Section 19.30.17, “TheINFORMATION_SCHEMA INNODB_METRICS Table”
innodb_monitor_reset
重置INFORMATION_SCHEMA.INNODB_METRICS 表中一个或更多计数器的值为0.用法见 Section 19.30.17, “TheINFORMATION_SCHEMA INNODB_METRICS Table”.
innodb_monitor_reset_all
重置INFORMATION_SCHEMA.INNODB_METRICS 表中一个或更多计数器所有值(最小,最大,等待)。用法见
Section 19.30.17, “The INFORMATION_SCHEMA INNODB_METRICS Table”.
innodb_old_blocks_pct
指定buffer pool用于旧块分表的百分比。范围从5到95。默认是37(即pool的3/8).通常结合innodb_old_blocks_time一起使用。Buffer pool的信息见 Section 8.9.1, “The InnoDB Buffer Pool”
innodb_old_blocks_time
非零值防止缓冲池在短时间每被查询的数据填满,比如在全表扫描。增加这个值提供了更多的保护防止全表扫描干扰缓冲池已缓存的数据。这个参数指定一个块自从第一次被访问到被移动到新块列表之前,必须呆在旧块列表多长时间(毫秒)。如果该值为0,一块数据被插入到老分表一旦被访问就立即移动新分表,哪怕是被插入后很快被访问。如果值n大于0,块留在旧分表,直到一个访问发生在离第一次访问至少有n毫秒。例如值为1000,表示块在第一次访问之后,在它们有资格移动到新块列表之前,必须呆在老块列表1秒钟的时间。自从MySQL5.6.6 默认值是1000,之前是0。这个变量通常结合 innodb_old_blocks_pct一起使用。
innodb_online_alter_log_max_size
对InnoDB表在Online DDL 操作,临时日志文件最大值。每个索引创建或修改表都有这个日志文件,这个日志文件存储在DDL操作期间对表插入,更新,删除的数据。当 innodb_sort_buffer_siz的值需要,临时日志文件自动扩展直到innodb_online_alter_log_max_size指定的值。如果任何临时日志文件超过这个上限,ALTER TABLE操作失败和所有未提交的并发DML操作被回滚。因此在ONLINE DDL 操作期间,有大量DML并发,应该增大该值。但也导致结束DDL操作需要更长时间当表被锁用来从日志应用数据。
innodb_open_files
这变量仅与你使用InnoDB多表空间文件有关,它指定MySQL在一时间保持打开.ibd 文件数。最小值是10,自从MySQL5.6.6默认值是300.
innodb_optimize_fulltext_only
改变OPTIMIZE TABLE语句操作Innodb表的方法,对含有全文索引的innodb表的维护操作期间,临时启用改变量。默认情况, OPTIMIZE TABLE 会对有聚集索引表进行重新整理数据。当启用这选项,OPTIMIZE TABLE跳过表数据重新整理,仅对有全文索引的新增,更新和删除的数据进行处理。更多信息见Section 14.2.3.12.3, “FULLTEXT Indexes”
innodb_page_size
指定页大大小。当事例被创建时,设置这个变量,并且后面保持一个常量。
innodb_print_all_deadlocks (5.6.2)
当启用改选,Innodb 事务中的死锁信息被记录到错误日志。否则,你使用 SHOW ENGINE INNODB STATUS命令,只能看到最后一条死锁信息。InnoDB偶尔死锁不一定是一个问题,因为InnoDB立即检测条件,自动回滚一个事务。如果一个应用程序没有适当的错误处理逻辑来检测回滚和重试操作,您可以使用这个选项来排除为什么发生死锁。如果有大量死锁,确保每个事务对表访问顺序是一致来避免死锁。
innodb_purge_batch_size
变化的粒度数,以redo日志记录为单位来表示,如果改变达到该变量指定的数,则触发一个(purge)清洗操作
刷新buffer pool中变化块到磁盘。这个选项结合选项innodb_purge_threads=n用于调优性能。通常用户不需要修改它。
innodb_purge_threads
用于InnoDB 清洗操作的后台线程数。在MySQL5.6.5 新默认和最小值为1.这意味着清洗操作总是由后台线程执行。而不是作为主线程一部分。非0值以一个或多个后台线程运行冲洗操作。这可减少在InnoDB的内部竞争,改善伸缩性。增加该值大于1创建许多单独的清洗线程,这可以在系统执行多个表的DML操作提高效率。最大是32。
innodb_random_read_ahead
为优化 InnoDB I/O弃用随机预读技术。这种设置最初是默认的,然后在MySQL5.5被移除,现在默认情况被关闭。详细信息见“Changes in the Read-Ahead Algorithm”。
innodb_read_ahead_threshold
控制线性预读的灵敏度,InnoDB使用它预抓取页到缓冲池。如果Innodb 至少从一个段(64页)顺序读取innodb_read_ahead_threshold 页,它发起一个异步读取整个接下来的段。允许的范围0到64.默认是56:
InnoDB必须从某段按顺序至少读取56页,对下面的段发起异步读。
innodb_read_io_threads
Innodb用于读操作的I/O线程数。默认是4.相对应写线程是 innodb_write_io_threads。
innodb_read_only(5.6.7)
以只读模式启动服务。用于分发数据库应用或数据设置为只读的。也可以用于数据仓库,多个实例之间共享同一数据目录。用法见Section 14.2.5.1, “Support for Read-Only Media”
innodb_replication_delay
如果到达innodb_thread_concurrency限制,在一个从服务延迟复制线程(毫秒)innodb_rollback_on_timeout
在MySQL5.6,InnoDB 仅回滚超时事务的最后一条语句。如果指定–innodb_rollback_on_timeout,一个事务超时引起Innodb 中止和回滚整个事务(行为和MySQL4.1一致)。
innodb_rollback_segments
在系统表空间定义多少回滚段,如果一个小数量的回滚段对你的负载执行更好的话,可以从默认值128减少。
innodb_sort_buffer_size
指定多个缓冲区的大小用于在InnoDB索引创造期间排序数据。在此设置为可配置之前,大小固定为1 MB,值仍然是默认的。这排序区域仅用于在创建索引期间合并排序,而不是用于后续索引维护操作。在 ALTER TABLE或 CREATE TABLE 创建一个索引期间,分配3个缓冲区,每个缓冲区的大小都使用该选项。这些缓冲区在创建索引完成时将其收回。这个选项的价值也控制临时日志文件扩展大小,该日志文件记录在线DDL期间并发DML操作的数据。
innodb_spin_wait_delay
为一个spin 锁,最大延迟(The maximum delay between polls for a spin lock)。底层实现这种机制变化取决于硬件和操作系统,所以延迟并不对应于一个固定的时间间隔。默认值是6。
innodb_stats_auto_recalc
导致InnoDB自动重新计算持续统计( persistent statistics),当一个表中的数据是发生了显著变化。阈值是表中的行的10%。这个设置适用于表创建时启用了innodb_stats_persistent,或是在CREATE TABLE 或ALTER TABLE语句 使用 STATS_PERSISTENT=1 子句。用于产生统计信息的采样数据的数量是由配置选项innodb_stats_persistent_sample_pages控制的。
innodb_stats_method
当对InnoDB表统计索引分布信息时,服务是如何看待NULL值。这个变量有三个允许的值。nulls_equal,nulls_unequal和 nulls_ignored。对nulls_equal,所有NULL索引值被认为是相等的并且形成一个单值组,大小为NULL 值的个数,对nulls_unequal,NULL被看做不相等的。每个NULL形成唯一大小为1的值组,对nulls_ignored, NULL值被忽略。这个选项仅用于生成统计信息,影响优化器选择索引。
innodb_stats_on_metadata
当这个变量被启用,当执行元数据语句如 SHOW TABLE STATUS 或 SHOW INDEX,或当访问 INFORMATION_SCHEMA中的表或统计信息期间,Innodb更新统计信息。(这个更新类似 ANALYZE TABLE所发生的事),禁用该选项,当执行这些操作期间,不更新统计信息。这个变量设置为禁用,可以提高访问数据库有大量的表或索引的速度。它还可以提高查询InnoDB表的执行计划的稳定性。在5.6.6之前是启用,其后是禁用的。
innodb_stats_persistent
指定通过ANALYZE TABLE命令产生InnoDB 索引统计信息是保存到磁盘,保持一致性,直到后续执行 ANALYZE TABLE。还是统计信息重新计算更加频繁,如每次服务重启。这可能导致查询执行计划发生变化。这个设置是存储在每个表上,当表在创建时。你可以通过带有STATS_PERSISTENT 子句的create table 或alter table命令来修改。
innodb_stats_persistent_sample_pages
指定样品的索引页的数量,当对一个索引列进行估计基数和其他的统计信息时。如通过 ANALYZE TABLE计算这些信息。默认值是8。增加该值可以提高索引统计信息的准确性,从而改善查询的执行计划,当对InnoDB表 执行ANALYZE TABLE期间,以增加I/O为代价。此选项仅适用于当 innodb_stats_persistent 设置是ON,当该选项为一个表设置OFF,innodb启用 innodb_stats_transient_sample_pages来代替。innodb_stats_sample_pages
从5.6.3被弃用,用 innodb_stats_transient_sample_pages 代替。
innodb_stats_transient_sample_pages
指定样品的索引页的数量,当对一个索引列进行估计基数和其他的统计信息时。如通过 ANALYZE TABLE计算这些信息。默认值是8。增加该值可以提高索引统计信息的准确性,从而改善查询的执行计划,当打开InnoDB表或重新计算统计信息,以增加I/O为代价。此选项仅适用于当 innodb_stats_persistent 设置是OFF,当该选项为一个表开启了,innodb启用 innodb_stats_persistent_sample_pages来代替。该选项替代innodb_stats_sample_pages选项。详细信息见 Section 14.2.5, “InnoDB Features for Flexibility, Ease of Use and Reliability”。
innodb_strict_mode
InnoDB 对一些条件是否返回错误而不是警告。这是类似于严格的SQL模式,默认是OFF。
innodb_support_xa
启用分布式事务,为事务准备引起额外的磁盘刷新。这个设置是默认的。XA机制内部使用,并且对任何开启二进制日志接受来自一个线程和多个线程改变的数据的服务是必不可少的。如果你把它关掉,事务可以按数据库提交事务不同的顺序写入二进制日志。这可以产生不同的数据当二进制日志用于灾难恢复或复制的从服务。在复制不要关掉主服务器上的这个变量,除非你有一个不寻常的设置,只有一个线程能够改变数据。
innodb_sync_array_size
将一个内部数据结构分裂用来协调线程,因为高并发性负载有大量正等待的线程。这个设置必须在MySQL实例开始时配置,之后是不能改变的。增加这个选项值是推荐用于工作负载经常产生大量等待的线程,通常大于768。
innodb_sync_spin_loops
一个线程在被挂起之前,等待InnoDB 互斥锁成为可用的次数。默认是30.
innodb_table_locks
如果autocommit=0,InnoDB 支持lock tables;MySQL 不从LOCK TABLES … WRITE返回结果,直到所有其他线程已经释放这个表的锁。 innodb_table_locks默认值1,这意味着lock tables 引起InnoDB内部锁表,如果autocommit=0.
innodb_thread_concurrency
InnoDB试图保持小于或等于这个变量限定的操作系统中线程数同时在InnoDB内。一旦线程的数量达到了这一限制,额外的线程出于等待状态,FIFO队列来执行。等待锁的线程数不统计并发执行的线程数。这个变量正确值依赖环境和负载,尝试不同范围的值来决定适合您的应用程序的值。推荐的值为cpus内核+磁盘数量的2倍。该变量范围0到1000.默认值0 表示无限并发(无并发检查)。禁用线程并发检查使InnoDB创建和它需要多的线程,0值也禁用 queries inside InnoDB和queries in queue 计算器。在 SHOW ENGINE INNODB STATUS 输出的row小节中。
innodb_thread_sleep_delay
在进入InnoDB队列之前,InnoDB 线程睡眠时间,微秒。默认值是10000。0表示禁用睡眠。
innodb_undo_directory
InnoDB 为undo 日志创建单独的表空间文件的相对或绝对路径。典型将这些日志存储在不同的存储设备。结合innodb_undo_logs 和 innodb_undo_tablespaces 一起使用。这个变量决定在系统表空间之外的undo 日志的存储布局。默认 .表示和其他日志在同一个目录。
innodb_undo_logs(5.6.3)
在系统表空间文件定义回滚段数,这个设置是适合调优性能如果你发现对相关undo日志发生互斥锁争用。取代了innodb_rollback_segments的设置。可使用undo日志的总数,而不是活动的的数量,请参阅Innodb_available_undo_logs状态变量。
innodb_undo_tablespaces(MySQL5.6.3)
当设置非0值,undo日志 被分成表空间文件数,默认情况下,所有undo 日志是系统表空间一部分。由于undo 日志在长运行事务会变得非常大。将undo日志分成多个表空间,减少一个表空间文件最大值。表空间文件在位于innodb_undo_directory定义的目录下创建。命名格式为 innodbN,N是一系列整数。
innodb_use_native_aio
指定是否使用Linux异步i/o子系统。这个变量只适用Linux系统,并且当服务运行时,不能被修改。
通常,你不需要接触该选项,因为默认是启用的。如果在操作系统异步i/o子系统阻止Innodb启动,可以通过在配置文件中使用innodb_use_native_aio=0 启动服务。
innodb_use_sys_malloc
InnoDB 使用操作系统的内存分配算法(on)或自身(OFF)。默认值是ON。自从MySQL5.6.3,
innodb_use_sys_malloc 被弃用,在将来版本将被删除。
innodb_version
InnoDB 版本号,从5.6.11开始,InnoDB不在有单独版本号,这个值和变量version 一致。
innodb_write_io_threads
InnoDB 中用于写操作的I/O线程数。默认是4,其对应读线程数是innodb_read_io_threads 。对通常I/O调优建议,见Section 8.5.7, “Optimizing InnoDB Disk I/O”。注意:在Linux系统,运行多个MySQL 服务(通常大于12)对 innodb_read_io_threads, innodb_write_io_threads使用默认设置,并且Linux aio-max-nr的设置可以超过系统限制。理想情况下,增加 aio-max-nr 设置;作为解决方法,你可能会减少MySQL配置选项一个或两个( innodb_read_io_threads, innodb_write_io_threads)的设置。
sync_binlog
如果这个变量值N大于0,MySQL 服务每N次写二进制日志才同步(使用fdatasync())到磁盘。如果自动提交启用,每条语句被就写一次二级制日志,否则每个事务就写一次二进制日志。这个值默认是0,没有同步到磁盘,如果值为1,是最安全选择,因为在崩溃中你从二进制日志最多丢失一条语句或一条事务。然而,这也是最慢的选择(除非磁盘有一个电池支持缓存,这使得同步非常快)。
[replication ]
在slave配置选项
–abort-slave-event-count=# (数值型,默认值0,最小值0,可以在命令行或配置文件设置)。但该选项设置大于0的值n,它的影响复制行为:从服务SQL线程已经启动,那么n条日志事务被执行,过后,SQL线程不再接受任何事务了。就好像来自主服务网络连接被切断。slave线程继续执行,show slave status 结果显示slave_io_running和slave_SQL_running 都为yes.但没有任何来自中继日志的日志事务被读取。该项适用于MySQL测试和调试。不用于生产环境。)
–disconnect-slave-event-count=#
(数值型,默认值0,可以在命令行或配置文件设置,该项适用于MySQL内部测试和调试。)
–log-slave-updates (该变量是全局的,为布尔型,默认FALSE.可以通过命令行或配置文件,还可以用set命令设置。通常从服务不记录来自主服务的日志到自己二进制日志中,该选项控制是否记录来自主服务的SQL。该项有效,还必须开启–log-bin 选项。5.5和之前版本,如果没有开启–log-bin而开启该选项会报错。但在5.6会出现警告)
–log-slow-slave-statements
(该选项为布尔型的,默认OFF),当启用慢日志时,该项能记录在从服务执行超过 long_query_time 的查询)
–log-warnings[=level]
(该变量是全局的,为数值,默认1,范围0 .. 18446744073709547520,该项引起服务打印更多信息到错误日志,对于复制来说,在网络或连接失败后,服务会生成一条警告,告知在重连接成功了,并告诉你每个从服务线程启动如何。该项默认启动,禁用它–skip-log-warnings.如果该值大于1,连接中断的错误,和新连接尝试被拒绝访问的错误被写入错误日志。)
–master-retry-count=#
(该选项为数值,默认值86400。从服务在放弃连接主服务的尝试的次数,每次重试间隔由CHANGE MASTER TO 中的选项master_connect_retry控制,默认为60。在5.6.1被弃用,在MySQL以后系列将移除,应用程序应该更新使用CHANGE MASTER TO 中的MASTER_RETRY_COUNT 选项代替)
–max-relay-log-size=size 默认1G
–read-only
(除了来自从服务线程或超级用户可以执行更新操作外,不允许其他执行更新。该变量不适用于临时表)
–relay-log=file_name
–relay-log-info-file=file_name(默认relay-log.info)
–relay-log-purge={0|1}
(是否启用自动删除没有必要的中继日志,默认启用,变量是全局,可以动态设置)
–relay-log-recovery={0|1}
(服务一旦启动,就立即启用中继日志恢复,这意味着复制从服务丢弃未处理中继日志和从主服务重新取回它们,这应该用于发生在复制的从服务崩溃,确保没有损坏的中继日志被执行。默认时禁用,为了提供一个防崩溃从服务,必须启用它。
在MySQL5.6.6之前版本,对多线程从服务启用这选项,从服务因错误而失败。在那从服务不能执行change mater to.在mysql5.6.6和之后版本你可以使用start_slave_until_sql_after_mts_gaps来确保这期间的中继日志被执行,然后使用change master to 是失败的从服务指向新主服务。
)
–relay-log-space-limit=size
(该选项最大限制从服务所有中继日志总共的大小,0表示没有限制。对从服务的硬盘空间有限,该选项是用的。当达到该限制,io线程停止从主服务读取二进制日志事务,直到SQL线程已经赶上并删除没有用的中继日志。注意这个限制不是绝对的:有些情况,SQL线程在它可以删除中继日志之前需要更多事务日志,在这种情况,io线程只要超过该限制,sql线程才能删除中继日志。不这样做将引起一个死锁。如果–max-relay-log-size为0,你不应设置relay-log-space-limit小于 –max-relay-log-size 或–max-binlog-size的两倍)。在该情况下,io有等待空间的机会,
因为relay-log-space-limit被超过了,但是SQL线程没有日志可删来满足io线程。这强制io线程暂时忽略–relay-log-space-limit的限制)
–replicate-do-db=db_name
这选项的影响依赖复制使用SBR还是RBR(详细见http://dev.mysql.com/doc/refman/5.6/en/replication-options-slave.html#option_mysqld_replicate-do-db
–replicate-ignore-db=db_name
–replicate-do-table=db_name.table_name
–replicate-ignore-table=db_name.tbl_name
–replicate-rewrite-db=from_name->to_name
–replicate-wild-do-table=db_name.tbl_name
–replicate-wild-ignore-table=db_name.tbl_name
–replicate-same-server-id
(使用在从服务,通常你使用默认值0,来防止死循环引起循环复制,设置1,从服务不跳过自己服务ID的事务。仅在罕见配置设置。如果启用 –log-slave-updates 不能设置1.默认下,从服务IO线程不写二进制日志事务到中继日志,当它们有相同服务ID(这种优化帮助节省硬盘空间))
–report-host=host_name
从服务的主机名或IP地址,将在从服务登记时发给主服务。在主服务使用show slave hosts将显示从服务的主机名和或ip地址。
–report-password=password
–report-port=slave_port_num
–report-user=user_name
–show-slave-auth-info
(该选项是布尔型,默认是FALSE,在主服务使用show slave hosts 显示从服务启用–report-user和–report-password
的用户名和密码)
–slave-checkpoint-group=#
(5.6.3引入该选项,数值型,默认512,范围32..524280。在checkpoint操作被调用更新它的状态如show slave status(做show slave status 会执行checkpoint操作)之前,从服务多线程处理最大事务的数量数。
如果没有启动从服务多线程,该项就不起作用。
该项结合–slave-checkpoint-period以这样方式工作:任一选项限制被超出,执行checkpoint操作,并且事务数量和过去时间的计数器被重置。
最小允许的值是32,除非构建服务使用–with-debug,在这种情况下最小可以设置1。有效值总是8的倍数。如果设置值不是8的倍数,但服务存储时,下降到最近8的倍数的值。
)
–slave-checkpoint-period=#
(5.6.3引入该选项,数值型,默认值300,范围1..4G.毫秒,与上面的选项的限制一致)
–slave-parallel-workers
(5.6.3引入该选项,数值型,默认值0,范围0..1024。设置从服务线程数来并行执行复制中事务,默认是0,不并行执行。最大1024.
当启用并行执行,从服务SQL线程充当从服务工作线程协调者,其中事务基于数据库分配。这意味着在从服务一个工作线程可以连续处理指定数据库的事务而不要等待其他数据库完成更新。当前从服务多线程实现假定数据被分隔成每个数据库,并且在指定数据库的更新的相对顺序和在主服务是一致的,为了正确工作。然而,事务不能包含任何两个数据库之间的操作
由于不同的数据库的上的事务在从服务执行的顺序可以不同于主服务。检查最近执行的事务并不保证主服务上的所有之前的事务在从服务已经被执行了。当使用多线程,必然影响到日志和恢复。当在从服务使用多线程,有关如何解析二进制日志信息参照 Section 13.7.5.35, “SHOW SLAVE STATUS Syntax”。另外,多线程从服务意味不支持 START SLAVE UNTIL
您还应该注意,在MySQL 5.6.7和之后,在不同数据库的表执行外键之间的关系导致从服务多线程使用顺序而不是并行的模式,会对性能产生负面的影响。(错误# 14092635)
注意:在MySQL 5.6 .3该选项值设置(或对应系统变量 slave_parallel_workers )并不总是正确;这个问题在MySQL 5.6.4修复(错误# 13334470)。
)
–slave-pending-jobs-size-max=#
(5.6.3引入该选项,数值型,默认值16M,范围1024..18EB,块大小1024.对于多线程从服务,这选项设置最大内存(字节)可用于从服务工作队列存放没有处理过的日志事务,没有启用多线程,该项对从服务没有影响。
注意:该值不能小于主服务上的MAX_allowed_packet,否则一个从服务工作队列已满,然而还有其他来自主服务的事件被处理。

–skip-slave-start
–slave_compressed_protocol={0|1}
–slave-load-tmpdir=file_name
(默认/tmp)
–slave-skip-errors={err_ode1,err_code2…}
(默认关闭,它可用值为错误的号码。通常,当在从服务发生错误,复制停止。这你机会手动去解决不一致性的数据。这个选项告诉从服务SQL线程继续复制当一个语句返回任何错误出现在该选项值。对于错误码应该使用错误日志或show slave status 提供的。
MySQL5.6支持一个额外缩写值ddl_exists_errors.它等效于1007,1008,4050,1051,1054,1060,1061,1068,1094,1146错误
)
–slave-sql-verify-checksum={0|1}
(该项为布尔值,默认0,当启用该选项,从服务检查来自中继日志校验和,如果不匹配,从服务发出一个错误,停止执行。该项5.6.2添加的,默认禁用)
过时选项
以下选项从MySQL 5.6移除。如果你试图使用这些选项开启mysqld,服务以unknown variable 错误中止。以前设置复制参的数附带这些选项,您必须使用change master to …来声明。
–master-host –master-user –master-password –master-port –master-connect-retry –master-ssl
–master-ssl-ca –master-ssl-capath –master-ssl-cert –master-ssl-cipher –master-ssl-key
用于复制从服务的系统变量
下面的列表描述了系统变量控制复制中从服务器。他们在服务器启动可以设置和其中的一些可以在运行时改变选项设置。使用复制奴隶列出本节前面。用于复制从服务器的选项在前面已列出。
init_slave=#
(该变量是动态,全局的,这变量类似init_connect,但是从服务器每次开始SQL线程都会执行该字符串。字符串的格式是init_connect变量是一样的。
注意:在执行init_salve之前SQL线程发送回复给客户端。因此,不能保证init_salve 被执行当start slave 返回。更多信息见 Section 13.4.2.5, “START SLAVE Syntax”,
)
log_slow_slave_statements
(该变量是动态,全局的,布尔类型。默认OFF,当启用了慢速查询日志,这个变量记录在从服务执行已经超过long_query_time秒的查询。MySQL5.6.11添加此变量 )
master_info_repository
(该变量是动态,全局的,值为FILE,TABLE, 该变量决定从服务记录主服务的状态和连接信息到文件(master.info)
还是表(mysql.slave_master_info)。MySQL5.6引入该选项)
relay_log
(该变量是静态的,全局的)
relay_log_basename
(该变量是静态的,全局的。默认’datadir + ‘/’+hostname +’-relay-bin’ ,包含名称和中继日志的完整路径。
MySQL5.6.2引入该变量 )
relay_log_index
(该变量是静态的,全局的)
relay_log_info_file
(该变量是静态的,全局的,默认relay-log.info)
relay_log_info_repository
(该变量是动态,全局的,值为FILE,TABLE, 该变量决定从服务记录中继日志位置信息到文件(relay-log.info)
还是表(mysql.slave_relay_log_info)。MySQL5.6引入该选项)
relay_log_recovery
(该变量是动态,全局的,布尔型,一旦服务启动,启用自动中继日志恢复。这意味着丢弃所有未处理中继日志,从主服务重新检索它们。
在MySQL 5.6.5和之前版本,它动态改变这个全局变量;从MySQL 5.6.6,它是只读的。(错误# 13840948)无论MySQL服务器是什么版本,其值可以改变通过启动slave使用–relay_log_recovery选项,应该使用在复制从服务崩溃后确保没有损坏中继日志处理可以使用该变量,必须使用它以保证防崩溃的从服务。默认值为0(禁用)。
当启用relay_log_recovery和从服务必须终止,因为在多线程模式下会遇到错误,如果在日志中位置有任何间距,你不能执行change master to 。从MySQL 5.6.6,您应该使用 START SLAVE UNTIL SQL_AFTER_MTS_GAPS ,以确保所有的空隙被处理后切换回单线程模式或执行change master to 语句。
)
slave_exec_mode
(该变量是动态,全局的,默认STRICT(ALL),IDEMPOTENT(NDB),控制用IDEMPOTENT还是用 STRICT 方式处理复制中冲突和错误检查。 IDEMPOTENT 模式导致抑制重复键和键不存在的错误,和其他一些特殊的复制场景。STRICT是默认的,适合其他大多数场景)
slave_transaction_retries
(该变量是动态,全局的。默认10,如果一个复制从服务SQL线程无法执行事务,由于Innodb死锁或事务执行时间超过Innodb的innodb_lock_wait_timeout,),它会在出现错误停止之前自动重试 slave_transaction_retries 次数。默认值是10。
slave_type_conversions
(该变量是静态,全局的。控制类型转换模式,当使用基于行的复制才有效。它的值以逗号分隔,设置零或多个元素从列表:ALL_LOSSY, ALL_NON_LOSSY。将这个变量设置为一个空字符串类型来不允许在主从之间进行类型转换。修改需要重新启动从服务才能生效。)
sql_slave_skip_counter
(类型为数值,动态,全局的,从服务跳过事件的数量。这选项与基于GTID复制不兼容,当使用 –gtid-mode=ON,设置改选项为0,在MySQL5.6.10和以后版本,尝试这样做是特禁止的 (Bug #15833516)。当你使用gtid-mode=ON,要跳过事务,在主服务使用gtid_executed来代替。如何做,详细见 Injecting empty transactions
重点:如果指定事件的数量通过设置这个变量会导致从服务从事件组中间开始,从服务继续跳过,直到找到下一个事件的开始,从那点开始。有关更多信息,请参见 Section 13.4.2.4, “SET GLOBAL sql_slave_skip_counter Syntax”.
)
sync_master_info=#
(该变量是数值型,动态,全局,在MySQL5.6.6之前默认为0,MySQL5.6.6和之后版本默认都是10000。该变量是否有效取决于master_info_repository设置FILE或TABLE。master_info_repository = FILE 。如果 sync_master_info值大于0 ,每sync_master_info 事件之后,同步master.info文件到硬盘(使用fdatasync())如果是0,MySQL服务器不执行同步master.info到磁盘;相反,服务器依赖于操作系统定期冲洗其内容。
master_info_repository = TABLE 如果sync_master_info 该值大于0,在每sync_master_info事务,从服务更新它的master_info_repository 表。如果是0,这个表是从不更新。
)
sync_relay_log_info=#
(该变量是数值型,动态,全局,在MySQL5.6.6之前默认为0,MySQL5.6.6和之后版本默认都是10000。该变量是否有效取决于 relay_log_info_repository设置FILE或TABLE,还依赖存储引擎是事务还是非事务。
如果relay_log_info_repository=file,sync_master_info值N大于0,每N 事件之后,同步relay-log.info 文件到硬盘(使用fdatasync()).如果是0,MySQL服务器不执行同步relay-log.info到磁盘;相反,服务器依赖于操作系统定期冲洗其内容。
sync_relay_log_info =TABLE,

5.1.5 Using System Variables

MySQL 服务器维护许多的系统变量,表明它是如何配置。在5.1.4 服务器”系统变量”,描述了这些变量的意义。

每个系统变量都有一个默认值,系统变量可以设置在服务器启动时使用命令行选项和文件中的选项,

其中大多数可以动态修改,在服务器运行时 通过SET语句,这使得你可以不必停止和重启该服务器的操作

服务器维护2种系统变量,全局变量影响服务器的整体运行,会话变量会影响单独的客户端的操作。一个给定的系统变量可以有全局的和会话级别的值,

全局和会话系统变量如下:

  1. 当服务器启动时, 它的所有全局变量初始化为它们的默认值, 可以改变这些默认值,在命令行或者选项文件中指定

2.server 也提供给每个客户连接一组会话变量,客户端的会话变量在连接时使用当前值 。比如, 客户端的SQL模式由session sql_mode控制

系统变量的值可以通过在命令行或选项文件中设置,当你使用启动选项设置一个变量,值可以使后缀K,M,G 因此,下面的命令从设置query cache size =16M 和最大数据包=1G

mysqld –query_cache_size=16M –max_allowed_packet=1G

在一个选项文件,设置为:
[mysqld]
query_cache_size=16M
max_allowed_packet=1G

大小写无关紧要,16M和16m是等效的

如果你想要限制系统变量的最大值,在系统运行时使用SET语句,

你可以指定最大值使用选项 –maximum-var_name=value 在server 启动时

比如,为了防止 query_cache_size的值超过32M,use the option –maximum-query_cache_size=32M.

许多变量是动态的, 使用SET 语句在server 运行时更改。

1.明确地表明,变量是一个全局变量,在它的名字之前,加上GLOBAL ..需要设置全局变量的超级特权。

2.明确的表示一个变量是一个session 变量,在它的名字前加上 SESSION

3.LOCAL and @@local. are synonyms for SESSION and @@session..

4.如果前缀没有指定, SET 改变session 变量的值

一个语句可以包含多个变量赋值,以逗号分隔。如果您设置了几个系统变量,则在该语句中最新的全局或会话修改器使用以下变量,该变量没有指定的修改器

SET sort_buffer_size=10000;
SET @@local.sort_buffer_size=10000;
SET GLOBAL sort_buffer_size=1000000, SESSION sort_buffer_size=1000000;
SET @@sort_buffer_size=1000000;
SET @@global.sort_buffer_size=1000000, @@local.sort_buffer_size=1000000;

@@var_name 系统变量的语句兼容其他数据库

如果你改变了一个session 变量值, 会话变量的值生效直到你会话结束 ,session 变量值对其他客户端不可见。

如果你改变了一个全局系统变量的值, 值被记录用于新的连接(为了使一个全局系统永久生效,你需要写在一个选项文件里)

改变的值对任何客户端有效 然而,全局变量不影响相应的会话变量

为了防止不正确的使用,MySQL 产生一个错误 当你使用SET GLOBAL 变量,这个变量只能用于 SET SESSION

或者你没有指定GLOBAL 在设置一个全局变量的时候。

设置 SESSION 变量为GLOBAL 变量 或者一个GLOBAL 变量为 默认值 使用DEFAULT 关键字,

SET max_join_size=DEFAULT;
SET @@session.max_join_size=@@global.max_join_size;

注意所有的系统变量可以设置为DEFAULT,在这个例子中,使用默认 结果导致一个错误:

你可以指向特定的global 或者session 系统变量的值 在表达式使用@@-modifiers 其中一个,您可以在选择语句中检索值:

mysql> SELECT @@global.sql_mode, @@session.sql_mode, @@sql_mode;
+——————————————–+——————————————–+——————————————–+
| @@global.sql_mode | @@session.sql_mode | @@sql_mode |
+——————————————–+——————————————–+——————————————–+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+——————————————–+——————————————–+——————————————–+
1 row in set (0.00 sec)

当你指向一个系统便令(但是,你没有指定@@global,或者@@session) mysql 返回session value 如果存在,否则就是global value

(不同于 set @@var_name = value, 这个指向session value)

注意:

一些通过SHOW VARIABLES 显示的变量可能通过SELECT @@var_name 不可见

5.1.7 Server SQL Modes

MySQL服务器可以在不同的SQL操作模式,并能应用这些模式的不同,不同的客户,根据不同的sql_mode系统变量的值。数据库管理员可以设置全局SQL模式相匹配的网站服务器的操作要求,以及每个应用程序可以设置会话的SQL模式自身的要求。

模式影响SQL语法MySQL支持和数据验证检查执行。这使得它更容易在不同的环境中使用MySQL

Setting the SQL Mode

默认的sql 模式在MySQL 5.6.6 和后面的版本是NO_ENGINE_SUBSTITUTION
mysql> show variables like ‘%sql_mode%’;
+—————+——————————————–+
| Variable_name | Value |
+—————+——————————————–+
| sql_mode | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+—————+——————————————–+
1 row in set (0.00 sec)

在MySQL 5.6.5 和早期版本,它是空的(没有模式设置)

设置SQL mode 在server 启动时,使用 –sql-mode=”modes” option 在命令行,或者 在选项文件里 比如my.cnf

请求sql mode ,设置一个空的字符串 使用–sql-mode=”” on the command line, or sql-mode=”” in an option file.

注意:

MySQL 安装程序会配置SQL_MODE 在安装期间, 比如mysql_install_db 会创建一个默认的my.cnf 文件在base 安装目录下。

会包含一行设置SQL mode

如果SQL模式不同于默认的或与你所期望的,检查在一个选项文件,服务器在启动时读取设置。

在运行时候改变SQL mode, 设置global or session sql_mode :

SET GLOBAL sql_mode = ‘modes’;
SET SESSION sql_mode = ‘modes’;

设置全局变量需要超级权限,并影响所有与该时间连接的客户端的操作。设置会话变量只影响当前客户端。每个客户端可以在任何时候改变它的会话sql_mode值。

查看当前的global 或者 session sql_mode 值,使用下面的语句:
SELECT @@GLOBAL.sql_mode;

SELECT @@SESSION.sql_mode;

重要:

SQL 模式和用户自定义的分区,在创建和插入到分表后 改变server 的SQL MODE ,可以导致这些表的行为的重大变化,

可能会导致数据丢失或损失. 我们强烈建议你不要更改SQL模式,一旦你已经创建和使用了自定义分区表。

当复制分区表的时候. master 和slave 不同的SQL 模式 也会导致问题,最好是 master 和slave 的SQL模式一致

The Most Important SQL Modes

1.ALLOW_INVALID_DATES

不执行完整的日期检查,只检查 日期是在1-12的范围内, 日期是在1-31.这是非常方便的用于Web应用,

你可以获得 年,月,日 在三个不同的fields,你需要存储用户的插入数据(没有日期验证)

这个模式适用于日期和日期列, 它不能用于实践戳列,那个总是需要一个有效的日期。

该server 要求 month 和day 值是合法的, 而不是仅仅是1-12和1-31,

关闭严格模式, 错误的日期 比如‘2004-04-31’ 会转换为’0000-00-00’ 和产生一个warn

启用严格模式, 错误的日期会产生错误, 要允许这样的日期,enable ALLOW_INVALID_DATES.

ANSI_QUOTES

对待 “”” 作为一个标识引号字符(像 “’” 引号字符) 而不是字符串引号字符。你仍旧可以使用”’” 在这个模式启用的情况下,

当 ANSI_QUOTES enabled, 你不能使用双引号引用字符,因为它被解释为一个标识符

ERROR_FOR_DIVISION_BY_ZERO

error_for_division_by_zero 模式影响了 除以/0, 包括 MOD(N,0).

对于数据变更操作(INSERT,UPDATE), 它的影响有 strict SQL mode is enabled.

1.如果该模式未启用, 被0除后 插入NULL 产生warning

  1. 如果模式启用, 除以0倍插入NULL 产生一个warning

  2. 如果这个模式和strict mode 被启用,除以0 产生一个错误,除非指定IGNORE。

对于INSERT IGNORE and UPDATE IGNORE, 除以0 插入NULL 产生一个warning

对于SELECT ,除以0 返回NULL, 启用ERROR_FOR_DIVISION_BY_ZERO 导致产生一个warning, 无论是否启用strict mode.

5.1.8 Server Plugins

5.1.8.1 Installing and Uninstalling Plugins
5.1.8.2 Obtaining Server Plugin Information

MySQL 支持API 插件可以用来创建server 组件, 插件可以在server 启动的时候加载, 在不需要重启server 的情况下加载和卸载插件。

MySQL分布包括几个插件,实现服务器扩展:

1.用于认证试图通过客户端连接到MySQL服务器的插件。插件可用于多种身份验证协议

2.一个密码验证插件实现密码强度的政策和评估潜在的密码强度

3.半同步复制插件实现接口的复制能力,允许master 处理至少一个slave已经响应每个transaction

4.MySQL企业版包括监测和连接和查询活动日志审计插件

5.MySQL企业版包括一个防火墙插件实现了应用级防火墙使数据库管理员来允许或拒绝基于匹配对SQL语句执行语句模式接受白名单

6.MySQL企业版包括一个线程池线程管理连接插件,通过有效地管理语句执行线程大量客户端连接增加服务器性能

5.1.11 Server Response to Signals

在Unix上,信号可以发送给进程,mysqld mysqld响应发送给它的信号如下:

1.SIGTERM导致服务器关闭

2.SIGHUP 导致服务器重新加载授权表和flush tables,logs,the thread cache和host cache.

这些动作就像是各种flush 语句

5.1.12 The Shutdown Process

服务器关闭过程发生如下

  1. shutdown process 被初始化:

这个可能发生的几种方法。例如, 一个用户具有SHUTDOWN 权限能执行一个mysqladmin shutdown 命令。

mysqladmin 可以用于 任何平台。

  1. 如果需要的话,该服务器将创建一个关机线程:

取决于如何发起关机, server 可能会创建一个线程来处理关机进程。

如果客户端请求关机,会创建一个关机thread. 如果关机是收到SIGTERM信号的结果,

信号 thread 可能本身来处理关闭, 或者会创建一个单独的线程来做。

如果服务器试图创建一个关闭线程,并且不能(例如,如果内存耗尽),它会发出一个诊断信息,出现在错误日志中

Error: Can’t create thread to kill server

3.server 停止接收新的连接

防止新的活动被创建在关机时, server 停止接收客户端的连接 通过关闭 连接句柄

4.The server terminates current activity. server 中断当前的activity

对于每个 thread 相关的客户端连接,server 中断客户端的连接, 标记threads 已经被kill.

threads die 当它们注意到 它们被标记了, 空间的连接的threads 迅速die.

对于打开事务的线程, 事务被回滚

注意:

如果一个线程在修改一个非事务表,比如多行修改或者插入可能离开表 部分的被更新,因为操作在完成前被中断

如果server 是一个master 的复制server, 它对待当前slave 连接的相关threads 和其他的客户端 threads一样

也就是说, 每一个被标记为死忙和退出.

如果服务器是一个slave的复制server,它停止 slave I/O 和SQL threads,如果它们还活着, 在标记客户端 threads 为killed之前,

SQL thread 是允许完成它当前的语句(来避免导致复制问题),然后在停止。如果SQL thread 那个店正在一个事务中间,

server 等到当前的复制 事务组(如果任何) 已经执行完毕,或直到用户执行一个KILL 查询或者KILL 连接语句。

对于非事务语句不能被回滚, 为了保证复制的安全,只有事务表可以使用。

注意:

为了强制crash safety 在slave上,你需要在slave上带上–relay-log-recovery

mysql> show variables like ‘%relay_log_recovery%’;
+——————–+——-+
| Variable_name | Value |
+——————–+——-+
| relay_log_recovery | ON |
+——————–+——-+

5.服务器关闭或关闭存储引擎

在这个阶段, server flush table cache 关闭所有打开的表

没一个存储引擎执行必要的动作对于它管理的表, InnoDB flushes 它的buffer pool 到磁盘(unless innodb_fast_shutdown is 2)

写当前的LSN 到tablespace ,中断它自己的内部threads,MyISAM flushes 任何挂起的index

5.2 MySQL Server Logs
[+/-]

5.2.1 Selecting General Query and Slow Query Log Output Destinations
5.2.2 The Error Log
5.2.3 The General Query Log
5.2.4 The Binary Log
5.2.5 The Slow Query Log
5.2.6 The DDL Log
5.2.7 Server Log Maintenance

MySQL服务器有几个日志,可以帮你找出正在进行的活动:

Log Type Information Written to Log

Error log Problems encountered starting, running, or stopping mysqld

                    mysql 启动,运行,和停止时遇到的问题

General query log Established client connections and statements received from clients
客户端建立的连接和 收到的客户端的语句

Binary log Statements that change data (also used for replication)
记录改变数据的语句(也用于复制)

Relay log Data changes received from a replication master server
从master server 接收改变的数据

Slow query log Queries that took more than long_query_time seconds to execute

DDL log (metadata log) Metadata operations performed by DDL statements

默认情况下, 没有启用日志,出了Windows 上的error log(DDL log 在需要的时候创建,没有用户配置选项)

默认的, server 把所有启动的日志写在数据目录里, 你可以强制server 关闭和重新打开日志文件(或者在有些例子中切换到新的日志) 通过使用flush logs.

Log flushing 发生当你执行FLUSH LOGS 语句, 执行mysqladmin 带上flush-logs 或者refresh 参数,或者执行

mysqldump 带上–flush-logs or –master-data 选项。

此外,binary log 被刷新 当达到max_binlog_size system variable 设置的最大值

max_binlog_size = 512M
binlog_cache_size = 128K

你可以在运行时控制general query和慢日志,你可以启用或禁用日志记录,或者改变日志的名字。

你可以告诉server 写general query 和慢日志 到log table 或者log file

relay log 只用于slave 的复制环境,用来保持从master接收的数据变化, 在slave上应用。

5.2.1 Selecting General Query and Slow Query Log Output Destinations

选择 General Query and Slow Query Log

MySQL 服务器提供了灵活的控制对 general query log and the slow query log的控制,如果这些日志启用。

日志条目可能的目的地是general_log and slow_log tables

Log control at server startup –log-output 选项指定了log output 的目的地,这个选项它本身不启用日志 . Its syntax is –log-output[=value,…]:

| log_output | FILE

  1. 如果–log-output 指定了一个值, 值应该是一个逗号分隔的列表或者一个或多个单词表(log to tables) 或者NONE(do not log to tables or files).

如果存在,优先于其他任何说明字符。

2.如果省略日志输出,默认的日志记录目的地是文件。

general_log system variable 控制了记录general query 的日志和日志的目的地。

如果在server 启动的时候,general_log用1或0来启用或者禁用参数。 指定文件的名字,设置general_log_file 变量
mysql> show variables like ‘%general_log%’;
+——————+————————-+
| Variable_name | Value |
+——————+————————-+
| general_log | OFF |
| general_log_file | /data01/mysql/slave.log |
+——————+————————-+
2 rows in set (0.00 sec)

mysql> show variables like ‘%slow_query%’;
+———————+——————————+
| Variable_name | Value |
+———————+——————————+
| slow_query_log | ON |
| slow_query_log_file | /data01/mysql/slave-slow.log |
+———————+——————————+
2 rows in set (0.00 sec)

同样的,slow_query_log variable 控制了记录到slow query log 和选择日志目录 通过设置slow_query_log_file

如果启用了日志, server打开相应的日志文件写入启动信息 然而,除非 FILE log 目的地被选择,否则进一步记录查询到文件就不会发生

例子:

1.写慢查询日志条目到log table 和log file,使用–log-output=TABLE,FILE 来选择log 日志的目录和启用general query log。

2.写general 和慢查询日志到log tables ,使用–log-output=TABLE来选择表作为日志目的地,设置 –general_log and –slow_query_log来启用日志

3.写慢查询日志条目只能到log file,使用–log-output=FILE 来选择文件作为日志目录,设置 –slow_query_log 来启用慢日志。

(在这种情况下,因为默认的日志目录是FILE,你可以省略–log-output option)

在运行时日志控制: 系统变量 相关的日志表和文件:

  1. 全局的log_output 系统变量 表明当前日志的目的地, 它可以在运行的时候改变目的地

2.全局的general_log 和slow_query_log 变量 表明 是否全局的 query 和slow query 日志时启用的 enabled (ON) or disabled (OFF)

你可以设置这些变量在运行的时候 来控制是否启用日志

3.全局的general_log_file 和slow_query_log_file 变量表明了general query 和 慢日志的名字,

使用为日志输出表提供以下好处:

5.2.2 The Error Log

错误日志中包含的信息表明 mysqld 是什么时候启动和停止的,也有任何关键的错误 在server运行的时候。

如果mysqld 通过某个表需要自动checked 或者repaired,它将消息写入到错误日志。

在某些操作系统中,错误日志包含堆栈跟踪 如果mysqld dies的话,trace文件能够用于确认为什么mysqld died

如果mysqld_safe 被用于启动mysqld 和mysqld 意外死忙, 重启Mysqld, 写重启mysqld的消息到error log.

在下面的讨论中, “console”就是指stderr,标准的错误输出,是你的终端或者console

在UNIX和UNIX系统,mysqld写入错误日志信息如下:

1.没有–log-error,mysqld 写错误日志到console

2.With –log-error[=file_name],mysqld 写错误信息到一个错误日志文件,server 制定的文件,如果存在,

在数据目录创建它,除非给出一个绝对路径名来指定一个不同的目录。如果没有文件的名称,默认名称是host_name.err在数据目录。

注意:

常见的用Yum或者APT 包来安装和配置错误日志的目录 是在/var/log 像 log-error=/var/log/mysqld.log 在server 配置文件里,

删除filename 那么错误日志会到默认的设置,在数据目录下

5.2.4 The Binary Log

5.2.4.1 Binary Logging Formats
5.2.4.2 Setting The Binary Log Format
5.2.4.3 Mixed Binary Logging Format
5.2.4.4 Logging Format for Changes to mysql Database Tables

binary log 包含了 描述数据库改变的”events” ,比如表的创建操作和对表数据的改变。

它也包含 语句的events 潜在的改变记录的语句(比如,一个DELETE 匹配0条记录),除非row-based logging 启用).

binary log 也包含信息关于 每个语句更新数据花费的时间。binary log 有两个重要的目的:

1.用于复制,binary log 在master server 上提供数据更改的记录 发送到slave servers上。

master server sends 发送包含binary log 的events 到它的slaves, 执行那些events 做相同的改变(在slave上)

2.某些数据恢复需要使用binary log,当一个备份被还原,binary log里的events被记录 在备份后需要重新执行。

这些事件将数据库带到日期。

基于时间恢复指的是恢复数据的变化,从一个给定的时间点。典型的, 这种类型的恢复是在恢复一个全备份后,把server 带到指定时间。

基于时间点恢复

binary log 不能用于比如 SELECT 或者 SHOW ,那些不修改数据的操作。记录所有的语句(比如, 诊断查询问题),使用常用的查询日志

启动binary logging 的server 会使性能轻微的慢, 然而, 启用binary log 的好处是你可以配置复制,和恢复操作通常超过这个小小的性能递减。

MySQL 5.6.2 开始,binary log 是crash-safe,,只有完整的events 或者 事务被记录或者读取

在MySQL 5.6.3, 语句中的密码写入到binary log 会被server 重写不会真正的在文本里出现。 在 MySQL 5.6.3之前, 语句中的密码 不会被重写

下面的讨论 描述一些server的选项和变量,影响binary 记录的操作

启用binary log,启动server 带上–log-bin[=base_name] 选项。如果没有指定base_name,默认的名字是pid-file选项(默认是主机名) 跟着-bin.

如果提供一个扩展的日志名称(例如, –log-bin=base_name.extension), 扩展是默默的被忽略。

mysqld 追加一个数字到binary log的basename 来生成一个二进制文件名。每次服务器创建新的日志文件时,该数字会增加,

创建一个有序的文件序列。服务器创建一个新的文件在每次启动或者flushed 日志的时候。 server 也会自动创建一个新的binary log

文件 在当前的log 大小达到max_binlog_size。一个二进制文件可能会超过最大为max_binlog_size的值,如果你使用大的事务 因为一个事务

可能被一块写入文件,不会分裂到多个文件

要跟踪哪些二进制日志文件被使用, mysqld 也创建一个binary log index 文件包含了所有使用过的binary log 文件。默认的,和binary log 文件有相同的Basename

扩展名为.index.

binary log file 通常表示一个单独的数字编号的文件 包含了数据库的evnets

客户端有SUPER 权限可以关闭binary logging ,通过设置sql_log_bin=0 。

默认情况下,server 记录了event的长度预计event 本身,并使用此验证事件是否正确写入。

events 的格式记录在binary log 是依赖二进制记录格式的,支持三种格式类型:基于行的日志记录,基于语句的日志记录和mixed-base 的日志记录。

服务器评估–binlog-do-db and –binlog-ignore-db选项以同样的方式,-replicate-do-db and –replicate-ignore-db options.

一个复制的slave server 默认 不写它自己的binary log,从master 接收到的任何数据修改。为了记录这些修改,启用 –log-slave-updates option

你可以删除所有的binary log 文件 用reset master 语句,或一个子集 用PURGE BINARY LOGS.

如果你使用复制,你不应该删除旧的binary log 文件在Master上,直到你确保,没有slave 需要使用它们。例如,

如果你的slave从来不是运行超过3天, 每天一次,你可以执行mysqladmin flush-logs 在master 上,删除任何的logs (3天前的日志)

你可以手动删除files, 但是 最好使用purge binary logs,是更加安全的更新binary log index 文件

你可以显示binary log 的内容用mysqlbinlog功能, 这个是有用的 当你需要重新处理日志里的语句用于恢复操作。

shell> mysqlbinlog log_file | mysql -h server_name

mysqlbinlog 也可以用来显示复制中继日志文件的内容,因为中继日志和binary log 有相同的格式。

binary log 在语句和事务完成后 记录, 在任何所被释放或者任何提交之前, 这个确保了日志被记录按提交的顺序。

对非事务表的更新 执行后被立即存储在binary log

对于一个未提交的事务,所有的更新(UPDATE,DELETE或者INSERT) 改变事务表 比如InnoDB 表会被cache 知道COMMIT 语句被server 接收。

在这个点上, mysqld 写整个事务到binary log 在提交被执行前。

对于非事务表的修改不能回滚,如果一个事务被回滚包括了对非事务表的修改, 整个事务被记录在一个回滚语句

当一个thread 开始处理事务,它分配一个binlog_cache_size 的buffer,如果语句比这个大, thread 打开一个临时的文件来存储事务,线程结束时删除临时文件。

Binlog_cache_use 状态变量显示了使用buffer 的事务数(也有可能是临时文件)用于存储语句,Binlog_disk_use 状态变量显示了有多少交易实际上已经使用了临时文件。

这两个变量可用于调整binlog_cache_size 以足够大的值,避免了临时文件的使用。

max_binlog_cache_size 系统变量(默认4GB)可以用来限制用于缓存多个语句事务

如果使用binary log 和 row based logging,冲突的insert 会被转换为 普通的inserts for CREATE … SELECT or INSERT … SELECT 语句.

这样做确保你可以重新创建一个准确的备份通过应用日志在备份操作期间,如果你是使用基于语句的logging,则将原始语句写入日志。

binary log 格式 有一些已知的限制,影响从备份的恢复。

默认情况下每个写入binary log 的日志是不同步的。如果操作系统或机器(只只是MySQL serve)crashes,

有可能 Binary log 最后的语句丢失了。为了避免这种情况,使用sync_binlog 系统变量来同步binary log 到磁盘 每N次提交。

为sync_binlog安全值是1,但这也是最慢的。即使sync_binlog设置为1,仍有表的内容以及在碰撞情况下的二进制日志内容不一致的机会。

5.4 Tracing mysqld Using DTrace

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

scan724

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值