В версии 3.23 как минимум необходимо указать innodb_data_file_path. В MySQL-4.0 не требуется задавать даже innodb_data_file_path: по умолчанию для него создается автоматически увеличивающийся файл размером в 16 Мб с именем `ibdata1' в каталоге `datadir' MySQL. (в MySQL-4.0.0 и 4.0.1 размер файла данных составляет 64 Мб и он не является автоматически увеличивающимся).
Однако для того, чтобы получить высокую производительность, НЕОБХОДИМО явно задать параметры InnoDB, перечисленные в следующих примерах.
Начиная с версий 3.23.50 и 4.0.2 для InnoDB имеется возможность задавать последний файл данных в innodb_data_file_path как автоматически увеличивающийся. В этом случае для innodb_data_file_path используется следующий синтаксис:
pathtodatafile:sizespecification;pathtodatafile:sizespecification;... ... ;pathtodatafile:sizespecification[:autoextend[:max:sizespecification]]
Если последний файл данных указан с параметром автоматического увеличения, то в случае нехватки места для табличной области InnoDB будет увеличивать последний файл данных; приращение файла каждый раз составляет 8 Мб. Например, синтаксис:
innodb_data_file_path = /ibdata/ibdata1:100M:autoextend
указывает InnoDB создать один файл данных с начальным размером 100 Мб, который будет увеличиваться на 8 Мб каждый раз, когда не будет хватать места. Если текущий диск окажется заполненным, можно, к примеру, добавить еще один файл данных на другой диск. При задании размера автоматически увеличивающегося файла `ibdata1' следует округлить его текущий размер до ближайшего числа, кратного 1024 * 1024 байтам (= 1 Мб), и явно указать округленный размер `ibdata1' в innodb_data_file_path. После этой записи можно добавить еще один файл данных:
innodb_data_file_path = /ibdata/ibdata1:988M;/disk2/ibdata2:50M:autoextend
Следует соблюдать осторожность при работе в файловых системах, в которых установлено ограничение на размер файла в 2 Гб! Максимальный для данной операционной системы размер файла InnoDB не известен. В таком случае желательно указать максимальный размер файла данных:
innodb_data_file_path = /ibdata/ibdata1:100M:autoextend:max:2000M
Предположим, что у вас есть компьютер Windows NT с 128 Мб ОЗУ и одним жестким диском на 10 Гб. Ниже приведен пример возможных параметров конфигурации в `my.cnf' или `my.ini' для InnoDB:
[mysqld] # Сюда можно добавить другие опции MySQL # ... # innodb_data_home_dir = c:\ibdata # Файлы данных должны иметь достаточно # места для сохранения ваших данных и # индексов innodb_data_file_path = ibdata1:2000M;ibdata2:2000M # Размер буферного пула следует задавать # как 50 - 80% памяти компьютера set-variable = innodb_buffer_pool_size=70M set-variable = innodb_additional_mem_pool_size=10M innodb_log_group_home_dir = c:\iblogs # .._log_arch_dir должен быть таким # же, как _log_group_home_dir innodb_log_arch_dir = c:\iblogs innodb_log_archive=0 set-variable = innodb_log_files_in_group=3 # Размер файла журналов должен составлять # около 15% от размера буферного пула set-variable = innodb_log_file_size=10M set-variable = innodb_log_buffer_size=8M # Если допустима потеря нескольких # последних транзакций, установите # flush_log_в_trx_commit в 0 innodb_flush_log_at_trx_commit=1 set-variable = innodb_file_io_threads=4 set-variable = innodb_lock_wait_timeout=50
Обратите внимание на то, что InnoDB не создает каталогов: это нужно делать самостоятельно. Чтобы создать каталоги для данных и журналов, воспользуйтесь командой Unix или MS-DOS `mkdir'. Кроме того, следует удостовериться, что у сервера MySQL есть права на создание файлов в указанных каталогах.
Не забывайте, что в некоторых файловых системах существует ограничение в 2 Гб на размер файла данных! Общий размер файлов данных должен быть больше или равен 10 Мб, а общий размер файлов журналов - меньше 4 Гб.
Если не указать innodb_data_home_dir, то InnoDB по умолчанию создает свои файлы данных в каталоге `datadir' MySQL. После задания innodb_data_home_dir нельзя использовать абсолютные пути к файлам в innodb_data_file_path.
При первом создании базы данных InnoDB лучше всего запустить сервер MySQL из командной строки. Тогда на экран будет выводиться информация о создании базы данных и вы сможете увидеть, что происходит. Например, в Windows можно запустить `mysqld-max.exe' с параметрами:
your-path-to-mysqld>mysqld-max --standalone --console
Чтобы узнать, какой вид должна иметь выводящаяся информация, обратитесь к разделу Creating InnoDB Tablespace.
Где поместить файл `my.cnf' или `my.ini' в Windows? Для Windows существуют следующие правила:
- Должен быть создан только один файл `my.cnf' или `my.ini'.
- Файл `my.cnf' должен находиться в корневом каталоге диска `C:'.
- Файл `my.ini' должен находиться в каталоге `WINDIR', например в `C:\WINDOWS' или `C:\WINNT'. Чтобы вывести значение `WINDIR', можно воспользоваться командой SET операционной системы MS-DOS.
- Если на вашем компьютере применяется загрузчик операционной системы, в котором диск `C:' не является загрузочным, то необходимо использовать файл `my.ini'.
Где указываются параметры в Unix?
Где указываются параметры в Unix?
В Unix mysqld считывает параметры из следующих файлов, если они существуют, в таком порядке:
- `/etc/my.cnf' - общие параметры.
- `COMPILATION_DATADIR/my.cnf' -- параметры для сервера.
- `defaults-extra-file' -- файл, указанный при помощи --defaults-extra-file=....
- `~/.my.cnf' - параметры для пользователя.
COMPILATION_DATADIR представляет собой каталог данных MySQL, который был указан как параметр ./configure при компиляции mysqld (обычно `/usr/local/mysql/data' для установки исполняемых файлов или `/usr/local/var' для установки исходного кода).
Если точно не известно, откуда mysqld считывает свои файлы `my.cnf' или `my.ini', можно задать путь как первый параметр командной строки для сервера: mysqld --defaults-file=your_path_to_my_cnf.
Предположим, что у вас есть компьютер Linux с 512 Мб ОЗУ и тремя жесткими дисками по 20 Гб (с путями каталогов ``/'', ``/dr2'' and ``/dr3''). Ниже приведен пример возможных параметров конфигурации в `my.cnf' для InnoDB:
[mysqld] # Здесь вы можете задать другие опции сервера MySQL # ... # innodb_data_home_dir = / # Файлы данных должны иметь достаточно # места для сохранения ваших данных и # индексов innodb_data_file_path = ibdata/ibdata1:2000M;dr2/ibdata/ibdata2:2000M # Размер буферного пула следует задавать # как 50 - 80% памяти компьютера, но # для Linux x86 следует убедиться, что # общий расход памяти не превышает 2 Гб set-variable = innodb_buffer_pool_size=350M set-variable = innodb_additional_mem_pool_size=20M innodb_log_group_home_dir = /dr3/iblogs # .._log_arch_dir должен быть такой # же, как _log_group_home_dir innodb_log_arch_dir = /dr3/iblogs innodb_log_archive=0 set-variable = innodb_log_files_in_group=3 # Размер файла журналов должен составлять # около 15% от размера буферного пула set-variable = innodb_log_file_size=50M set-variable = innodb_log_buffer_size=8M # Если допустима потеря нескольких # последних транзакций, установите # flush_log_в_trx_commit в 0 innodb_flush_log_at_trx_commit=1 set-variable = innodb_file_io_threads=4 set-variable = innodb_lock_wait_timeout=50 #innodb_flush_method=fdatasync #innodb_fast_shutdown=1 #set-variable = innodb_thread_concurrency=5
Обратите внимание на то, что два файла данных размещены на разных дисках. Параметр innodb_data_file_path предназначен для указания путей к файлам данных, а содержимое параметра innodb_data_home_dir добавляется непосредственно перед путями к файлам данных через косую или обратную косую черту. InnoDB заполняет табличное пространство, образованное файлами данных, снизу вверх. В некоторых случаях это позволяет увеличить производительность баз данных, если не все данные размещены на одном физическом диске. Размещение файлов журнала на другом диске очень часто позволяет повысить производительность. Для файлов данных можно также использовать разделы реального диска (реальные устройства): в некоторых версиях Unix это ускоряет операции ввода/вывода. Информацию по указанию параметров в `my.cnf' вы найдете в разделе руководства по управлению пространством файлов InnoDB.
Предупреждение
Предупреждение
innodb_buffer_pool_size + key_buffer + max_connections * (sort_buffer + record_buffer) + max_connections * 2 MB
приближается к значению 2 Гб или превышает его. Каждый поток будет использовать стек (обычно 2 Мб, но в бинарной поставке MySQL AB только 256 Кб) и в худшем случае также дополнительную память sort_buffer + record_buffer.
Как настроить другие параметры сервера mysqld?
Как настроить другие параметры сервера mysqld?
set-variable = max_connections=200 set-variable = record_buffer=1M set-variable = sort_buffer=1M # Размер key_buffer следует задавать как # 5%-50% от вашего ОЗУ, в зависимости # от того, как часто у вас используются # таблицы MyISAM, но key_buffer + # размер буферного пула InnoDB не должен # превышать 80% вашего ОЗУ set-variable = key_buffer=...
Обратите внимание на то, что некоторые параметры представлены при помощи формата числового параметра `my.cnf': set-variable = innodb... = 123, а остальные (строчные и логические параметры) - при помощи другого формата: innodb_... = ....
Параметры настройки имеют следующие значения: