(mysql.info.gz) InnoDB configuration
Info Catalog
(mysql.info.gz) InnoDB in MySQL 3
(mysql.info.gz) InnoDB
(mysql.info.gz) InnoDB start
15.4 `InnoDB' Configuration
===========================
To enable `InnoDB' tables in MySQL 3.23, see InnoDB in MySQL
3.23.
From MySQL 4.0 on, the `InnoDB' storage engine is enabled by default.
If you don't want to use `InnoDB' tables, you can add the `skip-innodb'
option to your MySQL option file.
Two important disk-based resources managed by the `InnoDB' storage
engine are its tablespace data files and its log files.
If you specify no `InnoDB' configuration options, MySQL 4.0 and above
creates an auto-extending 10MB data file named `ibdata1' and two 5MB
log files named `ib_logfile0' and `ib_logfile1' in the MySQL data
directory. (In MySQL 4.0.0 and 4.0.1, the data file is 64MB and not
auto-extending.) In MySQL 3.23, `InnoDB' will not start if you provide
no configuration options.
* To get good performance, you should explicitly provide `InnoDB'
parameters as discussed in the following examples. Naturally, you
should edit the settings to suit your hardware and requirements.
To set up the `InnoDB' tablespace files, use the
`innodb_data_file_path' option in the `[mysqld]' section of the
`my.cnf' option file. On Windows, you can use `my.ini' instead. The
value of `innodb_data_file_path' should be a list of one or more data
file specifications. If you name more than one data file, separate them
by semicolon (`;') characters:
innodb_data_file_path=DATAFILE_SPEC1[;DATAFILE_SPEC2]...
For example, a setting that explicitly creates a tablespace having the
same characteristics as the MySQL 4.0 default is as follows:
[mysqld]
innodb_data_file_path=ibdata1:10M:autoextend
This setting configures a single 10MB data file named `ibdata1' that is
auto-extending. No location for the file is given, so the default is
the MySQL data directory.
Sizes are specified using `M' or `G' suffix letters to indicate units
of MB or GB.
A tablespace containing a fixed-size 50MB data file named `ibdata1' and
a 50MB auto-extending file named `ibdata2' in the data directory can be
configured like this:
[mysqld]
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
The full syntax for a data file specification includes the filename,
its size, and several optional attributes:
FILE_NAME:FILE_SIZE[:autoextend[:max:MAX_FILE_SIZE]]
The `autoextend' attribute and those following can be used only for the
last data file in the `innodb_data_file_path' line. `autoextend' is
available starting from MySQL 3.23.50 and 4.0.2.
If you specify the `autoextend' option for the last data file, `InnoDB'
extends the data file if it runs out of free space in the tablespace.
The increment is 8MB at a time.
If the disk becomes full, you might want to add another data file on
another disk. Instructions for reconfiguring an existing tablespace are
given in Adding and removing.
`InnoDB' is not aware of the maximum file size, so be cautious on
filesystems where the maximum file size is 2GB. To specify a maximum
size for an auto-extending data file, use the `max' attribute. The
following configuration allows `ibdata1' to grow up to a limit of 500MB:
[mysqld]
innodb_data_file_path=ibdata1:10M:autoextend:max:500M
`InnoDB' creates tablespace files in the MySQL data directory by
default. To specify a location explicitly, use the
`innodb_data_home_dir' option. For example, to use two files named
`ibdata1' and `ibdata2' but create them in the `/ibdata' directory,
configure `InnoDB' like this:
[mysqld]
innodb_data_home_dir = /ibdata
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
* `InnoDB' does not create directories, so make sure that the
`/ibdata' directory exists before you start the server. This is also
true of any log file directories that you configure. Use the Unix or
DOS `mkdir' command to create any necessary directories.
`InnoDB' forms the directory path for each data file by textually
concatenating the value of `innodb_data_home_dir' to the data file name,
adding a slash or backslash between if needed. If the
`innodb_data_home_dir' option is not mentioned in `my.cnf' at all, the
default value is the "dot" directory `./', which means the MySQL data
directory.
If you specify `innodb_data_home_dir' as an empty string, you can
specify absolute paths for the data files listed in the
`innodb_data_file_path' value. The following example is equivalent to
the preceding one:
[mysqld]
innodb_data_home_dir =
innodb_data_file_path=/ibdata/ibdata1:50M;/ibdata/ibdata2:50M:autoextend
*A simple `my.cnf' example.* Suppose that you have a computer with
128MB RAM and one hard disk. The following example shows possible
configuration parameters in `my.cnf' or `my.ini' for `InnoDB'. The
example assumes the use of MySQL-Max 3.23.50 or later or MySQL 4.0.2 or
later because it uses the `autoextend' attribute.
This example suits most users, both on Unix and Windows, who do not
want to distribute `InnoDB' data files and log files on several disks.
It creates an auto-extending data file `ibdata1' and two `InnoDB' log
files `ib_logfile0' and `ib_logfile1' in the MySQL data directory.
Also, the small archived `InnoDB' log file `ib_arch_log_0000000000'
that `InnoDB' creates automatically ends up in the data directory.
[mysqld]
# You can write your other MySQL server options here
# ...
# Data files must be able to hold your data and indexes.
# Make sure that you have enough free disk space.
innodb_data_file_path = ibdata1:10M:autoextend
#
# Set buffer pool size to 50-80% of your computer's memory
set-variable = innodb_buffer_pool_size=70M
set-variable = innodb_additional_mem_pool_size=10M
#
# Set the log file size to about 25% of the buffer pool size
set-variable = innodb_log_file_size=20M
set-variable = innodb_log_buffer_size=8M
#
innodb_flush_log_at_trx_commit=1
Make sure that the MySQL server has the proper access rights to create
files in the data directory. More generally, the server must have
access rights in any directory where it needs to create data files or
log files.
Note that data files must be less than 2GB in some filesystems. The
combined size of the log files must be less than 4GB. The combined size
of data files must be at least 10MB.
When you create an `InnoDB' tablespace for the first time, it is best
that you start the MySQL server from the command prompt. `InnoDB' will
then print the information about the database creation to the screen,
so you can see what is happening. For example, on Windows, if
`mysqld-max' is located in `C:\mysql\bin', you can start it like this:
C:\> C:\mysql\bin\mysqld-max --console
If you do not send server output to the screen, check the server's
error log to see what `InnoDB' prints during the startup process.
See `InnoDB' init InnoDB init. for an example of what the
information displayed by `InnoDB' should look like.
*Where to specify options on Windows?* The rules for option files on
Windows are as follows:
* Only one of `my.cnf' or `my.ini' should be created.
* The `my.cnf' file should be placed in the root directory of the
`C:' drive.
* The `my.ini' file should be placed in the `WINDIR' directory; for
example, `C:\WINDOWS' or `C:\WINNT'. You can use the `SET' command
at the command prompt in a console window to print the value of
`WINDIR':
C:\> SET WINDIR
windir=C:\WINNT
* If your PC uses a boot loader where the `C:' drive is not the boot
drive, your only option is to use the `my.ini' file.
*Where to specify options on Unix?* On Unix, `mysqld' reads options
from the following files, if they exist, in the following order:
* `/etc/my.cnf'
Global options.
* `DATADIR/my.cnf'
Server-specific options.
* `defaults-extra-file'
The file specified with the `--defaults-extra-file' option.
* `~/.my.cnf'
User-specific options.
DATADIR represents the MySQL data directory that was specified as a
`configure' option when `mysqld' was compiled (typically
`/usr/local/mysql/data' for a binary installation or `/usr/local/var'
for a source installation).
If you want to make sure that `mysqld' reads options only from a
specific file, you can use the `--defaults-option' as the first option
on the command line when starting the server:
mysqld --defaults-file=your_path_to_my_cnf
*An advanced `my.cnf' example.* Suppose that you have a Linux computer
with 2GB RAM and three 60GB hard disks (at directory paths `/', `/dr2'
and `/dr3'). The following example shows possible configuration
parameters in `my.cnf' for `InnoDB'.
[mysqld]
# You can write your other MySQL server options here
# ...
innodb_data_home_dir =
#
# Data files must be able to hold your data and indexes
innodb_data_file_path = /ibdata/ibdata1:2000M;/dr2/ibdata/ibdata2:2000M:autoextend
#
# Set buffer pool size to 50-80% of your computer's memory,
# but make sure on Linux x86 total memory usage is < 2GB
set-variable = innodb_buffer_pool_size=1G
set-variable = innodb_additional_mem_pool_size=20M
innodb_log_group_home_dir = /dr3/iblogs
#
# innodb_log_arch_dir must be the same as innodb_log_group_home_dir
# (starting from 4.0.6, you can omit it)
innodb_log_arch_dir = /dr3/iblogs
set-variable = innodb_log_files_in_group=2
#
# Set the log file size to about 25% of the buffer pool size
set-variable = innodb_log_file_size=250M
set-variable = innodb_log_buffer_size=8M
#
innodb_flush_log_at_trx_commit=1
set-variable = innodb_lock_wait_timeout=50
#
# Uncomment the next lines if you want to use them
#innodb_flush_method=fdatasync
#set-variable = innodb_thread_concurrency=5
Note that the example places the two data files on different disks.
`InnoDB' will fill the tablespace beginning with the first data file.
In some cases, it will improve the performance of the database if all
data is not placed on the same physical disk. Putting log files on a
different disk from data is very often beneficial for performance. You
can also use raw disk partitions (raw devices) as `InnoDB' data files,
which may speed up I/O. InnoDB Raw Devices.
*Warning:* On 32-bit GNU/Linux x86, you must be careful not to set
memory usage too high. `glibc' may allow the process heap to grow over
thread stacks, which will crash your server. It is a risk if the value
of the following expression is close to or exceeds 2GB:
innodb_buffer_pool_size
+ key_buffer_size
+ max_connections*(sort_buffer_size+read_buffer_size+binlog_cache_size)
+ max_connections*2MB
Each thread will use a stack (often 2MB, but only 256KB in MySQL AB
binaries) and in the worst case also uses `sort_buffer_size +
read_buffer_size' additional memory.
Starting from MySQL 4.1, by compiling MySQL yourself, you can use up to
64GB of physical memory in 32-bit Windows. See the description for
`innodb_buffer_pool_awe_mem_mb' in `InnoDB' start InnoDB start.
*How to tune other `mysqld' server parameters?* The following values
are typical and suit most users:
[mysqld]
skip-external-locking
set-variable = max_connections=200
set-variable = read_buffer_size=1M
set-variable = sort_buffer_size=1M
#
# Set key_buffer to 5 - 50% of your RAM depending on how much
# you use MyISAM tables, but keep key_buffer_size + InnoDB
# buffer pool size < 80% of your RAM
set-variable = key_buffer_size=...
Info Catalog
(mysql.info.gz) InnoDB in MySQL 3
(mysql.info.gz) InnoDB
(mysql.info.gz) InnoDB start
automatically generated byinfo2html