17.8.1 InnoDB 启动配置

2024-03-12 18:12
文章标签 配置 启动 innodb 17.8

本文主要是介绍17.8.1 InnoDB 启动配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

关于 InnoDB 配置的第一个决定涉及数据文件、日志文件、页面大小和内存缓冲区的配置,这些应该在初始化 InnoDB 之前配置。在初始化 InnoDB 之后修改配置可能需要一些复杂的步骤。

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

文章目录

  • 在 MySQL 选项文件中指定选项
  • 查看 InnoDB 初始化信息
  • 重要的存储注意事项
  • 系统表空间数据文件配置
  • InnoDB 双写缓冲文件配置
  • 重做日志配置
  • 撤消表空间配置
  • 全局临时表空间配置
  • 会话临时表空间配置
  • 页面大小配置
  • 内存配置


在 MySQL 选项文件中指定选项

由于 MySQL 使用数据文件、日志文件和页面大小设置来初始化 InnoDB, 因此建议在初始化 InnoDB 之前,在 MySQL 启动时读取的选项文件中定义这些设置。通常,InnoDB 在 MySQL server 首次启动时初始化。

您可以将 InnoDB 选项放在服务器启动时读取的任何选项文件的 [ mysqld] 组中。MySQL 选项文件的位置在第 6.2.2.2 节“使用选项文件”中进行了描述。

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

mysqld --defaults-file=path_to_option_file

查看 InnoDB 初始化信息

要在启动过程中查看 InnoDB 初始化信息,请从命令提示符启动 mysqld, 该命令提示器将初始化信息打印到控制台。

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

C:\> "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld" --console

在类 Unix 系统上,mysqld 位于 MySQL 安装的 bin 目录中:

$> bin/mysqld --user=mysql &

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

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

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

重要的存储注意事项

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

  • 在某些情况下,可以通过将数据和日志文件放在单独的物理磁盘上来提高数据库性能。您还可以将原始磁盘分区(原始设备)用于 InnoDB 数据文件,这可能会加速 I/O。 请参阅 为系统表空间使用裸磁盘分区 。

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

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

  • 关于保护用户数据的 InnoDB 恢复功能,InnoDB 使用一种文件刷新技术,涉及一种称为 双写缓冲(Doublewrite Buffer) 的结构,默认情况下启用( innodb_doublewrite=ON)。双写缓冲区在意外退出或断电后为恢复增加了安全性,并通过减少对 fsync() 操作的需要,提高了大多数 Unix 类型的性能。如果您关心数据完整性或可能的故障,建议保持启用 innodb_doublewrite 选项。有关双写缓冲区的信息,请参阅第 17.11.1 节,“ InnoDB 磁盘 I/O”。

  • 在将 NFS 与 InnoDB 一起使用之前,请查看 将 NFS 与 MySQL 一起使用 中概述的潜在问题。

系统表空间数据文件配置

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

mysql> SHOW VARIABLES LIKE 'innodb_data_file_path';
+-----------------------+------------------------+
| Variable_name         | Value                  |
+-----------------------+------------------------+
| innodb_data_file_path | ibdata1:12M:autoextend |
+-----------------------+------------------------+

完整数据文件规范语法包括文件名、文件大小、自动扩展属性和最大属性:

file_name:file_size[:autoextend[:max:max_file_size]]

通过将 K、M 或 G 附加到大小值,以 KB、MB 或 GB为单位指定文件大小。如果以 KB 为单位指定数据文件大小,则以 1024 的倍数进行指定。否则,千字节值将舍入到最接近的兆字节(MB)边界。文件大小的总和必须至少略大于 12MB 。

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

[mysqld]
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend

autoextendmax 属性只能用于最后指定的数据文件。

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

要指定自动扩展数据文件的最大大小,请在自动扩展属性之后使用 max 属性。仅在约束磁盘使用至关重要的情况下使用 max 属性。以下配置允许 ibdata1 增长到 500MB 的限制:

[mysqld]
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend

为第一个系统表空间数据文件强制使用最小文件大小,以确保有足够的空间用于双写缓冲区页面(MySQL 8.0.20 以后双写缓冲改为独立存储了 --译者注)。下表显示了每个 InnoDB 页面大小的最小文件大小。默认 InnoDB 页面大小为 1638416KB)。

页大小 (innodb_page_size)最小文件大小
16384 (16KB) or less3MB
32768 (32KB)6MB
65536 (64KB)12MB

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

单个文件的大小限制由操作系统确定。在支持大文件的操作系统上,可以将文件大小设置为大于 4GB 。您还可以将裸磁盘分区用作数据文件。

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

