Назад | Перейти на главную страницу

Ошибка "Таблица заполнена" для таблицы с 3 строками

Каждые несколько недель я получаю сообщение The table 'ttrss_users' is full из установки http://tt-rss.org/redmine/ (приложение для чтения RSS, написанное на PHP).

Это всегда таблица пользователей (InnoDB), имеющая следующий формат:

id              int(11)
login           varchar(120)
pwd_hash        varchar(250)
last_login      datetime
access_level    int(11)
theme_id        int(11)
email           varchar(250)
full_name       varchar(250)
email_digest    tinyint(1)
last_digest_sent datetime
created         datetime
twitter_oauth   longtext

Запрос, вызывающий ошибку: UPDATE ttrss_users SET last_login = NOW() WHERE id = x и влияет только на эту таблицу (никакую другую таблицу или базу данных на этом сервере).

Единственное решение, которое я нашел, - это перезапустить сервер. Изменение MAX_ROWS и AVG_ROW_LENGTH через ALTER TABLE, похоже, влияет только на таблицы MyISAM.

Любые идеи?

Проблема заключается прямо в innodb_data_file_path.

Согласно вашему комментарию: innodb_data_file_path = ibdata1:10M:autoextend:max:1024M

Файл ibdata1 содержит четыре типа данных

  1. Табличные данные

  2. Индексы таблиц

  3. Данные MVCC (Multiversioning Concurrency Control)

  4. Табличные метаданные

Может просто не хватить места для записи данных MVCC вокруг старых значений для строки в ttrss_users, которую необходимо обновить. Попробуйте снять ограничение на размер ibdata1

  • Шаг 01) Измените строку в /etc/my.cnf с этой

    innodb_data_file_path = ibdata1:10M:autoextend:max:1024M

к этому

`innodb_data_file_path = ibdata1:10M:autoextend`
  • Шаг 02) service mysql restart

  • Шаг 03) Попробуйте ваш оператор UPDATE

Попробуйте !!!

ОБНОВЛЕНИЕ 2011-10-21 17:03 EDT

Вы можете очистить ibdata1 и сохранить таблицы InnoDB вне ibdata1