{{tag>mysql innodb}}

===== InnoDB =====

  * макс. диск: 64Тб
  * полная поддержка транзакций (4 уровня изоляции)
  * блокировка записи/строк (не таблицы), два вида блокировок (SHARED, EXCLUSIVE)
  * полнотекстовый индекс: нет
  * безопасная для транзакций
  * индексы кластеризуются для «типичных запросов»
  * поддержка целостности (внешние ключи)
  * может использоваться на ОС с ограниченным размером файла
  * множество настроек для оптимизации
  * позволяет использовать Raw Disk для таблиц в обход ФС
  * по умолчанию включен AUTOCOMMIT (SET autocommit=1)
  * автоматически детектит дэдлоки ([[mysql:deadlock|deadlocks]])

Движок был разработан специально для больших таблиц. Разработчики заявляют, что InnoDB — самый быстрый из всех известных движков для БД основанных на дисках (множественные тесты это подтверждают)

==== Советы/Рекомендации ====

  * SELECT COUNT(*) FROM table работает гораздо медленнее, чем MyISAM — создавайте триггеры если нужно (COUNT, SUM, AVG, etc)
  * бэкап простым копирование файлов невозможен
  * mysqldump работает медленно, для бэкапа используйте InnodDb Hot Backup
  * следите за индексами, выгода InnoDB теряется, если для запросов нет индексов

Рекомендации: высоконагруженные сайты, финансовые транзакции

===== XtraDB =====

===== Восстановление таблиц =====

  * ibdata1: By default all data and indexes for all tables/databases is stored in a single, shared file: ibdata1. idbata1 does not shrink. If rows are deleted, space will be reclaimed by new rows, but the file will only grow in size.
  * ib_logfile0 and ib_logfile1: Redo log files to recover lost data if MySQL is not shutdown properly.
  * tablename.frm: Each table has a small *.frm file in the database-specific directory which stores the table definition.

==== Этапы восстановление ====

  - Create empty InnoDB tablespace (remove existing ibdata1, ib_logfile* and start MySQL).
  - Enable innodb_file_per_table
  - Create tables you want to connect
  - Compile ibdconnect from Percona InnoDB Recovery Tool and run ./ibdconnect -o ibdata1 -f t1.ibd -d <your database> -t <table name, t1 in this case> for each table.
  - Then fix checksums in ibdata1 as described in the post
  - Copy new ibdata1 and all your *.ibd files to the datadir.
  - Start MySQL and take a dump of the tables.