默认情况下,在数据目录(datadir)中创建系统表空间文件。要指定其他位置,请使用innodb_data_home_dir 选项。例如,要在名为 myibdata 的目录中创建系统表空间数据文件,请使用以下配置:

[mysqld]
innodb_data_home_dir = /myibdata/
innodb_data_file_path=ibdata1:50M:autoextend

innodb_data_home_dir 指定值时需要以斜杠结尾。InnoDB不会创建目录,因此在启动服务器之前,请确保指定的目录存在。此外,请确保 MySQL server 具有在目录中创建文件的适当访问权限。

InnoDB 通过将 innodb_data_home_dir 的值文本连接到数据文件名,形成每个数据文件的目录路径。如果未定义 innodb_data_home_dir, 则默认值为“./”,即数据目录。( MySQL Server 在开始执行时将其当前工作目录更改为数据目录。)

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

[mysqld]
innodb_data_file_path=/myibdata/ibdata1:50M:autoextend

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

InnoDB 双写缓冲文件配置

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

要在 innodb_data_home_dir 目录以外的位置创建双写文件,请配置 innodb_doublewrite_dir 变量。例如:

innodb_doublewrite_dir=/path/to/doublewrite_directory

其他双写缓冲区变量允许定义双写文件的数量、每个线程的页数和双写批处理大小。有关双写缓冲器配置的更多信息,请参阅 第 17.6.4 节“双写缓冲器” 。

重做日志配置

从 MySQL 8.0.30 开始,重做日志文件所占用的磁盘空间量由 innodb_redo_log_capacity 变量控制,该变量可以在启动或运行时设置;例如,要在选项文件中将变量设置为 8GB,请添加以下条目:

[mysqld]
innodb_redo_log_capacity = 8589934592

有关在运行时配置重做日志容量的信息,请参阅配置重做日志能力( MySQL 8.0.30 或更高版本)。

innodb_redo_log_capacity 变量取代了不推荐使用的 innodb_log_file_sizeinnodb_log_files_in_group 变量。当定义了 innodb_redo_log_capacity 设置时,innodb_log_file_sizeinnodb_log_files_in_group 设置被忽略;否则,这些设置将用于计算 innodb_redo_log_capacity 设置( innodb_log_files_in_group * innodb_log_file_size = innodb_redo_log_capacity)。 如果没有设置这些变量,则 innodb_redo_log_capacity 将设置为默认值,即 104857600 字节( 100MB)。 最大设置为 128GB

在 MySQL 8.0.30 中,InnoDB 尝试维护 32 个重做日志文件,每个文件等于 1/32 * innodb_redo_log_capacity。 重做日志文件位于数据目录中的 #innodb_redo 目录中,除非 innodb_log_group_home_dir 变量指定了不同的目录。如果定义了 innodb_log_group_home_dir, 则重做日志文件位于该目录中的 #innodb_redo 目录中。有关更多信息,请参阅 第 17.6.5 节“重做日志” 。

在 MySQL 8.0.30 之前,InnoDB 默认在数据目录中创建两个 5MB 的 redo 日志文件,分别命名为 ib_logfile0ib_logfile1。 在初始化 MySQL Server 实例时,可以通过配置 innodb_log_files_in_groupinnodb_log_file_size 变量来定义不同数量的重做日志文件和不同的重做日志大小。

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

innodb_log_group_home_dir 定义了 InnoDB日志文件的目录路径。您可以使用此选项将 InnoDB 重做日志文件放置在与 InnoDB 数据文件不同的物理存储位置,以避免潜在的 I/O 资源冲突(与 《高性能 MySQL 第三版》建议的相反);例如:

[mysqld]
innodb_log_group_home_dir = /dr3/iblogs

笔记
InnoDB 不创建目录,因此在启动服务器之前,请确保日志目录存在。使用 Unix 或 DOS mkdir 命令创建任何必要的目录。
确保 MySQL 服务器具有在日志目录中创建文件的适当访问权限。进一步说,服务器必须对需要创建文件的任何目录具有访问权限。

撤消表空间配置

默认情况下,撤消日志位于初始化 MySQL 实例时创建的两个撤消表空间中。
innodb_undo_directory 变量定义了 InnoDB 创建默认 undo 表空间的路径。如果该变量未定义,则在数据目录中创建默认的撤消表空间。innodb_undo_directory 变量不是动态的。配置它需要重新启动服务器。

撤消日志的 I/O 模式使撤消表空间成为 SSD 存储的良好候选者。

有关配置其他撤消表空间的信息,请参阅 第 17.6.3.4 节“撤消表空间” 。

全局临时表空间配置

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

