Вопрос: Как получить оценку размера mysql table dump


Привет всем кто-нибудь знает, как получить оценку размера одной таблицы mysql? Я имею в виду, что я планирую сделать резервную копию всей таблицы mysql на всем моем сервере но я хотел бы знать, насколько велика должна быть каждая таблица дампа без создания физической дампы. Есть какая-то команда, которая позволяет сделать это? Я использую mysql 5.1 на debian 6 ура


6
2017-07-27 16:44


Источник




Ответы:


Как видно Вот, вы можете запускать эти запросы в своей базе данных (украл из комментариев на странице, затем изменил настройку).

  • По базе данных:

SELECT table_schema 'database', concat( round( sum( data_length + index_length ) / ( 1024 *1024 ) , 2 ) , 'M' ) size FROM information_schema.TABLES WHERE ENGINE=('MyISAM' || 'InnoDB' ) GROUP BY table_schema;

  • По таблице:

SELECT concat( table_schema, '.', table_name ) table_name, concat( round( data_length / ( 1024 *1024 ) , 2 ) , 'M' ) data_length, concat( round( index_length / ( 1024 *1024 ) , 2 ) , 'M' ) index_length, concat( round( round( data_length + index_length ) / ( 1024 *1024 ) , 2 ) , 'M' ) total_size FROM information_schema.TABLES ORDER BY ( data_length + index_length ) DESC;


4
2017-07-27 18:02



идеальный - именно то, что я искал;) - marcodv


Поскольку mysqldump является логическим представлением базы данных, вы найдете только фактические данные. Индексы никогда не хранятся в mysqldump, но определение таблицы будет определять, как заполнять индексы.

Трудно выбрать точное число для mysqldump из-за того, что написано в mysqldump:

  • Расширенные команды INSERT с десятками, сотнями или тысячами строк
    • десятки или сотни скобок и запятых для INSERT
  • Команды создания таблицы
  • Директивы для
    • Отключение внешних ключей и уникальных ключей для продолжительности mysqldump
    • Запись файла журнала и положение mysqldump
    • Отключение / включение индексов (только для MyISAM)
    • Блокировка всей таблицы для записи
    • Сохранение / восстановление глобальных переменных

То, что вы можете измерить как фактор, который нужно пройти, - это просто сумма данных:

SELECT SUM(data_length)/POWER(1024,2) TotalDB_MB
FROM information_schema.tables;

Чтобы увидеть сумму по базе данных и общее количество:

SELECT table_schema,SUM(data_length)/POWER(1024,2) DB_MB
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','performance_schema','mysql')
GROUP BY table_schema
WITH ROLLUP;

Чтобы просмотреть каждую промежуточную таблицу и базы данных:

SELECT table_schema,table_name,SUM(data_length)/POWER(1024,2) DB_MB
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','performance_schema','mysql')
GROUP BY table_schema,table_name
WITH ROLLUP;

Вы можете использовать следующие

  • POWER(1024,1) отчеты в КБ
  • POWER(1024,2) отчеты в MB
  • POWER(1024,3) отчеты в GB
  • POWER(1024,4) отчеты в ТБ
  • POWER(1024,5) отчеты в PB
    • Это PetaBytes
    • Если вам нужно использовать этот, я взимаю разумные консультации

Вы можете использовать эту Формулу

  • NOC = количество столбцов за стол
  • NumCommas = NOC - 1
  • NumQuotes = NumCharacterColumnsInTable X 2
  • NumRows = количество строк в таблице
  • NumParens = NumRows X 2
  • CharactersForSQLPerTable = NumRows X (NumCommas + NumQuotes) + NumParens

Окончательная формула для приблизительного размера mysqldump

  • CharactersForSQLPerTable X NumberOfTables
  • + Characters for "INSERT INTO tblname VALUES "
  • + TotalDB_MB

1
2017-07-27 20:47