10bet网址
MySQL 5.7参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国Ltr)- 36.3 mb
PDF (A4)- 36.3 mb
手册(TGZ)- 235.4 kb
手册(Zip)- 347.1 kb
信息(Gzip)- 3.3 mb
信息(邮政编码)- 3.3 mb
本手册节选

14.8.1 InnoDB启动配置

第一个要做的决定InnoDB配置包括数据文件、日志文件、页面大小和内存缓冲区的配置,这些都应该在初始化之前进行配置InnoDB.修改之后的配置InnoDB初始化过程可能涉及非平凡的过程。

本节提供有关指定的信息InnoDB配置文件中的设置,查看InnoDB初始化信息,以及重要的存储注意事项。

在MySQL配置文件中指定选项

因为MySQL使用数据文件、日志文件和页面大小设置来初始化InnoDB在初始化之前,建议您在MySQL启动时读取的选项文件中定义这些设置InnoDB.通常情况下,InnoDB在MySQL服务器第一次启动时初始化。

你可以放置InnoDB设置(mysqld)服务器启动时读取的任何选项文件的组。MySQL选项文件的位置描述在第4.2.2.2节“使用选项文件”

为了确保mysqld方法只从特定文件读取选项——defaults-file选项作为启动服务器时命令行的第一个选项:

mysqld——defaults-file =path_to_option_file

查看InnoDB初始化信息

查看InnoDB启动时的初始化信息,启动mysqld从命令提示符,它将初始化信息打印到控制台。

例如,在Windows上,如果mysqld位于C:\Program Files\MySQL\MySQL Server 5.7\bin,像这样启动MySQL服务器:

C:\程序文件\MySQL\MySQL Server 5.7\bin\mysqld"——控制台

在类unix系统中,mysqld位于箱子MySQL安装目录:

$> bin/mysqld——user=mysql &

如果您没有将服务器输出发送到控制台,请在启动后检查错误日志以查看初始化信息InnoDB在启动过程中打印。

有关使用其他方法启动MySQL的信息,请参见第2.10.5节“自动启动和停止MySQL”

请注意

InnoDB在启动时不打开所有用户表和相关数据文件。然而,InnoDB是否检查数据字典中引用的表空间文件是否存在。如果找不到表空间文件,InnoDB记录错误并继续启动顺序。重做日志中引用的表空间文件可能会在重做应用程序的崩溃恢复过程中打开。

重要的存储注意事项

在进行启动配置之前,请检查以下与存储相关的注意事项。

  • 在某些情况下,可以通过将数据和日志文件放在不同的物理磁盘上来提高数据库性能。还可以使用裸磁盘分区(裸设备)用于InnoDB数据文件,可以加快I/O。看到为系统表空间使用裸磁盘分区

  • InnoDB是一个事务安全(ACID兼容)的存储引擎,具有提交、回滚和崩溃恢复功能,以保护用户数据。然而,它不能这样做如果底层操作系统或硬件不像宣传的那样工作。许多操作系统或磁盘子系统可能延迟或重新排序写操作以提高性能。在某些操作系统上,非常fsync ()应该等待文件的所有未写数据被刷新的系统调用实际上可能在数据被刷新到稳定存储之前返回。因此,操作系统崩溃或电源中断可能会破坏最近提交的数据,或者在最坏的情况下,甚至会破坏数据库,因为写操作已经重新排序。如果数据完整性对您很重要,请执行拔掉插头在生产中使用任何东西之前进行测试。在macOS,InnoDB使用特殊的fcntl ()文件刷新方法。在Linux下,建议这样做禁用回写缓存

    在ATA/SATA磁盘驱动器上,这样的命令hdparm -W0 /dev/hda可以禁用回写缓存。注意,某些驱动器或磁盘控制器可能无法禁用回写缓存。

  • 关于InnoDB保护用户数据的恢复功能,InnoDB使用文件刷新技术,该技术涉及名为doublewrite缓冲,在默认情况下启用(innodb_doublewrite =对).doublewrite缓冲区为意外退出或断电后的恢复增加了安全性,并通过减少对fsync ()操作。建议innodb_doublewrite选项如果关心数据完整性或可能的故障,则保持启用状态。有关doublewrite缓冲区的信息,请参见第14.12.1节“InnoDB磁盘I/O”

  • 在使用NFS之前InnoDB,检讨可能出现的问题使用NFS和MySQL

  • 不支持在Windows上的4K扇区硬盘驱动器上运行MySQL服务器innodb_flush_method = async_unbuffered,为默认设置。解决方法是使用innodb_flush_method =正常

系统表空间数据文件配置

