MySQL-InnoDB配置
一、InnoDB 配置示例
以下是一个 InnoDB 的配置示例:
[mysqld]
# 如果你正在使用 InnoDB 表,请取消以下注释
#innodb_data_home_dir = /data/mysql/innodb/
#innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend
#innodb_log_group_home_dir = /data/mysql/innodb/log/
#innodb_log_arch_dir = /data/mysql/innodb/log/
# 你可以将.._buffer_pool_size 设置为内存的 50 - 80 %,但要注意不要将内存使用设置得过高
#innodb_buffer_pool_size = 1024M
#innodb_additional_mem_pool_size = 20M
# 将.._log_file_size 设置为缓冲池大小的 25 %
#innodb_log_file_size = 192M
#innodb_log_buffer_size = 18M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50
需要注意的是,InnoDB 不会自动创建目录,你必须使用操作系统命令来创建相应的目录。同时,要确保你的 MySQL 服务程序在 datadir
目录里有足够的权限来创建文件。
另一份关于 InnoDB 配置文件的解释如下:
[mysqld]
# 在这里添加其他的 MySQL 服务器配置
#...
# 如果你不使用 InnoDB 表,请将以下一行注释去掉
# skip-innodb
#
# 数据文件必须能够容纳数据和索引,确保有足够的磁盘空间
innodb_data_file_path = /ibdata/ibdata1:2000M;/dr2/ibdata/ibdata2:2000M:autoextend
# 设置缓冲池的大小为你主内存大小的 50 - 80 %,但在 Linux x86 系统中,总内存使用必须小于 2 GB
set-variable = innodb_buffer_pool_size=1G
set-variable = innodb_additional_mem_pool_size=20M
innodb_log_group_home_dir = /dr3/iblogs
#.._log_arch_dir 必须和.._log_group_home_dir 相同;从 4.0.6 开始,可以省略它
innodb_log_arch_dir = /dr3/iblogs
set-variable = innodb_log_files_in_group=3
# 设置日志文件的大小约为缓冲池(buffer pool)大小的 15 %
set-variable = innodb_log_file_size=150M
set-variable = innodb_log_buffer_size=8M
# 如果丢失最近几个事务影响不大,可以设置.._flush_log_at_trx_commit = 0
innodb_flush_log_at_trx_commit=1
set-variable = innodb_lock_wait_timeout=50
#innodb_flush_method=fdatasync
#set-variable = innodb_thread_concurrency=5
我们可以将两个数据文件放在不同的硬盘上,InnoDB 会从数据文件的底部填充表空间。在某些情况下,将所有数据分配到不同的物理硬盘中可以提高数据库性能。将日志文件和数据文件分别放在不同的物理硬盘上通常对提高性能很有帮助。你也可以使用一个 RAW 磁盘分区(raw disk partitions 或 raw devices)作为数据文件,在一些 Unix 系统中,这将提高 I/O 能力。
警告:在 Linux x86 上,必须小心不要将内存使用设置得过高,因为 glibc 会使进程堆增长到线程堆栈之上,这可能会导致服务器崩溃。以下计算结果接近或超过 2G 时将非常危险:innodb_buffer_pool_size + key_buffer + max_connections * (sort_buffer + record_buffer) + max_connections * 2 MB
。
每个线程将使用 2MB(MySQL AB 二进制版本为 256 KB)的堆栈,在最坏的情况下,还会使用 sort_buffer + record_buffer
的额外内存。
二、问题与解决
(一)配置完 InnoDB 相关项后 MySQL 无法启动
在配置完 InnoDB 相关项之后,MySQL 可能无法启动,查看日志会发现如下错误:
usr/local/mysql/libexec/mysqld: unknown variable ‘innodb_data_home_dir=/usr/local/mysql/var/’
这通常意味着 MySQL 没有自带 InnoDB 引擎(最新的 MySQL 默认不带 innodb 引擎)。如果你使用源码,需要重新编译,在 configure
的时候,加上 –with-plugins=innobase
这个参数。
源码编译好之后,如果还无法正常进入数据库,可以执行以下 SQL 命令:
mysql> install plugin innodb soname ‘ha_innodb.so’;
另外,从 MySQL 5.1.23 之后,安装 InnoDB 引擎时,以前的 –with-innodb
编译参数已经失效,需要使用 –with-plugins
方式安装。这个选项有很多可选参数,包括 partition daemon_example ftexample archive blackhole csv example federated heap innobase myisam myisammrg ndbcluster
等,而 –with-plugins
默认的参数是 none
,也就是说,如果不指定一些参数,很多新特性将不会被编译进 MySQL。
三、MySQL 5.1.25 InnoDB 引擎的安装
以下是 MySQL 5.1.25 中 InnoDB 引擎的安装步骤:
1. 下载 MySQL version 5.1.24 或更新的源码。下载地址:http://dev.mysql.com/down...ysql/5.1.html 下载之后解压。
2. 下载 InnoDB 插件源码。下载地址:http://www.innodb.com/innodb_plugin/download/
3. 将 MySQL 源代码树中的 storage/innobase 目录的内容替换为 InnoDB 插件源代码树的内容。
4. 编译和构建 MySQL。建议构建一个包含 InnoDB 插件的 MySQL 版本,而不是构建动态的 InnoDB 插件,因为动态的 InnoDB 插件必须使用与 mysqld 可执行文件完全相同的工具和选项进行构建,否则可能会出现错误。示例如下:
% wget ftp://ftp.easynet.be/mysq...L-5.1/mysql-5.1.31.tar.gz
% tar -zxf mysql-5.1.31.tar.gz
% cd mysql-5.1.31/storage
% wget http://www.innodb.com/dow...nnodb_plugin-1.0.3.tar.gz
% tar -zxf innodb-1.0.3.tar.gz
% rm -fr innobase
% mv innodb-1.0.3 innobase
% cd..
%./configure --with-plugins=innobase
% make
「倘若有所帮助,不妨酌情赞赏!」
感谢您的支持!
使用微信扫描二维码赞赏