Преимущество использования raw раздела:
- Табличное пространство может занимать все пространство в разделе, без ограничений накладываемых в виде максимального размера файла в ОС
- Снижение фрагментации
- Снижение нагрузки из-за отсутствия уровня управления ФС
(ОС: Debian 6.0 x64)
Создаем целевой раздел, например логический том объемом в 984Мб
lvcreate -L984M -n innodb_data main
Выполняем бэкап всех баз данных, удаляем все БД с InnoDB таблицами и прописываем в конфиг Mysql сервера следующее
[mysqld]
innodb_data_home_dir =
innodb_data_file_path = /dev/main/innodb_data:984Mnewraw
добавляем системного пользователя mysql в группу disk, чтобы Mysql сервер мог получить доступ к raw разделу
gpasswd -a mysql disk
останавливаем сервер, удаляем все файлы ibdata и ib_logfile, запускаем Mysql сервер, при запуске сервера раздел /dev/main/innodb_data проинициализируется, после чего обратно выключаем Mysql сервер
во время инициализации в логах будет что то подобное (init скрипт при запуске Mysql может вернуть ошибку, но на это не надо обращать внимания, так как сервер все равно запуститься и будет подготавливать себе raw раздел, немного подскочит нагрузка на дисковую подсистему, ждем пока завершится инициализация)
Oct 31 12:55:46 srv mysqld: InnoDB: The first specified data file /dev/main/innodb_data did not exist:
Oct 31 12:55:46 srv mysqld: InnoDB: a new database to be created!
Oct 31 12:55:46 srv mysqld: 111031 12:55:46 InnoDB: Setting file /dev/main/innodb_data size to 984 MB
Oct 31 12:55:46 srv mysqld: InnoDB: Database physically writes the file full: wait...
Oct 31 12:56:18 srv mysqld: InnoDB: Progress in MB: 100 200 300 400 500 600 700 800 900
Открываем конфиг и меняем newraw на raw
[mysqld]
innodb_data_home_dir =
innodb_data_file_path = /dev/main/innodb_data:984Mraw
Запускаем Mysql сервер и заливаем наши базы обратно.
Не забываем что параметр innodb_file_per_table = 1 в конфиг.файле my.cnf не должен использоваться, чтобы данные базы не выносились в .ibd файлы в каталог базы данных /var/lib/mysql/<имя_базы>/ (путь используемый MySQL сервером по умолчанию). Иначе мы не получим ощутимого эффекта от использования raw раздела.
Не забываем что параметр innodb_file_per_table = 1 в конфиг.файле my.cnf не должен использоваться, чтобы данные базы не выносились в .ibd файлы в каталог базы данных /var/lib/mysql/<имя_базы>/ (путь используемый MySQL сервером по умолчанию). Иначе мы не получим ощутимого эффекта от использования raw раздела.