innodb_data_file_path选项定义的名称、大小和属性InnoDB系统表空间数据文件。如果在初始化MySQL服务器之前没有配置此选项,则默认行为是创建一个自动扩展的数据文件,该文件略大于12MB,名为ibdata1

显示变量innodb_data_file_path;+-----------------------+------------------------+ | Variable_name |值  | +-----------------------+------------------------+ | innodb_data_file_path | ibdata1:12M: autoextend  | +-----------------------+------------------------+

完整的数据文件规范语法包括文件名、文件大小、autoextend属性,马克斯属性:

file_namefile_size[: autoextend[:马克斯:max_file_size]]

文件大小通过追加指定为千字节、兆字节或千兆字节KG到大小值。如果以千字节为单位指定数据文件大小,则使用1024的倍数。否则,千字节值四舍五入到最近的兆字节(MB)边界。文件大小的总和必须至少略大于12MB。

可以使用分号分隔的列表指定多个数据文件。例如:

(mysqld) innodb_data_file_path = ibdata1:50M; ibdata2:50M: autoextend

autoextend而且马克斯属性只能用于最后指定的数据文件。

autoextend属性时,数据文件的大小会根据所需空间自动增加64MB。的innodb_autoextend_increment变量控制增量大小。

要指定自动扩展数据文件的最大大小,请使用马克斯属性后的autoextend属性。使用马克斯属性仅在限制磁盘使用非常重要的情况下使用。以下配置允许ibdata1增长到500MB的限制:

(mysqld) innodb_data_file_path = ibdata1:12M: autoextend:马克斯:500米

对象强制执行最小文件大小第一个系统表空间数据文件,以确保有足够的空间双写缓冲页。下表显示了每种类型的最小文件大小InnoDB页面大小。默认的InnoDB页面大小为16384 (16KB)。

页面大小(innodb_page_size) 最小文件大小
16384 (16KB)或以下 3 mb
32768 (32 kb) 6 mb
65536 (64 kb) 12 mb

如果磁盘已满,可以在另一个磁盘上添加数据文件。有关说明,请参见调整系统表空间大小

单个文件的大小限制由您的操作系统决定。在支持大文件的操作系统上,可以将文件大小设置为4GB以上。您还可以使用原始磁盘分区作为数据文件。看到为系统表空间使用裸磁盘分区

InnoDB不知道文件系统的最大文件大小,因此在最大文件大小为较小值(如2GB)的文件系统上要谨慎。

系统表空间文件默认创建在data目录下(datadir).要指定替代位置,请使用innodb_data_home_dir选择。例如,在名为myibdata,使用此配置:

[mysqld] innodb_data_home_dir = /myibdata/ innodb_data_file_path=ibdata1:50M:autoextend .日志含义

在指定值时需要使用尾随斜杠innodb_data_home_dirInnoDB不创建目录,因此在启动服务器之前请确保指定的目录存在。此外,请确保MySQL服务器拥有在该目录中创建文件的适当访问权限。

InnoDB的值以文本形式连接,为每个数据文件形成目录路径innodb_data_home_dir到数据文件名。如果innodb_data_home_dir未定义时,默认值为。/,即数据目录。(MySQL服务器在开始执行时将其当前工作目录更改为data目录。)

如果你指定innodb_data_home_dir控件中列出的数据文件的绝对路径作为空字符串innodb_data_file_path价值。以下配置等同于上述配置:

[mysqld] innodb_data_home_dir = innodb_data_file_path=/myibdata/ibdata: 50m:autoextend .日志含义

重做日志文件配置

InnoDB创建两个5MB的重做日志文件ib_logfile0而且ib_logfile1默认情况下在data目录中。

可以通过以下选项修改默认配置:

  • innodb_log_group_home_dir对象的目录路径InnoDB日志文件。如果未配置此选项,InnoDB在MySQL数据目录(datadir).

    您可以使用此选项来放置InnoDB日志文件在不同的物理存储位置InnoDB数据文件,以避免潜在的I/O资源冲突。例如:

    [mysqld] innodb_log_group_home_dir = /dr3/iblogs . [mysqld] innodb_log_group_home_dir = /dr3/iblogs .
    请注意

    InnoDB不创建目录,因此在启动服务器之前,请确保日志目录存在。使用Unix或DOSmkdir命令来创建任何必要的目录。

    请确保MySQL服务器具有在log目录下创建文件的适当访问权限。更一般地说,服务器必须对它需要在其中创建日志文件的任何目录具有访问权限。

  • innodb_log_files_in_group定义日志组中日志文件的数量。缺省值和建议值为2。

  • innodb_log_file_size以字节为单位定义日志组中每个日志文件的大小。合并的日志文件大小(innodb_log_file_sizeinnodb_log_files_in_group)不能超过最大值,略小于512GB。例如,一对255 GB的日志文件接近这个限制,但没有超过它。默认日志文件大小为48MB。一般来说,日志文件的组合大小应该足够大,使服务器能够平滑工作负载活动中的高峰和低谷,这通常意味着有足够的重做日志空间来处理一个多小时的写活动。更大的日志文件大小意味着缓冲池中的检查点刷新活动更少,这将减少磁盘I/O。有关其他信息,请参见“优化InnoDB重做日志”章节

