Каждые несколько недель я получаю сообщение 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 содержит четыре типа данных
Табличные данные
Индексы таблиц
Табличные метаданные
Может просто не хватить места для записи данных 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
Попробуйте !!!
Вы можете очистить ibdata1 и сохранить таблицы InnoDB вне ibdata1