Поймал ошибку Mysql: The table is full
По дефолту при создании таблицы в mysql (до 5-й вроде бы версии) существует ограничение на количество записей, размер таблицы. Таблица MyISAM. Достигли размера больше 4Гб и поймали ошибку: The table is full
Сервак на FreeBSD, по идее ограничений на размер файла в 4Гб для ffs нет.
Смотрим.
mysql> show table status like 'new_posts';
Обращаем внимание на Max_data_length он у нас 4294967295.
Вносим изменения в свойства таблицы:
mysql> alter table new_posts max_rows = 1000000000 avg_row_length = 1038;
Query OK, 4131562 rows affected (1 hour 20 min 36.41 sec)
Records: 4131562 Duplicates: 0 Warnings: 0
Запрос займет некоторое продолжительное время.
Проверяем опять.
mysql> show table status like 'new_posts';
Получаем Max_data_length равным 1099511627775. По идее ошибка должна уйти.
Проапдейтил php c 4 ветки до пятой (5.4), отвалился ipb. Пришлось откатиться до 5.3
Удаляем все пакеты php5 (с зависимостями)
pkg_deinstall -r -f php5
И ставим php53 и php53-extensions. Все.
Если у вас на сервере дефолтная кодировка mysql – latin1, а в секции [mysqldump] в файле my.cnf указана кодировка дампа – cp1251 и дамп IPB у вас в правильном cp1251, то после того как мы залили дамп в базу (скажем во время восстановления из дампа) – можем получить знаки вопросов вместо кириллицы. И промучиться с кодировками можно довольно долго…
Лечится правкой файла IPB 1.3 – mySQL.php (лежит в sources/Drivers)
if ( !mysql_select_db($this->obj['sql_database'], $this->connection_id) )
{ echo ("ERROR: Cannot find database ".$this->obj['sql_database']);}
mysql_query("SET NAMES 'cp1251'");
За решение спасибо song’у:
http://www.sysman.ru/index.php?showtopic=7164
Перенес форум IPB 1.3 на новую площадку. Прописал новые пути однако мод file uploader начал ругаться:
Warning: filesize() [function.filesize]: Stat failed for /usr/local/www/apache22/data/forum/uploads/img-178-233724c5ad.jpg (errno=2 - No such file or directory) in /www/forum/sources/imageupload.php on line 187
Просмотрел все конфиги – переменной пути не нашёл. Значит путь прописан в базе. Смотрим исходник imageupload.php. Ищем переменную upload_dir в таблице ibf_image_settings:
select upload_dir from ibf_image_settings;
Меняем на то что нам нужно:
update ibf_image_settings set upload_dir = '/www/forum/uploads/';
Проверяем ещё раз селектом. Всё ок.
В IPB 1.3 (Invision Power Board) с установленным модом репутации бывает такая штука – по непонятным причинам некоторым пользователям нельзя изменять репутацию других пользователей.
При попытке изменить репу получаем такое сообщение:
Администратор запретил Вам изменять репутацию других пользователей
Лечится так: проверяем в базе – таблица – memebers, поля – allow_rep, allow_anon – нули поменять на единицы.