Jump to content

Массовое изменение формата строк из Compact в Dynamic

Featured Replies

Есть пожелание от установщика:

Цитата

 

  • У вас есть одна или несколько таблиц InnoDB, которые используют строковый формат Compact. Это может ограничить объем данных, которые могут храниться в таблице. Мы рекомендуем изменить его на «Динамический». Если вы не знаете, как это сделать, обратитесь за помощью к своему хостинг-провайдеру или системному администратору.

Менять через heidisql по одной долго а запроса не знаю. Есть методы?

Link to comment
https://ipbmafia.ru/topic/22502-massovoe-izmenenie-formata-strok-iz-compact-v-dynamic/
Share on other sites

Запрос сформирует набор запросов для всех таблиц с признаком Compact

SELECT CONCAT('ALTER TABLE ', SUBSTRING_INDEX(NAME,'/',-1), ' ROW_FORMAT=DYNAMIC;')
FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES
WHERE ROW_FORMAT='Compact';

У вас получится список типа такого, который можно скопировать, отредактировать, убрать лишнее и запустить пакетом.

ALTER TABLE ibf_members ROW_FORMAT=DYNAMIC;
ALTER TABLE ibf_sessions ROW_FORMAT=DYNAMIC;
ALTER TABLE ibf_forsex ROW_FORMAT=DYNAMIC;

Предварительно надо проверить наличие этих глобальных настроек (в файле конфигурации mysql) и добавить их, если отсутствуют.

innodb_file_format=Barracuda;
innodb_file_per_table=1;
innodb_large_prefix=1;

и рестартануть mysql сервер

Никакой ответственности за результат я не несу, тренируйтесь на бекапе/тестовых таблицах. Если для вас это темный лес, то 

Цитата

обратитесь за помощью к своему хостинг-провайдеру или системному администратору.

 

Edited by Desti

  • 2 недели спустя...

Desti , тоже с этим столкнулся, ваш метод выводит совсем не то, что нужно

Переменные выставил

У меня почему то все таблицы в Compact

изображение_2020-11-06_163753.png

Если форум не мега большой, можно не переводить формат.

1 час назад, HooLIGUN сказал:

У меня почему то все таблицы в Compact

Судя по пустому результату у вас нет таблиц Compact. 

У меня одна табличка в компакте, старая какая-то, всё видно.

image.thumb.png.df090a222ad3bd8efb4dccaaf560c5e8.png

Desti  Все таблицы в Compact (innoDB), и движок бы просто так не ругался.

 

Т.е. у вас в такой таблице везде в ROW_FORMAT стоит Compact, а запрос ничего не выдает? 

image.thumb.png.d3820345a3707dffb6ab838728758925.png

Desti Да, сейчас дойду да ПК, покажу скрин

Ну так же не бывает :) 

Там есть еще одна таблица, `INNODB_SYS_TABLESPACES` - в ней тоже формат обозначен, правда в другом виде, 'Compact or Redundant'. 

  • 2 месяца спустя...

Почти все таблицы в Compact, на  запрос у меня ошибка:

Цитата

SELECT CONCAT('ALTER TABLE ', SUBSTRING_INDEX(NAME,'/',-1), ' ROW_FORMAT=DYNAMIC;')
FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES
WHERE ROW_FORMAT='Compact';

----

Цитата

Ошибка

SQL запрос: https://macauto.ru/ut/mymac/themes/dot.gif

SELECT CONCAT('ALTER TABLE ', SUBSTRING_INDEX(NAME,'/',-1), ' ROW_FORMAT=DYNAMIC;')

FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES

WHERE ROW_FORMAT='Compact' LIMIT 0, 25

Ответ MySQL: https://macauto.ru/ut/mymac/themes/dot.gif

#1054 - Неизвестный столбец 'ROW_FORMAT' в 'where clause'

 

сделайте 

SHOW COLUMNS FROM `information_schema`.`INNODB_SYS_TABLES`; 

и покажите результат

А что это за база и какая версия?

А тут?

SHOW COLUMNS FROM `information_schema`.`TABLES` where TABLE_SCHEMA='имя вашей базы'; 

Если есть колонка ROW_FORMAT, то сделайте так

SELECT CONCAT('ALTER TABLE ', SUBSTRING_INDEX(TABLE_NAME,'/',-1), ' ROW_FORMAT=DYNAMIC;')
FROM INFORMATION_SCHEMA.TABLES
WHERE ROW_FORMAT='Compact' and TABLE_SCHEMA='имя вашей базы'; 

 

5.5.68-MariaDB .

При выполнении запроса:

SHOW COLUMNS FROM `information_schema`.`TABLES` where TABLE_SCHEMA='forum'; 

Ошибка

SQL запрос:

SHOW COLUMNS FROM `information_schema`.`TABLES` where TABLE_SCHEMA='forum'

Ответ MySQL: https://macauto.ru/ut/mymac/themes/dot.gif

#1054 - Неизвестный столбец 'TABLE_SCHEMA' в 'where clause'

Пробовал из самой базы делать и из списка баз, результат один.

9 часов назад, Desti сказал:

SELECT CONCAT('ALTER TABLE ', SUBSTRING_INDEX(TABLE_NAME,'/',-1), ' ROW_FORMAT=DYNAMIC;')
FROM INFORMATION_SCHEMA.TABLES
WHERE ROW_FORMAT='Compact' and TABLE_SCHEMA='имя вашей базы'; 

Этот запрос прошел, вывел запрос для всех  кроме трех, те что с FULLINDEX и в MyISAM.

По

 

2 часа назад, macar сказал:

SHOW COLUMNS FROM `information_schema`.`TABLES` where TABLE_SCHEMA='forum'; 

На машкеДБ это почему-то не работает. У меня percona.

Попробовал конвертировать одну таблицу, вот что получилось, так и должно быть?

Статистика строки
Формат Compact
Параметры row_format=DYNAMIC
Сравнение utf8_unicode_ci
Следующий автоматический индекс

107 335

Я не знаю, что вы делаете. Вот как это выглядит у меня:

Исходное состояние, таблица ibf_banner в формате Compact

image.png.a07179a90ecfbbb6f674d8a00e303a44.png

Проверяем запросом, меняем, снова проверяем.

image.png.17c1bfd35f90cb11ca4412c44b9d129e.png

Снова смотрим в сводную таблицу

image.png.e2aa09b81c3c6f68cdc3f75956f3c150.png

 

 Да ничего другого что тут описано я не делаю. Это мне phpmyadmin так показывает, сделал экспорт структуры таблицы которую конвертировал,  вроде нормально.

CREATE TABLE `ibf_autowelcome_members` (
  `welcome_member_id` bigint(20) UNSIGNED NOT NULL COMMENT 'ID Number',
  `welcome_sent` tinyint(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC;

 

 Кстати , MarioDB требует формат файлов не Барракуда а Antelope

 Warning: #1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope.
Warning: #1478 InnoDB: assuming ROW_FORMAT=COMPACT.

Edited by macar

Обновите машку до актуальной версии, это вроде бы баг. 

  • 2 years later...

Здравствуйте, подскажите есть уже готовое решение с этой проблемой, у меня такая же проблема сейчас, спасибо

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.


Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.