Undo表空间配置

缺省情况下,Undo日志是系统表空间的一部分。但是,您可以选择将撤消日志存储在一个或多个单独的撤消表空间中,通常位于不同的存储设备上。

innodb_undo_directory配置选项定义了路径InnoDB为undo日志创建单独的表空间。该选项通常与innodb_rollback_segments而且innodb_undo_tablespaces选项,这些选项决定了撤消日志在系统表空间外的磁盘布局。

请注意

innodb_undo_tablespaces弃用;希望它在未来的版本中被删除。

有关更多信息,请参见第14.6.3.4节“撤消表空间”

临时表空间配置

名为。的单个自动扩展临时表空间数据文件ibtmp1innodb_data_home_dir目录。初始文件大小略大于12MB。方法可以在启动时修改默认的临时表空间数据文件配置innodb_temp_data_file_path配置选项。

innodb_temp_data_file_path选项指定临时表空间数据文件的路径、文件名和文件大小。通过连接形成完整的目录路径innodb_data_home_dir指定的路径innodb_temp_data_file_path.文件大小以KB、MB或GB (1024MB)为单位,通过在大小值后面加上K、M或G来指定。文件大小或文件的组合大小必须略大于12MB。

innodb_data_home_dir默认值为MySQL数据目录(datadir).

在使用大型临时表或大量使用临时表的环境中,自动扩展临时表空间数据文件可能变得很大。使用临时表的长时间运行查询也可能产生大数据文件。为防止临时数据文件变得太大,请配置innodb_temp_data_file_path选项指定最大数据文件大小。有关更多信息,请参见管理临时表空间数据文件大小

页面大小配置

innodb_page_size选项指定所有的页面大小InnoDBMySQL实例中的表空间。该值在创建实例时设置,之后保持不变。取值范围为64KB、32KB、16KB(默认值)、8KB和4KB。或者,可以以字节为单位指定页面大小(65536、32768、16384、8192、4096)。

默认的16KB页面大小适用于广泛的工作负载,特别是涉及表扫描的查询和涉及批量更新的DML操作。对于涉及许多小写操作的OLTP工作负载,较小的页面大小可能更有效,当单个页面包含许多行时,可能会出现争用问题。较小的页面对于SSD存储设备也更有效,SSD存储设备通常使用较小的块大小。保持InnoDB接近存储设备块大小的页面大小可以使重写到磁盘的未更改数据量最小化。

内存配置

MySQL为各种缓存和缓冲区分配内存,以提高数据库操作的性能。分配内存时InnoDB,总是考虑操作系统所需的内存,分配给其他应用程序的内存,以及分配给其他MySQL缓冲区和缓存的内存。例如,如果你使用MyISAM表,考虑分配给键缓冲区的内存量(key_buffer_size).有关MySQL缓冲区和缓存的概述,请参见第8.12.4.1节MySQL如何使用内存

特定于InnoDB使用以下参数进行配置:

警告

在32位GNU/Linux x86上,如果内存使用率设置过高,glibc可能允许进程堆超过线程堆栈,导致服务器故障。如果内存分配给mysqld对于全局和每个线程的缓冲区和缓存,该进程接近或超过2GB。

一个类似于下面的公式计算MySQL的全局和每个线程的内存分配,可以用来估计MySQL的内存使用情况。您可能需要修改这个公式,以考虑MySQL版本和配置中的缓冲区和缓存。有关MySQL缓冲区和缓存的概述,请参见第8.12.4.1节MySQL如何使用内存

innodb_buffer_pool_size + key_buffer_size + max_connections*(sort_buffer_size+read_buffer_size+binlog_cache_size) + max_connections*2MB

每个线程使用一个堆栈(通常是2MB,但在Oracle公司提供的MySQL二进制文件中只有256KB),在最坏的情况下也使用Sort_buffer_size + read_buffer_size额外的内存。

在Linux上,如果内核启用了大页面支持,InnoDB可以使用大页面为其缓冲池分配内存。看到第8.12.4.2节“启用大页面支持”