默认情况下,innodb_data_home_dir 目录中名为 ibtmp1 的单个自动扩展全局临时表空间数据文件。初始文件大小略大于 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 选项指定 MySQL 实例中所有 InnoDB 表空间的页面大小。该值是在创建实例时设置的,之后保持不变。有效值为 64KB32KB16KB( 默认值)、 8KB4KB。 或者,您可以以字节( 65536, 32768, 16384, 8192, 4096) 为单位指定页面大小。

默认的 16KB 页面大小适用于各种工作负载,尤其是涉及表扫描的查询和涉及批量更新的 DML 操作。对于涉及许多小写入的 OLTP 工作负载,较小的页面大小可能更有效,当单个页面包含许多行时,争用可能是一个问题。对于通常使用小块大小的 SSD 存储设备(早期 4K 块大小的 SSD,现在诸如 16K 块大小的 SSD 已经很普遍了 --译者注,手册中其他位置也有类似说法),较小的页面也可以更高效。保持 InnoDB 页面大小接近存储设备块大小可以最大限度地减少重写到磁盘的未更改数据量。

重要提示
innodb_page_size 只能在初始化数据目录时设置。有关详细信息,请参阅此变量的描述。

内存配置

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

InnoDB 特有的缓冲区使用以下参数进行配置:

  • innodb_buffer_pool_size 定义缓冲池的大小,缓冲池是为 InnoDB 表、索引和其他辅助缓冲保存缓存数据的内存区域。缓冲池的大小对系统性能很重要,通常建议将 innodb_buffer_pool_size 配置为系统内存的 50% 到 75%。 默认缓冲池大小为 128MB。 有关其他指导,请参阅第 10.12.3.1 节“ MySQL 如何使用内存”。有关如何配置 InnoDB 缓冲池大小的信息,请参阅第 17.8.3.1 节“配置 InnoDB 缓冲器池大小”。缓冲池大小可以在启动时配置,也可以动态配置。

  • 在具有大量内存的系统上,可以通过将缓冲池划分为多个缓冲池实例来提高并发性。缓冲池实例的数量由 innodb_buffer_pool_instances 选项控制。默认情况下,InnoDB 创建一个缓冲池实例。可以在启动时配置缓冲池实例的数量。有关更多信息,请参阅第 17.8.3.2 节“配置多个缓冲池实例”。

  • innodb_log_buffer_size 定义了 InnoDB 用来写入磁盘上日志文件的缓冲区的大小。默认大小为 16MB。 大的日志缓冲区使大型事务能够运行,而无需在事务提交之前将日志写入磁盘。如果有更新、插入或删除多行的事务,可以考虑增加日志缓冲区的大小以节省磁盘 I/O 。 可以在启动时配置 innodb_log_buffer_size。 有关信息,请参阅第 10.5.4 节“优化 InnoDB 重做日志记录”。

警告
在 32 位 GNU/Linux x86 上,如果内存使用率设置过高,glibc 可能会允许进程堆(process heep)增长到溢出线程堆栈,从而导致服务器故障。如果为全局和每线程(per-thread)缓冲区和缓存分配给 mysqld 进程的内存接近或超过 2GB, 则存在风险。
可以使用类似于以下计算 MySQL 全局和每个线程内存分配的公式来估计 MySQL 的内存使用情况。您可能需要修改公式,以考虑 MySQL 版本和配置中的缓冲区和缓存。有关 MySQL 缓冲区和缓存的概述,请参阅第 10.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 可以使用大页面为其缓冲池分配内存。请参阅第 10.12.3.3 节“启用大页面支持”。

这篇关于17.8.1 InnoDB 启动配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/802142

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

hadoop开启回收站配置

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。 开启回收站功能参数说明 (1)默认值fs.trash.interval = 0,0表示禁用回收站;其他值表示设置文件的存活时间。 (2)默认值fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval的参数值相等。

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

wolfSSL参数设置或配置项解释

1. wolfCrypt Only 解释:wolfCrypt是一个开源的、轻量级的、可移植的加密库,支持多种加密算法和协议。选择“wolfCrypt Only”意味着系统或应用将仅使用wolfCrypt库进行加密操作,而不依赖其他加密库。 2. DTLS Support 解释:DTLS(Datagram Transport Layer Security)是一种基于UDP的安全协议,提供类似于

springboot3打包成war包,用tomcat8启动

1、在pom中,将打包类型改为war <packaging>war</packaging> 2、pom中排除SpringBoot内置的Tomcat容器并添加Tomcat依赖,用于编译和测试,         *依赖时一定设置 scope 为 provided (相当于 tomcat 依赖只在本地运行和测试的时候有效,         打包的时候会排除这个依赖)<scope>provided

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M