14.6.1 InnoDB Startup Configuration 启动配置
首先描述关于InnoDB 配置设计数据库文件,日志文件,page size 和内存buffer 的配置。
推荐你定义数据文件,日志文件和page size 配置在创建InnoDB之前,修改数据文件或者log file 配置在InnoDB 实力被创建后可能
涉及重大的过程,page size 只能在InnoDB 实例首次初始化后创建。
除了这些主题,这个章节提供信息关于指定的InnoDB 选项在配置文件里, 查看InnoDB 初始化信息,以及重要的存储问题
指定选项在MySQL 配置文件:
因为MySQL 使用数据文件,日志文件和page size 配置设置来初始化InnoDB 实例,
它是推荐你定义那些设置在一个配置文件在MySQL 读取启动阶段,
在第一次初始化之前。InnoDB 是被初始化的当MySQL server 启动后
你可以放置InnoDB 选项在[mysqld]组
为了确保mysqld read选项只从一个特定的文件读取,使用--defaults-file 选项作为第一个选项在命令行 当启动server时
mysqld --defaults-file=path_to_configuration_file
Viewing InnoDB Initialization Information 查看InnoDB 初始信息
查看InnoDB 初始信息在启动阶段, 从命令行启动mysqld.
当mysqld时从一个命令行启动,初始信息是打印到控制台
C:> "C:Program FilesMySQLMySQL Server 5.6inmysqld" --console
如果你不发送server输出到控制台
Important Storage Considerations 重要的存储考虑
检查下面的存储相关的考虑在处理你的启动选项:
1.在有些例子里, 数据库性能改善如果数据不全部房贷相同的物理磁盘。
放置log files 在不同的磁盘往往是有益的。
比如,你可以放置system tablespace 数据文件和日志文件在不同的磁盘。
你也可以使用raw disk 分配用于InnoDB data files.
InnoDB 是一个事务安全存储引擎用于MySQL 有提交,回滚或者crash-recovery功能来保护用户数据。
然而,如果他不能这样做如果以来的操作系统或者硬件不能工作。
很多操作系统或者磁盘子系统可能延迟或者重新排序写操作来改善性能。
在一些系统上, 每个fsync() 系统调用应该等待知道所有的不成文的数据已经被刷新
可能实际返回在数据已经被刷新到稳定的存储器。
正因为如此,一个操作系统crash或者一个电源断电可能破坏最近提交的数据,
或者最坏的打算,因为写操作已经被重新排序。
如果数据完整性是重要的,执行一些拔插头的测试在使用任何在生产环节
在 OS X 10.3 and higher,InnoDB 使用一个特定的fcntl() 文件刷新方法
在Linux上,可以禁用write-back cache
对于InnoDB 的恢复功能来保护用户的数据,
InnoDB 使用一个文件flush技术设计一个结果成为doublewriter buffer,
默认是启用的。
doublewriter buffer 增加安全性来恢复crash或者断电后,
改善性能在很多Unix系统通过降低fsync()操作。
如果对于你的数据可靠性是一个考虑, 不要配置InnoDB 使用数据文件或者日志文件在NFS上。
System Tablespace Data File Configuration 系统表空间数据文件配置
系统表空间数据文件是使用innodb_data_file_path and innodb_data_home_dir配置选项
innodb_data_file_path 配置选项是用于配置InnoDB 系统表空间数据文件
innodb_data_file_path 的只应该是一个或者多个数据文件的列表,
如果你命名多个文件,通过;分隔
mysql> show variables like '%innodb_data_file_path%';
+-----------------------+------------------------+
| Variable_name | Value |
+-----------------------+------------------------+
| innodb_data_file_path | ibdata1:12M:autoextend |
+-----------------------+------------------------+
1 row in set (0.00 sec)
innodb_data_file_path=datafile_spec1[;datafile_spec2]...
例如,下面的设置显示的创建一个最小的system tablespace
[mysqld]
innodb_data_file_path=ibdata1:12M:autoextend
例如, 下面的设置显示的创建一个最小的系统表空间
这个设置配置一个简单的12MB 数据文件命名为ibdata1 是自动扩展的。
没有给定位置,InnoDB 创建在MySQL 数据目录:
大小可以使用K.M或者G 后缀字母指定来表明KB MB 或者GB
一个表空间包含一个固定大小50MB数据文件命名为ibdata1 和一个50MB 自动扩展文件命名为ibdata2 在数据库目录
[mysqld]
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
完整的语法用于一个数据文件指定包含文件名称,它的大小,和几个可选的属性:
file_name:file_size[:autoextend[:max:max_file_size]]
autoextend 和max 属性 只能用于最后的数据文件在 innodb_data_file_path
如果你指定autoextend 选项用于最后的文件,InnoDB 扩展数据文件如果他用完空闲空间。
increment 增量是64MB 默认一次,修改这个增量,改变innodb_autoextend_increment 系统变量
mysql> show variables like '%innodb_autoextend_increment%';
+-----------------------------+-------+
| Variable_name | Value |
+-----------------------------+-------+
| innodb_autoextend_increment | 64 |
+-----------------------------+-------+
1 row in set (0.00 sec)
如果磁盘变得满了, 你可能需要增加另外的数据文件在另外的磁盘上。
InnoDB 不知道文件最大值,因此小心文件系统 当最大文件系统是一个小的值比如2GB
指定一个最大值用于一个自动增加的文件,使用max 属性跟着自动增长属性,
使用max 属性只有在约束的磁盘使用,因为超过最大值会导致一个致命错误,
包括crash. 下面的配置运行ibdata1 增长到500MB的限制。
[mysqld]
innodb_data_file_path=ibdata1:12M:autoextend:max:500M
InnoDB 创建表空间文件在MySQL 数据目录(默认).
指定一个明确的位置,使用 innodb_data_home_dir 选项
mysql> show variables like '%innodb_data_home_dir%';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| innodb_data_home_dir | |
+----------------------+-------+
1 row in set (0.00 sec)
比如,创建2个文件命名为ibdata1 和ibdata2 在目录命名为myibdata 配置InnoDB 类似:
[mysqld]
innodb_data_home_dir = /myibdata
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
注意:
InnoDB 创建表空间文件在MySQL data 目录默认情况下,
显示的指定一个位置,使用innodb_data_home_dir 选项。
注意:
InnoDB 不创建目录, 因此确保/myibdata 目录存在在你重启server前。
使用Unix 或者DOS mkdir 命令来创建任何需要的目录
确保MySQL server 有合适的访问权限来创建文件在数据目录。
更一般来说,server 必须有一个访问权限在任何目录
InnoDB 构成目录路径用于每个数据文件通过文本链接 innodb_data_home_dir的值到数据文件名字
增加一个path名字分割(斜杠或者反斜杠)在值之间 如果需要的话。
如果 innodb_data_home_dir 选项没有在my.cnf中指定,默认是点号目录,就是MySQL data目录。
如果你指定 innodb_data_home_dir作为一个空的字符串,你可以指定绝对路径用于数据文件在 innodb_data_file_path里
[mysqld]
innodb_data_home_dir =
innodb_data_file_path=/ibdata/ibdata1:50M;/ibdata/ibdata2:50M:autoextend
InnoDB Log File Configuration InnoDB Log File 配置InnoDB LOG:
默认情况下, InnoDB 创建2个48MB log files 在MySQL data 目录(datadir) 命名为 ib_logfile0 and ib_logfile1
Vsftp:/data01/mysql# ls -ltr ib_logfile*
-rw-rw---- 1 mysql mysql 536870912 Oct 28 09:52 ib_logfile1
-rw-rw---- 1 mysql mysql 536870912 Oct 31 11:56 ib_logfile0
下面的选项可以用于修改默认的配置:
mysql> show variables like '%innodb_log_group_home_dir%';
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| innodb_log_group_home_dir | ./ |
+---------------------------+-------+
1 row in set (0.00 sec)
innodb_log_group_home_dir 定义目录path到InnoDB log files(redo logs)
如果这个选项没有配置, InnoDB log files 是创建在 MySQL data directory (datadir).
你可能使用选项来防止InnoDB log files到一个不同的存储设备位置相比InnoDB 数据文件来避免潜在的I/O资源冲突 例如:
[mysqld]
innodb_log_group_home_dir = /dr3/iblogs
注意:
InnoDB 不创建目录, 确保log 目录存在在你启动前,使用Unix或者DOS mkdir 命令创建任何需要的目录
1.innodb_log_files_in_group defines the number of log files in the log group. The default and recommended value is 2.
mysql> show variables like '%innodb_log_files_in_group%';
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| innodb_log_files_in_group | 2 |
+---------------------------+-------+
1 row in set (0.00 sec)
innodb_log_files_in_group 定义log files 的数量在log group里,默认和推荐值是2
mysql> show variables like '%innodb_log_file_size%';
+----------------------+-----------+
| Variable_name | Value |
+----------------------+-----------+
| innodb_log_file_size | 536870912 | 512M
+----------------------+-----------+
1 row in set (0.00 sec)
innodb_log_file_size 定义 每个log file 的大小单位字节。
log files 组合的大小是 (innodb_log_file_size * innodb_log_files_in_group) 不能超过一个最大值 512GB
InnoDB Undo Tablespace Configuration
默认情况下, InnoDB undo logs 是system tablespace的一部分。
mysql> show variables like '%innodb_undo_directory%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_undo_directory | . |
+-----------------------+-------+
1 row in set (0.00 sec)
innodb_undo_directory 配置选项定义了InnoDB 创建单独的tablespace 的路径。
这个选项是通常和 innodb_undo_logs ,innodb_undo_tablespaces选项结合使用,
定义了undo logs的磁盘布局 在system表空间外面
InnoDB Page Size Configuration
mysql> show variables like '%innodb_page_size%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| innodb_page_size | 16384 |
+------------------+-------+
1 row in set (0.00 sec)
innodb_page_size 选项指定了所有的InnoDB tablespaces 的page大小,
这个值是设置当实例被创建,以后保持不变.
有效值是16KB(默认值)
InnoDB Memory Configuration 内存配置:
MySQL 分配内存到各个cache 和buffers来改善数据库操作的性能。
当分配内存用于InnoDB, 总是考虑内存操作系统需要的内存,内存分给给其他应用,
内分分配给其他MySQL buffers和caches.
例如,如果你使用MyISAM 表,考虑内存的总量分配给(key_buffer_size).
buffer 指定给InnoDB 是配置通过使用下面的参数:
1.innodb_buffer_pool_size 定义了 buffer pool的大小,这是包产cached的数据用于InnoDB表,indexes和其他auxiliary buffers.
这个buffer pool的大小是重要的对于系统性能, 它通常推荐
innodb_buffer_pool_size 是配置为系统内存的50到75.
默认的 buffer pool size 是128MB
mysql> show variables like '%innodb_buffer_pool_instances%';
+------------------------------+-------+
| Variable_name | Value |
+------------------------------+-------+
| innodb_buffer_pool_instances | 8 |
+------------------------------+-------+
1 row in set (0.00 sec)
在具有大量内存的系统上,你可以改善并发通过划分buffer pool 到多个buffer pool 实例。
默认是一个Buffer pool 实例
innodb_log_buffer_size 定义了 buffer的大小单位字节 用于InnoDB 写Log文件在磁盘上
默认是8MB.
一个大的log buffer 让大的事务运行比需要些log 到磁盘在事务提交前。