2015-01-14 2 views
0

Я запускаю сервер MySQL 5.1 под CentOS 6.5. Во время импорта файла SQL сегодня все таблицы были созданы в MyISAM, даже если они были объявлены для использования механизма InnoDB.Преобразование InnoDB в MyISAM при импорте

Например, у меня была таблица объявленную на .sql файл, как это:

CREATE TABLE `customer` (
    `customer_id` int(11) NOT NULL AUTO_INCREMENT, 
    `customer_no` varchar(20) DEFAULT NULL, 
    `company_name` varchar(50) DEFAULT NULL, 
[....] 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT 

Когда .sql файл был импортирован с помощью:

стол
mysql -u <username> -p < new_db.sql 

Клиент был создан с помощью Таблица MyISAM. Как это может быть возможным?

Чтобы исправить проблему, я добавил в конфигурацию MySQL, чтобы установить двигатель по умолчанию в InnoDB и перезапустить, но, поскольку механизм таблицы был объявлен InnoDB, не следует ли его загружать с использованием этого объявленного двигателя, а не по умолчанию?

+1

Вы уверены, что таблица уже не существует? –

+0

Да. Сценарий генерируется MySQL Dump, поэтому всякий раз, когда существует таблица, он падает, а затем повторно создает его. – Mcloide

+0

Может быть, InnoDB не удалось инициализировать, а MySQL превратил таблицу InnoDB в MyISAM? – akuzminsky

ответ

0

У MySQL 5.1 есть некоторые проблемы. Я предпочитаю его обновлять.

Другой способ - отключить различные настройки InnoDB в my.cnf до тех пор, пока не будет запущен innoDB.

show engine innodb status 

С помощью этой команды вы можете проверить текущее состояние. Не забудьте перезапустить mysql после каждого изменения.

+0

Проблема в том, что это сервер с 200 базами данных и по меньшей мере 50 таблиц, поэтому это будет убийца, который делает это ... – Mcloide

+0

У вас есть большие таблицы? –

+0

Многие из них. Одна из таблиц содержит ежедневные транзакции, поэтому она может получить зверски большую. – Mcloide

0

После долгого поиска объяснений проблемы я не нашел их, но есть способы предотвратить проблему и исправить ее.

1st - Проверьте конфигурацию MySQL: no engine substitution. Это поможет избежать проблемы. http://dev.mysql.com/doc/refman/5.0/en/sql-mode.html#sqlmode_no_engine_substitution

2nd - Когда ошибка происходит, используйте как show_warnings, так и show_engines, чтобы увидеть возникшие ошибки и посмотреть, включен ли InnoDb. Вы также можете использовать show engine innodb status для получения подробной информации.

3rd - Поскольку MySQL 5.1 по умолчанию используется MyISAM в качестве механизма по умолчанию, задайте конфигурацию mysql для использования InnoDB в качестве механизма по умолчанию.

default-storage-engine=InnoDB 
default-table-type=InnoDB 

И если все это не помогает, и вы все еще не может понять, почему или что происходит, то, что это может помочь:

$ sudo service mysqld stop 
$ mv /var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile0.bak 
$ mv /var/lib/mysql/ib_logfile1 /var/lib/mysql/ib_logfile1.bak 
$ sudo service mysqld start 

Это не правильно объяснить, почему проблема произошло но это поможет решить эту проблему. Следующий шаг - проверить, поддерживает ли сервер и приложение обновление MySQL до 5.5.

 Смежные вопросы

  • Нет связанных вопросов^_^