10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美版)- 41.2 mb
PDF (A4)- 41.3 mb
PDF (RPM)- 39.5 mb
HTML下载(TGZ)- 9.3 mb
HTML下载(Zip)- 9.3 mb
HTML下载(RPM)- 7.8 mb
手册页(TGZ)- 260.6 kb
手册页(Zip)- 371.8 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

15.8.1 InnoDB启动配置

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

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

在MySQL选项文件中指定选项

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

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

为了确保mysqld仅从特定文件(和)读取选项mysqld-auto.cnf),使用——defaults-file选项作为启动服务器时命令行上的第一个选项:

mysqld——defaults-file =path_to_option_file

查看InnoDB初始化信息

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

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

C:\> "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld"——控制台

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

Shell > 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磁盘驱动器上,命令如下-W0 /dev/hda可能会禁用回写缓存。注意,某些驱动器或磁盘控制器可能无法禁用回写缓存。

  • 关于InnoDB保护用户数据的恢复功能;InnoDB使用涉及称为doublewrite缓冲,默认情况下是启用的(innodb_doublewrite =对).双写缓冲区为意外退出或断电后的恢复增加了安全性,并通过减少需要来提高大多数Unix系统的性能fsync ()操作。建议使用innodb_doublewrite选项保持启用,如果您关心数据完整性或可能的故障。有关双写缓冲区的信息,请参见章节15.11.1,“InnoDB磁盘I/O”

  • 使用NFS之前InnoDB,审查中列出的潜在问题在MySQL中使用NFS

系统表空间数据文件配置

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

mysql>显示变量: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目录。)

或者,您可以为系统表空间数据文件指定一个绝对路径。下面的配置与前面的配置相同:

(mysqld) innodb_data_file_path = / myibdata / ibdata1:50M: autoextend

的绝对路径innodb_data_file_path,则设置不与innodb_data_home_dir设置。系统表空间文件在指定的绝对路径下创建。在启动服务器之前,指定的目录必须存在。

InnoDB双写缓冲文件配置

从MySQL 8.0.20开始,doublewrite缓冲区存储区域驻留在doublewrite文件中,这为doublewrite页面的存储位置提供了灵活性。在以前的版本中,双写缓冲区存储区域位于系统表空间中。的innodb_doublewrite_dir变量定义存放的目录InnoDB在启动时创建双写文件。如果未指定目录,则在目录下创建双写文件innodb_data_home_dir目录,如果未指定,则默认为数据目录。

在目录之外的位置创建双写文件innodb_data_home_dir目录、配置innodb_doublewrite_dir变量。例如:

innodb_doublewrite_dir =/ / doublewrite_directory /路径

其他doublewrite缓冲区变量允许定义doublewrite文件的数量、每个线程的页面数量和doublewrite批处理大小。有关双写缓冲区配置的详细信息,请参见第15.6.4节,“双写缓冲区”

重做日志文件配置

InnoDB创建两个5MB的重做日志文件ib_logfile0ib_logfile1默认在data目录中。

可以使用以下选项修改默认配置:

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

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

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

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

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

  • innodb_log_files_in_group定义日志组中日志文件的数量。默认值和推荐值均为2。

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

Undo Tablespace配置

缺省情况下,Undo日志驻留在MySQL实例初始化时创建的两个Undo表空间中。

innodb_undo_directory变量定义路径InnoDB创建默认的undo表空间。如果该变量未定义,则在数据目录中创建默认的undo表空间。的innodb_undo_directory变量不是动态的。配置它需要重新启动服务器。

撤消日志的I/O模式使撤消表空间成为很好的备选固态硬盘存储。

有关配置其他undo表空间的信息,请参见第15.6.3.4节“撤销表空间”

全局临时表空间配置

全局临时表空间存储对用户创建的临时表所做更改的回滚段。

单个自动扩展全局临时表空间数据文件ibtmp1innodb_data_home_dir默认为目录。初始文件大小略大于12MB。

innodb_temp_data_file_path选项指定全局临时表空间数据文件的路径、文件名和文件大小。文件大小的单位为KB、MB或GB,在大小值后面加上K、M或G。文件大小或组合文件大小必须大于12MB。

要为全局临时表空间数据文件指定备用位置,请配置innodb_temp_data_file_path启动时的选项。

会话临时表空间配置

在MySQL 8.0.15及更早的版本中,会话临时表空间存储用户创建的临时表和优化器创建的内部临时表InnoDB被配置为内部临时表(internal_tmp_disk_storage_engine = InnoDB).从MySQL 8.0.16,InnoDB始终用作内部临时表的磁盘上存储引擎。

innodb_temp_tablespaces_dir变量定义位置InnoDB创建会话临时表空间。默认位置是# innodb_temp目录下的数据。

要为会话临时表空间指定备用位置,请配置innodb_temp_tablespaces_dir启动时的变量。允许使用完全限定的路径或相对于数据目录的路径。

页面大小配置

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

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

内存配置

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

特定于InnoDB通过以下参数配置:

警告

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

计算MySQL全局和每个线程内存分配的公式类似于下面的公式,可以用来估计MySQL内存使用情况。您可能需要修改公式来解释MySQL版本和配置中的缓冲区和缓存。有关MySQL缓冲区和缓存的概述,请参见第8.12.3.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.3.2节“启用大页面支持”